Zdravim,
Nesetkal se zde nahodou nekdo s problemem s volanim metod na remote (staleless)
session beanu pres JBoss klient, kdy volani na klientu konci s:
java.lang.NullPointerException
at
org.jboss.ejb.plugins.LogInterceptor.handleException(LogInterceptor.java:421)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:209)
at
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:136)
at
org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:648)
...
at
org.jboss.invocation.pooled.server.ServerThread.run(ServerThread.java:156)
Caused by: java.lang.NullPointerException
at
org.jboss.ejb.plugins.CallValidationInterceptor.validateArguments(CallValidationInterceptor.java:73)
at
org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:62)
at
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
at
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
at
org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
at
org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
... 16 more
A na serveru s:
2007-05-15 11:49:17,109 ERROR (PooledInvokerThread-192.168.1.65-3) [STDERR]
java.lang.ClassNotFoundException: No ClassLoaders found for: boolean
^^^ Tohle je asi nejzajimavejsi
2007-05-15 11:49:17,109 ERROR (PooledInvokerThread-192.168.1.65-3) [STDERR]
at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:306)
...
2007-05-15 11:49:17,109 ERROR (PooledInvokerThread-192.168.1.65-3) [STDERR]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
2007-05-15 11:49:17,109 ERROR (PooledInvokerThread-192.168.1.65-3) [STDERR]
at
org.jboss.invocation.pooled.interfaces.PooledMarshalledValue.get(PooledMarshalledValue.java:93)
2007-05-15 11:49:17,109 ERROR (PooledInvokerThread-192.168.1.65-3) [STDERR]
at
org.jboss.invocation.pooled.interfaces.PooledMarshalledInvocation.getArguments(PooledMarshalledInvocation.java:165)
2007-05-15 11:49:17,109 ERROR (PooledInvokerThread-192.168.1.65-3) [STDERR]
at org.jboss.ejb.Container.invoke(Container.java:918)
Dle mych experimentu ma JBoss klient problem s volanim metod, ktere maji
alespon jeden argument primitivniho typu(odzkouseno s boolean, int, ...). Pokud
volana metoda vraci primitivni typ, problem uz neni. Pokud upravim hlavicky
metod a misto primitivnich typu argumentu pouziji prislusne wrappery (Boolean,,
Integer, ...), problem zmizi.
Navic se toto chovani vyskytuje jen pri volani pres JBoss klienta. Pokud volam
metody treba z JSP na serveru, problem neni. Ale to muze byt i diky nastaveni
"call-by-reference", kdy se predavane parametry nevaliduji/neserializuji apod.
Trochu jsem popis zjednodusil v tom, ze v mem pripade se volani metod na
vzdalenych business objektech provadi pres jediny genericky fasadni bean majici
jedinou metodou invokeBOMethod(Class boType, String method, Class[] argTypes,
Object[] args), takze ty primitivni typy a hodnoty jsou na vzdaleny session
bean predavany uvnitr poli. IMO by toto nemelo hrat zasadni roli.
Dekuji za pripadna nakopnuti,
Honza
PS: v Jboss JIRA/Google jsem o tomto problemu moc nenasel. Vetsina podobnych
problemu je kolem neprimitivnich trid, coz je vetsinou problem s nastavenim
classpath/rozdilnyma verzema trid na serveru/klientu apod.