ana_oleski
Returning Observer

SQLException kann nicht deserialisiert werden

Jump to solution

Hallo,

ich habe im Projekt folgendes Problem:

beim Versuch einen Datensatz freizugeben, kommt eine SQLException, die wir aber nicht sehen können, weil der Client die SQLException nicht deserialisieren kann. Stacktrace unten.

Auf dem Client kommt anscheinend eine falsche Version des SQLServer-Drivers. Mit Filesuche habe ich auf dem Server zwei jars gefunden

sqljdbc4.jar in irgendein shared Verzeichnis und sqljdbc-1.1.jar in einem Modul.

Ich vermute, der Server instanziiert  die SQLException aufgrund des ersten jars (version 4) aber der Client kriegt via Webstart sqljdbc-1.1.jar und kann das Objekt nicht deserialisieren. Auf meinem Windows Rechenr sehe ich

unter C:\Users\..\.firstspirit_4.2R4\jars eine Datei eine 3178428f@sqljdbc-1.1.jar  mit Datum heute.

Meine Frage ist: wie wird entscheiden, welche jars zum Client kommt? Kann ich das irgendwie beeinflussen?

Die Exception taucht leider auch nicht in der Server Logdatei auf.  Gibt es eine SQL log4j Kategorie, die ich auf debug setzen kann?

---

FSVersion=4.2.454.47473#2789;JDK=1.6.0_32 32bit Sun Microsystems Inc.;OS=Windows 7 6.1 x86;Date=16.08.2012 13:30:45

de.espirit.firstspirit.common.IOError: Could not read remote objects! Method de.espirit.firstspirit.manager.ContentManager.commit(87, -1969599302, [de.espirit.firstspirit.manager.SessionHandlerIdentifier@90bd{project-id=36820, schema-id=37036, current}, 1, [Release command: de.espirit.or.impl.IdentifierImpl$TemporalIdentifierUC@c178fc80{news_international,FS_ID=65861,FS_VALID_FROM=1345117165242,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=0}, de.espirit.or.impl.ReleaseN2MRelationCommand@c17a62d3de.espirit.or.impl.IdentifierImpl$TemporalIdentifierUC@c178fc80{news_international,FS_ID=65861,FS_VALID_FROM=1345117165242,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=0}], task activity$workflow=Direkt freigeben#workflowActivity=Freigabe anfordern]) - java.io.InvalidClassException: com.microsoft.sqlserver.jdbc.SQLServerException; local class incompatible: stream classdesc serialVersionUID = 961749846592457293, local class serialVersionUID = 4449348116728840636

          at de.espirit.firstspirit.client.io.HttpServerCaller.call(HttpServerCaller.java:389)

          at de.espirit.firstspirit.client.io.HttpServerCaller.call(HttpServerCaller.java:40)

          at de.espirit.firstspirit.client.io.ServerCaller.call(ServerCaller.java:233)

          at de.espirit.firstspirit.client.io.ServerCaller.doManagerCall(ServerCaller.java:395)

          at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)

          at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)

          at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)

          at de.espirit.firstspirit.server.$Proxy32.commit(Unknown Source)

          at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.commit(SessionHandlerImpl.java:113)

          at de.espirit.or.impl.SessionImpl.doCommit(SessionImpl.java:191)

          at de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:521)

          at de.espirit.firstspirit.store.access.contentstore.Content2Impl.release(Content2Impl.java:320)

          at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1197)

          at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1012)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:432)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:213)

          at de.espirit.firstspirit.client.action.WorkflowUtil.startWorkflow(WorkflowUtil.java:52)

          at de.espirit.firstspirit.client.action.WorkflowMenuAction$WFStartAction.actionPerformed(WorkflowMenuAction.java:272)

          at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

          at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

          at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

          at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

          at javax.swing.AbstractButton.doClick(Unknown Source)

          at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)

          at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)

          at java.awt.Component.processMouseEvent(Unknown Source)

          at javax.swing.JComponent.processMouseEvent(Unknown Source)

          at java.awt.Component.processEvent(Unknown Source)

          at java.awt.Container.processEvent(Unknown Source)

          at java.awt.Component.dispatchEventImpl(Unknown Source)

          at java.awt.Container.dispatchEventImpl(Unknown Source)

          at java.awt.Component.dispatchEvent(Unknown Source)

          at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

          at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

          at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

          at java.awt.Container.dispatchEventImpl(Unknown Source)

          at java.awt.Component.dispatchEvent(Unknown Source)

          at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

          at java.awt.EventQueue.access$000(Unknown Source)

          at java.awt.EventQueue$1.run(Unknown Source)

          at java.awt.EventQueue$1.run(Unknown Source)

          at java.security.AccessController.doPrivileged(Native Method)

          at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

          at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

          at java.awt.EventQueue$2.run(Unknown Source)

          at java.awt.EventQueue$2.run(Unknown Source)

          at java.security.AccessController.doPrivileged(Native Method)

          at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

          at java.awt.EventQueue.dispatchEvent(Unknown Source)

          at de.espirit.firstspirit.client.AWTDispatchingEventQueue.defaultDispatchEvent(AWTDispatchingEventQueue.java:130)

          at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:115)

          at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:108)

          at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

          at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

          at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

          at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: java.io.InvalidClassException: com.microsoft.sqlserver.jdbc.SQLServerException; local class incompatible: stream classdesc serialVersionUID = 961749846592457293, local class serialVersionUID = 4449348116728840636

          at java.io.ObjectStreamClass.initNonProxy(Unknown Source)

          at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)

          at java.io.ObjectInputStream.readClassDesc(Unknown Source)

          at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

          at java.io.ObjectInputStream.readObject0(Unknown Source)

          at java.io.ObjectInputStream.defaultReadFields(Unknown Source)

          at java.io.ObjectInputStream.readSerialData(Unknown Source)

          at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

          at java.io.ObjectInputStream.readObject0(Unknown Source)

          at java.io.ObjectInputStream.readObject(Unknown Source)

          at de.espirit.firstspirit.io.IOUtil.readObjects(IOUtil.java:309)

          at de.espirit.firstspirit.client.io.HttpServerCaller.call(HttpServerCaller.java:375)

          ... 57 more

0 Kudos
1 Solution

Accepted Solutions
Peter_Jodeleit
Crownpeak employee

Das ist einer der Gründe, wieso JDBC-Treiber nicht mehr in shared/lib auf dem Server abgelegt werden sollten. Zum Client kommen nur Jars, die aus Modulen stammen.

Da das Problem erst auf dem Client auftritt, kann man diese Kondition auch erst dort loggen. Der Fehler sollte aber auf dem Server im fs-clients.log auftauchen.

Peter

View solution in original post

0 Kudos
4 Replies
Peter_Jodeleit
Crownpeak employee

Das ist einer der Gründe, wieso JDBC-Treiber nicht mehr in shared/lib auf dem Server abgelegt werden sollten. Zum Client kommen nur Jars, die aus Modulen stammen.

Da das Problem erst auf dem Client auftritt, kann man diese Kondition auch erst dort loggen. Der Fehler sollte aber auf dem Server im fs-clients.log auftauchen.

Peter
0 Kudos

Auf dem Client kommt das Problem, dass er die SQL-Exception nicht deserialisieren kann.  Ich würde gerne aber wissen, wie die SQLException aussieht, die der Client nicht deserialisieren kann. Angenommen, die Exception kommt von FS-Code und nicht eirgendein Modul: die pasiert doch auf dem Server, der Client redet nicht direkt mit dem DB-Server.

0 Kudos

Wenn du Glück hast, wird die Exception mit einem Level gelogged, den ihr nicht aktiviert habt (z.B. DEBUG oder TRACE). Also den Log-Level feiner setzen und nochmal probieren. Eventuell nur für "de.espirit.or".

Peter
0 Kudos

Ich habe den JDBC-Treiber im Modul upgedated und es hat geholfen. Der Client konnte den Fehler anzeigen. Danke.

0 Kudos