Just added the terracotta persistence type to my weblogic.xml session descriptor in my small test web app. The web app is a BEA Pageflow web app created with BEA WebLogic Workshop.
I get the following error in my server log file when starting the page flow (before the begin action is reached):
####<03.aug.2006 kl 23.36 CEST> <Error> <HTTP> <Server1> <cgServer> <ExecuteThread: '14' for queue: 'default'> <<WLS Kernel>> <> <BEA-101020> <[ServletContext(id=14631366,name=terracottaWeb,context-path=/terracottaWeb)] Servlet failed with Exception
java.lang.Throwable:
************************************************************************************************
Attempt to share an instance of a non-portable class referenced by a portable class. This
unshareable class is a subclass of a JVM- or host machine-specific resource. Please either
modify the class hierarchy or ensure that instances of this class don't enter the shared object
graph.
Referring class : global.Global
Referring field : com.bea.wlw.netui.pageflow.FlowController._transientActionServlet
Thread : ExecuteThread: '14' for queue: 'default'
JVM ID : VM(0)
Unshareable superclass names: javax.servlet.GenericServlet
************************************************************************************************
at com.tc.object.ClientObjectManagerImpl.throwNonPortableException(ClientObjectManagerImpl.java:541)
at com.tc.object.ClientObjectManagerImpl.checkPortabilityOfTraversedRefernce(ClientObjectManagerImpl.java:483)
at com.tc.object.ClientObjectManagerImpl.access$500(ClientObjectManagerImpl.java:61)
at com.tc.object.ClientObjectManagerImpl$NewObjectTraverseTest.checkPortability(ClientObjectManagerImpl.java:734)
at com.tc.object.Traverser.addReferencedObjects(Traverser.java:44)
at com.tc.object.Traverser.traverse(Traverser.java:70)
at com.tc.object.ClientObjectManagerImpl.addToManagedFromRoot(ClientObjectManagerImpl.java:708)
at com.tc.object.ClientObjectManagerImpl.create(ClientObjectManagerImpl.java:253)
at com.tc.object.ClientObjectManagerImpl.lookupOrCreateIfNecesary(ClientObjectManagerImpl.java:306)
at com.tc.object.ClientObjectManagerImpl.lookupOrCreate(ClientObjectManagerImpl.java:293)
at com.tc.object.tx.ClientTransactionManagerImpl.logicalInvoke(ClientTransactionManagerImpl.java:551)
at com.tc.object.TCObjectLogical.logicalInvoke(TCObjectLogical.java:19)
at com.tc.object.bytecode.ManagerImpl.logicalInvoke(ManagerImpl.java:181)
at com.tc.object.bytecode.ManagerUtil.logicalInvoke(ManagerUtil.java:92)
at java.util.HashMap.put(HashMap.java)
at weblogic.servlet.internal.session.TerracottaSessionData.setAttribute(TerracottaSessionData.java:55)
at com.bea.wlw.netui.pageflow.PageFlowUtils.setGlobalApp(PageFlowUtils.java:602)
at com.bea.wlw.netui.pageflow.FlowControllerFactory.getGlobalApp(FlowControllerFactory.java:483)
at com.bea.wlw.netui.pageflow.FlowControllerFactory.getGlobalApp(FlowControllerFactory.java:202)
at com.bea.wlw.netui.pageflow.PageFlowUtils.ensureGlobalApp(PageFlowUtils.java:542)
at com.bea.wlw.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:514)
at com.bea.wlw.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:527)
at com.bea.wlw.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:152)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.__TC_run(WebAppServletContext.java:7051)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.__TC_invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
>
Is there anything I can do to avoid this by adding more configuration to the terracotta config file? I am currently running only with the default config file without any modifications.
This error can be avoided by configuring Terracotta DSO / Terracotta Sessions so that the object referenced by the field is not shared. To do that modify the configuration file and specify com.bea.wlw.netui.pageflow.FlowController._transientActionServlet in the <application><dso><transient-fields><field-name> tag.
You can find more details about this tag in the DSO product guide.