[JBoss Messaging] - JMS Exceptions / Mismatch of JBossSerialization version
by rtm333
Dear All,
We are using JBoss 4.0.5.GA with Messaging 1.0.1.SP2. Since upgrading from Messaging 1.0.1.GA to SP2 we are experiencing rather frequent (say, every half an hour) JMS Exceptions.
Below is the log output for the following scenario: Two JBoss instances running as JMS servers (Solaris 10), two clients (on Windows XP), each client connected to one of the server instances. Both server instances are running on the same Solaris box, while both clients share a pc.
The ExceptionListener on the client end catches this exception:
instance_1:
E instance_1 09.01.2007 10:03:05.616 TopicReceiver.onException: Received JMSException for paramTopic: Throwable received from underlying connection
| 1 instance_1 09.01.2007 10:03:05.616 javax.jms.JMSException: Throwable received from underlying connection (Stack Trace following)
| javax.jms.JMSException: Throwable received from underlying connection
| at org.jboss.jms.client.container.ConnectionAspect.handleConnectionException(ConnectionAspect.java:203)
| at org.jboss.remoting.ConnectionValidator$1.run(ConnectionValidator.java:139)
| E instance_1 09.01.2007 10:03:07.116 TopicReceiver.onException: Received JMSException for priceTopic: Throwable received from underlying connection
| 1 instance_1 09.01.2007 10:03:07.116 javax.jms.JMSException: Throwable received from underlying connection (Stack Trace following)
| javax.jms.JMSException: Throwable received from underlying connection
| at org.jboss.jms.client.container.ConnectionAspect.handleConnectionException(ConnectionAspect.java:203)
| at org.jboss.remoting.ConnectionValidator$1.run(ConnectionValidator.java:139)
instance_2:
E instance_2 09.01.2007 10:03:05.663 TopicReceiver.onException: Received JMSException for priceTopic: Throwable received from underlying connection
| 1 instance_2 09.01.2007 10:03:05.663 javax.jms.JMSException: Throwable received from underlying connection (Stack Trace following)
| javax.jms.JMSException: Throwable received from underlying connection
| at org.jboss.jms.client.container.ConnectionAspect.handleConnectionException(ConnectionAspect.java:203)
| at org.jboss.remoting.ConnectionValidator$1.run(ConnectionValidator.java:139)
| E instance_2 09.01.2007 10:03:06.616 TopicReceiver.onException: Received JMSException for paramTopic: Throwable received from underlying connection
| 1 instance_2 09.01.2007 10:03:06.663 javax.jms.JMSException: Throwable received from underlying connection (Stack Trace following)
| javax.jms.JMSException: Throwable received from underlying connection
| at org.jboss.jms.client.container.ConnectionAspect.handleConnectionException(ConnectionAspect.java:203)
| at org.jboss.remoting.ConnectionValidator$1.run(ConnectionValidator.java:139)
Several seconds later the following messages are logged on the server side:
instance_1:
2007-01-09 10:03:11,582 ERROR [org.jboss.remoting.transport.socket.SocketServerInvoker] Failed to accept socket connection
| java.lang.reflect.InvocationTargetException
| at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
| at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
| at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
| at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
| at org.jboss.remoting.transport.socket.ServerThread.createServerSocket(ServerThread.java:216)
| at org.jboss.remoting.transport.socket.ServerThread.wakeup(ServerThread.java:275)
| at org.jboss.remoting.transport.socket.SocketServerInvoker.processInvocation(SocketServerInvoker.java:604)
| at org.jboss.remoting.transport.socket.SocketServerInvoker.run(SocketServerInvoker.java:515)
| at java.lang.Thread.run(Thread.java:595)
| Caused by: java.net.SocketException: Connection reset
| at java.net.SocketInputStream.read(SocketInputStream.java:168)
| at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
| at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
| at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
| at java.io.FilterInputStream.read(FilterInputStream.java:90)
| at org.jboss.serial.io.JBossObjectInputStream.checkSignature(JBossObjectInputStream.java:110)
| at org.jboss.serial.io.JBossObjectInputStream.<init>(JBossObjectInputStream.java:94)
| at org.jboss.remoting.serialization.impl.jboss.JBossSerializationManager.createInput(JBossSerializationManager.java:59)
| at org.jboss.jms.server.remoting.ServerSocketWrapper.createInputStream(ServerSocketWrapper.java:110)
| at org.jboss.jms.client.remoting.ClientSocketWrapper.createStreams(ClientSocketWrapper.java:116)
| at org.jboss.jms.client.remoting.ClientSocketWrapper.<init>(ClientSocketWrapper.java:67)
| at org.jboss.jms.server.remoting.ServerSocketWrapper.<init>(ServerSocketWrapper.java:64)
| ... 9 more
instance_2:
2007-01-09 10:03:28,357 ERROR [org.jboss.remoting.transport.socket.SocketServerInvoker] Failed to accept socket connection
| java.lang.reflect.InvocationTargetException
| at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)
| at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
| at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
| at org.jboss.remoting.transport.socket.ServerThread.createServerSocket(ServerThread.java:216)
| at org.jboss.remoting.transport.socket.ServerThread.wakeup(ServerThread.java:275)
| at org.jboss.remoting.transport.socket.SocketServerInvoker.processInvocation(SocketServerInvoker.java:604)
| at org.jboss.remoting.transport.socket.SocketServerInvoker.run(SocketServerInvoker.java:515)
| at java.lang.Thread.run(Thread.java:595)
| Caused by: java.net.SocketException: Connection reset
| at java.net.SocketInputStream.read(SocketInputStream.java:168)
| at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
| at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
| at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
| at java.io.FilterInputStream.read(FilterInputStream.java:90)
| at org.jboss.serial.io.JBossObjectInputStream.checkSignature(JBossObjectInputStream.java:110)
| at org.jboss.serial.io.JBossObjectInputStream.<init>(JBossObjectInputStream.java:94)
| at org.jboss.remoting.serialization.impl.jboss.JBossSerializationManager.createInput(JBossSerializationManager.java:59)
| at org.jboss.jms.server.remoting.ServerSocketWrapper.createInputStream(ServerSocketWrapper.java:110)
| at org.jboss.jms.client.remoting.ClientSocketWrapper.createStreams(ClientSocketWrapper.java:116)
| at org.jboss.jms.client.remoting.ClientSocketWrapper.<init>(ClientSocketWrapper.java:67)
| at org.jboss.jms.server.remoting.ServerSocketWrapper.<init>(ServerSocketWrapper.java:64)
| ... 8 more
| 2007-01-09 10:03:58,939 ERROR [org.jboss.remoting.transport.socket.SocketServerInvoker] Failed to accept socket connection
| java.lang.reflect.InvocationTargetException
| at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)
| at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
| at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
| at org.jboss.remoting.transport.socket.ServerThread.createServerSocket(ServerThread.java:216)
| at org.jboss.remoting.transport.socket.ServerThread.wakeup(ServerThread.java:275)
| at org.jboss.remoting.transport.socket.SocketServerInvoker.processInvocation(SocketServerInvoker.java:604)
| at org.jboss.remoting.transport.socket.SocketServerInvoker.run(SocketServerInvoker.java:515)
| at java.lang.Thread.run(Thread.java:595)
| Caused by: java.io.IOException: Mismatch version of JBossSerialization signature
| at org.jboss.serial.io.JBossObjectInputStream.checkSignature(JBossObjectInputStream.java:113)
| at org.jboss.serial.io.JBossObjectInputStream.<init>(JBossObjectInputStream.java:94)
| at org.jboss.remoting.serialization.impl.jboss.JBossSerializationManager.createInput(JBossSerializationManager.java:59)
| at org.jboss.jms.server.remoting.ServerSocketWrapper.createInputStream(ServerSocketWrapper.java:110)
| at org.jboss.jms.client.remoting.ClientSocketWrapper.createStreams(ClientSocketWrapper.java:116)
| at org.jboss.jms.client.remoting.ClientSocketWrapper.<init>(ClientSocketWrapper.java:67)
| at org.jboss.jms.server.remoting.ServerSocketWrapper.<init>(ServerSocketWrapper.java:64)
| ... 8 more
The really strange things are, that
not all instances are affected every time
| not all clients are affected every time
| not all JMS connections on the same client are affected every time
| the version mismatch is not reported every time
| depite the version mismatch (and the exceptions) JMS messages are (continued to be) received without obvious problems
|
|
| The behaviour seems similar to what has been reported in
|
| http://www.jboss.org/index.html?module=bb&op=viewtopic&t=98027
|
| Any help welcome.
|
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3999369#3999369
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3999369
19 years, 3 months
[EJB 3.0] - WrongClassException with inheritance
by hamtho2
Hi,
I have a problem with an inheritance-model and I´m not sure, if I´m trying to do something, that´s not possible this way. From the object-oriented point of view and the database-oriented point of view this should be possible, but it seems, as if ejb3 needs some more information.
The object inheritance looks like this:
| AbstractBalance
| A
| |
| |
| +---------------------+-------------------------+
| | |
| BalanceA BalanceB
|
an it should be realized through a InheritanceType.JOINED with the following database-tables all referencing to the same id:
CREATE TABLE balance
| (
| id INTEGER NOT NULL,
| code_currency VARCHAR(3) NOT NULL
| );
|
| CREATE TABLE balance_a
| (
| id INTEGER NOT NULL,
| credit NUMERIC(10, 2) NOT NULL
| );
|
| ALTER TABLE balance_a ADD CONSTRAINT pk_balance_a
| PRIMARY KEY (id);
|
| ALTER TABLE balance_a ADD CONSTRAINT fk__balance_a
| FOREIGN KEY (id) REFERENCES balance (id) ON DELETE NO ACTION;
|
| CREATE TABLE balance_b
| (
| id INTEGER NOT NULL,
| income NUMERIC(10, 2) NOT NULL
| );
|
| ALTER TABLE balance_b ADD CONSTRAINT fk__balance_b
| FOREIGN KEY (id) REFERENCES balance (id) ON DELETE NO ACTION;
|
and these annotations:
| @Entity
| @Table(name = "balance")
| @Inheritance(strategy=InheritanceType.JOINED)
| public abstract class Balance implements Serializable {
|
| @Id
| @Column(name = "id", nullable = false)
| private Integer id;
|
| ....
|
| @Entity
| @Table(name = "balance_a")
| public class BalanceA extends Balance implements Serializable {
|
| ....
|
| @Entity
| @Table(name = "balance_b")
| public class BalanceB extends Balance implements Serializable {
|
| ....
|
The reason for that is, that I want to define values in the balance-table, that are necessary and identical for both of the subclasses. Unfortunately I get a WrongClassException when I try to load these classes from a referenced class and have the same id´s in every table. If I remove the referencing id in balance_b, everything works fine, although BalanceB is not reference.
10:03:30,617 INFO [DefaultLoadEventListener] Error performing load command
| org.hibernate.WrongClassException: Object with id: 2 was not of the specified subclass: entity.BalanceB (loaded object was of wrong class class entity.BalanceA)
| at org.hibernate.loader.Loader.instanceAlreadyLoaded(Loader.java:1234)
| at org.hibernate.loader.Loader.getRow(Loader.java:1186)
| at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
| at org.hibernate.loader.Loader.doQuery(Loader.java:689)
| at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
| at org.hibernate.loader.Loader.loadEntity(Loader.java:1784)
| at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
| at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
| at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2977)
| at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:393)
| at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:374)
| at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:137)
| at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:193)
| at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:101)
| at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
| at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
| at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
| at org.hibernate.type.EntityType.resolve(EntityType.java:303)
| at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
| at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
|
Did I miss anything in the annotation or is it not possible to do it that way?
Thank you very much for your help
Thomas
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3999368#3999368
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3999368
19 years, 3 months