1 Reply Latest reply: Dec 7, 2010 9:05 AM by 704908 RSS

    PushReplication and FilteringPublishingTransformer broken

    704908
      Guys,

      I'm trying to use a scheme like this:
                               <sync:filtering-transformer-scheme>
                                    <sync:entry-operation-filter>
                                         <sync:filter>
                                         <replication-filter:location-and-consume-filter />
                                         </sync:filter>
                                         <sync:operations>Insert, Update, Delete</sync:operations>
                                    </sync:entry-operation-filter>
                               </sync:filtering-transformer-scheme>
      which results in lots of error like this:

      2010-12-02 08:38:58,207 ERROR localhost-2 [${build.version}] Log4j [Logger@9258732 n/a] - 46.543 <Error> (thread=PublishingService:Thread-64, member=1): com.oracle.coherence.patterns.pushreplication.filters.EntryOperationFilter failed due to java.lang.UnsupportedOperationException: PublishableEntry doesn't support extract(ValueExtractor) as it's immutable. Class:com.oracle.coherence.patterns.pushreplication.filters.EntryOperationFilter

      Using the debugger I got this stack trace:

      Daemon Thread [PublishingService:Thread-7] (Suspended (breakpoint at line 121 in PublishableEntry))     
           PublishableEntry.extract(ValueExtractor) line: 121     
           EqualsFilter(ExtractorFilter).evaluateEntry(Map$Entry) line: 94     
           EntryOperationFilter.evaluate(Object) line: 160     
           FilteringIterator<T>.seekNext() line: 83     
           FilteringIterator<T>.<init>(Filter, Iterator<T>) line: 67     
           FilteringPublishingTransformer.transform(String, String, Iterator<EntryOperation>) line: 63     
           CoherencePublishingService.onPublish() line: 1054     
           CoherencePublishingService$8.run() line: 1107     
           Executors$RunnableAdapter<T>.call() line: 441     
           FutureTask$Sync.innerRun() line: 303     
           ScheduledThreadPoolExecutor$ScheduledFutureTask<V>(FutureTask<V>).run() line: 138     
           ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.access$301(ScheduledThreadPoolExecutor$ScheduledFutureTask) line: 98     
           ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.run() line: 206     
           ThreadPoolExecutor$Worker.runTask(Runnable) line: 886     
           ThreadPoolExecutor$Worker.run() line: 908     
           Thread.run() line: 662     

      PublishableEntry.extract looks like:
          public Object extract(ValueExtractor valueExtractor)
          {
              //TODO: we could support this but it's not really required
              throw new UnsupportedOperationException(
                  "PublishableEntry doesn't support extract(ValueExtractor) as it's immutable.");
          }
      It seems to me that this really is required, unless I have really misunderstood how to configure the new push replication.

      I'm going to implement that method and see what happens...

      Regards, Paul