[ 
https://issues.apache.org/activemq/browse/SM-1329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=42440#action_42440
 ] 

Guillaume Nodet commented on SM-1329:
-------------------------------------

Googling a bit, it seems like the TCCL has no effect on the ObjectInputStream.
I think the way to go is to override it in the JdbcStore to use someting like:

{code}
public class CustomObjectInputStream extends ObjectInputStream {
    private ClassLoader classLoader;
    
    public CustomObjectInputStream(InputStream in, ClassLoader classLoader) 
throws IOException {
        super(in);
        this.classLoader = classLoader;
    }
    
    protected Class<?> resolveClass(ObjectStreamClass desc) throws 
ClassNotFoundException {
        return Class.forName(desc.getName(), false, classLoader);
    }
}
{code}

as explained at 
http://forum.java.sun.com/thread.jspa?threadID=5163767&tstart=300.

I think using this class in the JdbcStore and passing the TCCL as a parameter 
may give a good result.  We may also need to set the TCCL at the beginning of 
the onTimeout method.

> SplitAggregator$SplitterAggregation ClassNotFoundException on 
> JdbcStore.load() invocation
> -----------------------------------------------------------------------------------------
>
>                 Key: SM-1329
>                 URL: https://issues.apache.org/activemq/browse/SM-1329
>             Project: ServiceMix
>          Issue Type: Bug
>          Components: servicemix-core
>    Affects Versions: 3.2.1
>            Reporter: Ron Gavlin
>            Priority: Critical
>         Attachments: jndi.xml, TestStore_v_0-sa.zip
>
>
> I have a process flow with an EIP RecipientListAggregator that generates a 
> ClassNotFoundException on JdbcStore.load(). The error is listed below. I have 
> attached my test service assembly for your review. Any assistance you can 
> provide is appreciated. 
> - Ron
> 00:35:02,357 | ERROR | pool-flow.seda.servicemix-eip-thread-2 | EIPComponent  
>            | ervicemix.common.BaseLifeCycle   48 | Error processing exchange 
> InOnly[
>   id: ID:10.10.10.10-1197eb63a39-3:1
>   status: Active
>   role: provider
>   service: 
> {urn:eng:spagic:processes:TestStore:v0}TestStore.EndRecipientList_v_0
>   endpoint: TestStore.EndRecipientList_v_0
>   in: <?xml version="1.0" encoding="UTF-8"?><test>hello world</test>
> ]
> java.lang.NullPointerException
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator.processProvider(AbstractAggregator.java:149)
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator.process(AbstractAggregator.java:134)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
>       at 
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>       at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
>       at 
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>       at java.lang.Thread.run(Thread.java:595)
> 00:35:04,530 | ERROR | pool-flow.seda.servicemix-eip-thread-1 | EIPComponent  
>            | ervicemix.common.BaseLifeCycle   48 | Error processing exchange 
> InOnly[
>   id: ID:10.10.10.10-1197eb63a39-7:0
>   status: Active
>   role: provider
>   service: 
> {urn:eng:spagic:processes:TestStore:v0}TestStore.EndRecipientList_v_0
>   endpoint: TestStore.EndRecipientList_v_0
>   in: <?xml version="1.0" encoding="UTF-8"?><test>hello world</test>
> ]
> java.lang.NullPointerException
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator.processProvider(AbstractAggregator.java:149)
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator.process(AbstractAggregator.java:134)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
>       at 
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>       at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
>       at 
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>       at java.lang.Thread.run(Thread.java:595)
> 00:35:04,851 | INFO  | main       | JDBCAdapterFactory       | 
> icemix.jdbc.JDBCAdapterFactory   45 | Database driver recognized: 
> [mysql-ab_jdbc_driver]
> 00:35:05,061 | INFO  | main       | JBIContainer             | 
> mix.jbi.container.JBIContainer  642 | ServiceMix JBI Container (ServiceMix) 
> started
> 00:35:08,015 | INFO  | main       | JDBCAdapterFactory       | 
> icemix.jdbc.JDBCAdapterFactory   45 | Database driver recognized: 
> [apache_derby_embedded_jdbc_driver]
> 00:35:08,456 | INFO  | main       | LogTask                  | 
> servicemix.jbi.logging.LogTask   58 | Logging system reconfigured using file: 
> file:conf/log4j.xml
> 00:35:23,057 | ERROR | pool-flow.seda.servicemix-eip-thread-1 | EIPComponent  
>            | ervicemix.common.BaseLifeCycle   48 | Error processing exchange 
> InOnly[
>   id: ID:10.10.10.10-1197eb63a39-7:1
>   status: Active
>   role: provider
>   service: 
> {urn:eng:spagic:processes:TestStore:v0}TestStore.EndRecipientList_v_0
>   endpoint: TestStore.EndRecipientList_v_0
>   in: <?xml version="1.0" encoding="UTF-8"?><test>hello world</test>
> ]
> java.io.IOException: Error storing object
>       at org.apache.servicemix.store.jdbc.JdbcStore.load(JdbcStore.java:85)
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator.processProvider(AbstractAggregator.java:152)
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator.process(AbstractAggregator.java:134)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
>       at 
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>       at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
>       at 
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>       at java.lang.Thread.run(Thread.java:595)
> Caused by: java.lang.ClassNotFoundException: 
> org.apache.servicemix.eip.patterns.SplitAggregator$SplitterAggregation
>       at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>       at 
> org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)
>       at 
> org.codehaus.classworlds.DefaultClassRealm.loadClassDirect(DefaultClassRealm.java:412)
>       at 
> org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:376)
>       at 
> org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:242)
>       at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:585)
>       at 
> java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1544)
>       at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
>       at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
>       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
>       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
>       at org.apache.servicemix.store.jdbc.JdbcStore.load(JdbcStore.java:80)
>       ... 12 more
> 00:35:26,712 | INFO  | Timer-6    | AbstractAggregator       | 
> eip.support.AbstractAggregator  223 | Caught exception while processing 
> timeout aggregation
> java.io.IOException: Error storing object
>       at org.apache.servicemix.store.jdbc.JdbcStore.load(JdbcStore.java:85)
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator.onTimeout(AbstractAggregator.java:212)
>       at 
> org.apache.servicemix.eip.support.AbstractAggregator$1.timerExpired(AbstractAggregator.java:177)
>       at 
> org.apache.servicemix.timers.impl.TimerManagerImpl$TimerImpl.run(TimerManagerImpl.java:83)
>       at java.util.TimerThread.mainLoop(Timer.java:512)
>       at java.util.TimerThread.run(Timer.java:462)
> Caused by: java.lang.ClassNotFoundException: 
> org.apache.servicemix.eip.patterns.SplitAggregator$SplitterAggregation
>       at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>       at 
> org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)
>       at 
> org.codehaus.classworlds.DefaultClassRealm.loadClassDirect(DefaultClassRealm.java:412)
>       at 
> org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:376)
>       at 
> org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:242)
>       at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:585)
>       at 
> java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1544)
>       at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
>       at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
>       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
>       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
>       at org.apache.servicemix.store.jdbc.JdbcStore.load(JdbcStore.java:80)
>       ... 5 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to