Hi Brian,
Yeah, you're right. My fault. Fortunately, it seems to be fixed.
The most recent run of the compatibility matrix tests -
http://cruisecontrol.jboss.com/cc/artifacts/jboss-4.2-compatibility-matri...
- shows that the tests are passing for 4.0.4, 4.0.5, 4.0.x, which use
jboss-remoting.jar from Remoting 1.4.3.GA, and for 4.2.x. The older
tests seem to have API versioning problems:
> A possible explanation of the classversion 49.0 errors, is that
since
> the org.jboss.remoting libraries do not exist in the client side,
> they are dynamically loaded from the server, and there they are
> compiled using jdk5.
I'm seeing something similar when I run tests-matrix at home - the
older clients seem to be pulling classes from the server, but rather
than complaining about classversion 49.0, they're trying to use newer
classes and getting inconsistent behavior. For example, since
Remoting 2.0.0, org.jboss.remoting.Client.connect() has to be called
before Client.invoke(). Clients from 3.2.8 to 4.0.1 are getting the
error message that gets printed when Client.invoke() is called without
a prior call to Client.connect().
On the other hand, clients from 4.0.2, which has the Remoting
1.2.1.Final jar are breaking because UnifiedInvokerProxy is calling a
method on org.jboss.remoting.InvokerLocator that didn't exist in
1.2.1. So it looks like all of these older clients might need a
specially created Remoting jar that smooths over these inconsistencies.
Hopefully,
this fixes the main testsuite - it doesn't look like it's run
since the fix. When I try to run tests-standard-unit on my laptop
nothing passes - I don't know what I'm doing wrong. But if the problems
in 4.2 proper are fixed, I can try to put together a jboss-remoting.jar
that will work for the older clients.
-Ron
Brian Stansberry wrote:
I'm not 100% sure, but I think the problem is right here:
at
org.jboss.remoting.marshal.serializable.SerializableMarshaller.write(SerializableMarshaller.java:120)
at
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedWrite(MicroSocketClientInvoker.java:964)
at
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:554)
at
org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
The Marshaller being used is SerializableMarshaller rather than its
subclass org.jboss.invocation.unified.marshall.InvocationMarshaller.
The subclass is the one that has the specialized logic to convert the
non-serializable Invocation to a serializable MarshalledInvocation.
Don't know what it is that tells remoting to use InvocationMarshaller.
- Brian
Dimitris Andreadis wrote:
> > 1. I'm confused about the NotSerializableException -
> > org.jboss.invocation.Invocation in trunk/server/src/main really
> *isn't*
> > serializable. ???
>
> We just switched from jboss-remoting 2.2.0.SP2 to 2.2.0.SP4 without
> any other change that could affect the main testsuite. I understand
> the org.jboss.invocation.Invocation class was never Serializable
> because it is not sent over the network, it encapsulates the
> invocation as it goes through the interceptor chain.
>
> Can you try a simple test from the jboss as testsuite (Branch_4_2).
>
> Running any simple test, e.g.
>
> X:\cvs\jboss-public\jboss-4.2\testsuite>build one-test
> -Dtest=org.jboss.test.bank.test.BankStressTestCase
>
> shows on the server.log:
>
> 10:58:11,705 ERROR [ServerThread] Worker thread initialization
> failure java.io.EOFException
> at
>
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:522)
>
> at
> org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:365)
>
> at
> org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:161)
>
>
> and on the client side
>
> 2007-05-10 10:58:11,474 DEBUG [org.jboss.test.JBossTestCase$1]
> deployed package: bank.jar
> 2007-05-10 10:58:11,474 INFO
> [org.jboss.test.bank.test.BankStressTestCase] Remove accounts
> 2007-05-10 10:58:11,655 DEBUG
> [org.jboss.remoting.transport.socket.MicroSocketClientInvoker]
> SocketClientInvoker[187c55c, socket://127.0.0.1:4446] setting
> enableTcpNoDelay to true
> 2007-05-10 10:58:11,655 DEBUG
> [org.jboss.remoting.transport.socket.MicroSocketClientInvoker]
> SocketClientInvoker[187c55c, socket://127.0.0.1:4446] constructed
> 2007-05-10 10:58:11,655 DEBUG
> [org.jboss.remoting.transport.socket.MicroSocketClientInvoker]
> SocketClientInvoker[187c55c, socket://127.0.0.1:4446] setting
> enableTcpNoDelay to true
> 2007-05-10 10:58:11,655 DEBUG
> [org.jboss.remoting.MicroRemoteClientInvoker]
> SocketClientInvoker[187c55c, socket://127.0.0.1:4446] connecting
> 2007-05-10 10:58:11,655 DEBUG
> [org.jboss.remoting.transport.socket.MicroSocketClientInvoker]
> SocketClientInvoker[187c55c, socket://127.0.0.1:4446] added new pool
> ([]) as ServerAddress[127.0.0.1:4446, enableTcpNoDelay timeout 0 ms]
> 2007-05-10 10:58:11,655 DEBUG
> [org.jboss.remoting.MicroRemoteClientInvoker]
> SocketClientInvoker[187c55c, socket://127.0.0.1:4446] connected
> 2007-05-10 10:58:11,695 DEBUG
> [org.jboss.remoting.transport.socket.ClientSocketWrapper] reset
> timeout: 0
> 2007-05-10 10:58:11,705 DEBUG
> [org.jboss.remoting.transport.socket.MicroSocketClientInvoker]
> SocketClientInvoker[187c55c, socket://127.0.0.1:4446] got exception
> java.io.NotSerializableException: org.jboss.invocation.Invocation
> 2007-05-10 10:58:11,705 DEBUG
> [org.jboss.remoting.transport.socket.SocketWrapper] unable to close
> output stream
> 2007-05-10 10:58:11,705 DEBUG
> [org.jboss.remoting.transport.socket.SocketWrapper]
> ClientSocketWrapper[Socket[addr=/127.0.0.1,port=4446,localport=2788].10fe2b9]
> closing
> 2007-05-10 10:58:11,705 ERROR
> [org.jboss.remoting.transport.socket.SocketClientInvoker] Got
> marshalling exception, exiting
> java.io.NotSerializableException: org.jboss.invocation.Invocation
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
>
> at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
>
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
> at
> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
> at
>
org.jboss.remoting.serialization.impl.java.JavaSerializationManager.sendObjectVersion2_2(JavaSerializationManager.java:120)
>
> at
>
org.jboss.remoting.serialization.impl.java.JavaSerializationManager.sendObject(JavaSerializationManager.java:95)
>
> at
>
org.jboss.remoting.marshal.serializable.SerializableMarshaller.write(SerializableMarshaller.java:120)
>
> at
>
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedWrite(MicroSocketClientInvoker.java:964)
>
> at
>
org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:554)
>
> at
> org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
>
> at org.jboss.remoting.Client.invoke(Client.java:1550)
> at org.jboss.remoting.Client.invoke(Client.java:530)
> at
>
org.jboss.invocation.unified.interfaces.UnifiedInvokerProxy.invoke(UnifiedInvokerProxy.java:175)
>
> at
> org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:365)
>
> at
> org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:197)
>
> at
> org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
>
> at
> org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
> at
> org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:184)
> at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
> at $Proxy1.findAll(Unknown Source)
> at
> org.jboss.test.bank.test.BankStressTestCase.setUp(BankStressTestCase.java:462)
>
> at junit.framework.TestCase.runBare(TestCase.java:128)
> at junit.framework.TestResult$1.protect(TestResult.java:106)
> at junit.framework.TestResult.runProtected(TestResult.java:124)
> at junit.framework.TestResult.run(TestResult.java:109)
> at junit.framework.TestCase.run(TestCase.java:120)
> at junit.framework.TestSuite.runTest(TestSuite.java:230)
> at junit.framework.TestSuite.run(TestSuite.java:225)
> at junit.framework.TestSuite.runTest(TestSuite.java:230)
> at junit.framework.TestSuite.run(TestSuite.java:225)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.framework.TestResult.runProtected(TestResult.java:124)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at
>
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:297)
>
> at
>
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:672)
>
> at
>
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:567)
>
>