Search the FirstSpirit Knowledge Base
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
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.
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.
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.
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".
Ich habe den JDBC-Treiber im Modul upgedated und es hat geholfen. Der Client konnte den Fehler anzeigen. Danke.