Error in marshalling functionality with Tomcat6
alexmd Sep 17, 2012 12:20 PMHi,
currently, I upgrade our web application to Errai version 2.0.2. Unfortunately, I ran into a problem I hope someone have a solution or information for.
We use Tomcat6 as servlet container - installed on a Ubuntu 12.04.1 LTS. It's the standard tomcat installation provided by the Linux distribution.
Our web application uses GWT 2.4 and SmartGWT 2.5.
We deployed our web application as WAR archive to the tomcat. If we invoke it the application fails to start. We only get the following error message (written to the tomcat log):
2012-09-17 16:01:58,636 [80-1] WARN ErraiMarshalling - could not locate marshaller class. will attempt dynamic generation. 2012-09-17 16:01:58,653 [80-1] INFO MarshallerGeneratorFactory - generating marshalling class org.jboss.errai.marshalling.server.impl.ServerMarshallingFactoryImpl... 2012-09-17 16:01:59,746 [80-1] INFO MarshallerGeneratorFactory - generated marshalling class in 1092ms. java.lang.RuntimeException: could not write file for debug cache at org.jboss.errai.common.metadata.RebindUtils.writeStringToFile(RebindUtils.java:229) at org.jboss.errai.marshalling.rebind.MarshallerGeneratorFactory.generate(MarshallerGeneratorFactory.java:116) at org.jboss.errai.marshalling.server.util.ServerMarshallUtil.getGeneratedMarshallerFactoryForServer(ServerMarshallUtil.java:108) at org.jboss.errai.marshalling.server.MappingContextSingleton.loadPrecompiledMarshallers(MappingContextSingleton.java:98) at org.jboss.errai.marshalling.server.MappingContextSingleton.<clinit>(MappingContextSingleton.java:78) at org.jboss.errai.bus.server.io.MessageFactory.getParts(MessageFactory.java:109) at org.jboss.errai.bus.server.io.MessageFactory.createCommandMessage(MessageFactory.java:93) at org.jboss.errai.bus.server.servlet.DefaultBlockingServlet.doPost(DefaultBlockingServlet.java:117) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at com.microdiscovery.dbwebapp.dataviewer.server.communication.DBWebAppServlet.service(DBWebAppServlet.java:28) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:722) Caused by: java.io.FileNotFoundException: /var/lib/tomcat6/.errai/ServerMarshallingFactoryImpl.java (No such file or directory) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:212) at org.jboss.errai.common.metadata.RebindUtils.writeStringToFile(RebindUtils.java:224) ... 22 more 2012-09-17 16:01:59,749 [80-1] ERROR ErraiMarshalling - failed to load static marshallers java.lang.RuntimeException: could not write file for debug cache at org.jboss.errai.common.metadata.RebindUtils.writeStringToFile(RebindUtils.java:229) at org.jboss.errai.marshalling.rebind.MarshallerGeneratorFactory.generate(MarshallerGeneratorFactory.java:116) at org.jboss.errai.marshalling.server.util.ServerMarshallUtil.getGeneratedMarshallerFactoryForServer(ServerMarshallUtil.java:108) at org.jboss.errai.marshalling.server.MappingContextSingleton.loadPrecompiledMarshallers(MappingContextSingleton.java:98) at org.jboss.errai.marshalling.server.MappingContextSingleton.<clinit>(MappingContextSingleton.java:78) at org.jboss.errai.bus.server.io.MessageFactory.getParts(MessageFactory.java:109) at org.jboss.errai.bus.server.io.MessageFactory.createCommandMessage(MessageFactory.java:93) at org.jboss.errai.bus.server.servlet.DefaultBlockingServlet.doPost(DefaultBlockingServlet.java:117) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at com.microdiscovery.dbwebapp.dataviewer.server.communication.DBWebAppServlet.service(DBWebAppServlet.java:28) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:722) Caused by: java.io.FileNotFoundException: /var/lib/tomcat6/.errai/ServerMarshallingFactoryImpl.java (No such file or directory) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:212) at org.jboss.errai.common.metadata.RebindUtils.writeStringToFile(RebindUtils.java:224) ... 22 more 2012-09-17 16:01:59,750 [80-1] WARN ErraiMarshalling - failing over to dynamic marshallers ... performance may be affected. java.lang.RuntimeException: Error instantiating org.jboss.errai.marshalling.client.marshallers.SQLDateMarshaller at org.jboss.errai.marshalling.server.MappingContextSingleton$3.loadMarshallers(MappingContextSingleton.java:233) at org.jboss.errai.marshalling.server.MappingContextSingleton$3.<init>(MappingContextSingleton.java:157) at org.jboss.errai.marshalling.server.MappingContextSingleton.loadDynamicMarshallers(MappingContextSingleton.java:152) at org.jboss.errai.marshalling.server.MappingContextSingleton.<clinit>(MappingContextSingleton.java:84) at org.jboss.errai.bus.server.io.MessageFactory.getParts(MessageFactory.java:109) at org.jboss.errai.bus.server.io.MessageFactory.createCommandMessage(MessageFactory.java:93) at org.jboss.errai.bus.server.servlet.DefaultBlockingServlet.doPost(DefaultBlockingServlet.java:117) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at com.microdiscovery.dbwebapp.dataviewer.server.communication.DBWebAppServlet.service(DBWebAppServlet.java:28) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.IllegalStateException: Mapping definition collision for java.sql.Date Already have: MappingDefinition [mappingClass=java.sql.Date, clientMarshallerClass=class org.jboss.errai.marshalling.client.marshallers.SQLDateMarshaller, serverMarshallerClass=null] Attempted to add: MappingDefinition [mappingClass=java.sql.Date, clientMarshallerClass=class org.jboss.errai.marshalling.client.marshallers.SQLDateMarshaller, serverMarshallerClass=null] at org.jboss.errai.marshalling.rebind.DefinitionsFactoryImpl.putDefinitionIfAbsent(DefinitionsFactoryImpl.java:119) at org.jboss.errai.marshalling.rebind.DefinitionsFactoryImpl.addDefinition(DefinitionsFactoryImpl.java:102) at org.jboss.errai.marshalling.server.MappingContextSingleton$3.loadMarshallers(MappingContextSingleton.java:201) ... 21 more
The reason for the problem is that Errai wants to create an .errai directory directly within the CATALINA_BASE directory of tomcat6. In a valid tomcat6 installation a web application does not have write access to this directory. I changed this temporarily for testing purposes - and the web application runs fine. But this is not a useful solution.
My question is: what is the strategy that Errai uses to decide which directory to choose for .errai directory creation? Is there a configuration parameter that I could define to change the directory path?
I searched for an answer to this question in Errai documentation and tried to find information within this forum and using Google - with no results unfortunately.
Thanks in advance for any help.
Alex.