after session timeout throw javax.naming.NamingException: Failed to get context with name comp
spring.liao Oct 3, 2011 2:15 AMHi,
I am learning Seam 3 by writing some code. The code seems to work fine.
But after the web session time out(30 mins) will see error in jboss 7 log console.
The error seems about Seam Persistence module and datasource jndi name.
And It is strange that now the jboss 7 only support java:XXX or java:jboss/XXX jndi name.
But the log show it want to lookup comp
, really confued me.
I'm not sure this is my fault or else. Could someone help me ?
used stuff and other info:
Seam 3, RichFaces 4, JBoss 7, Eclipse Indigo, JBoss Tools 3.3 M3, Windows XP, Mysql 5
//pom.xml <properties> <seam.version>3.0.0.Final</seam.version> <richfaces.version>4.0.0.Final</richfaces.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.seam</groupId> <artifactId>seam-bom</artifactId> <version>${seam.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.richfaces</groupId> <artifactId>richfaces-bom</artifactId> <version>${richfaces.version}</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.seam.solder</groupId> <artifactId>seam-solder-api</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.solder</groupId> <artifactId>seam-solder-impl</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.jboss.seam.persistence</groupId> <artifactId>seam-persistence-api</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.persistence</groupId> <artifactId>seam-persistence-impl</artifactId> <exclusions> <exclusion> <artifactId>seam-solder</artifactId> <groupId>org.jboss.seam.solder</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.richfaces.ui</groupId> <artifactId>richfaces-components-api</artifactId> </dependency> <dependency> <groupId>org.richfaces.ui</groupId> <artifactId>richfaces-components-ui</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.richfaces.core</groupId> <artifactId>richfaces-core-api</artifactId> </dependency> <dependency> <groupId>org.richfaces.core</groupId> <artifactId>richfaces-core-impl</artifactId> <scope>runtime</scope> </dependency> </dependencies> //standalone.xml: <xa-datasource jndi-name="java:jboss/billing2xa" pool-name="billing2xa_Pool" enabled="true" use-java-context="true" use-ccm="true"> <xa-datasource-property name="DatabaseName">billing2</xa-datasource-property> <xa-datasource-property name="User">root</xa-datasource-property> <xa-datasource-property name="ServerName">localhost</xa-datasource-property> <xa-datasource-property name="PortNumber">6666</xa-datasource-property> <xa-datasource-property name="Password">********</xa-datasource-property> <driver>mysql</driver> <security> <user-name>root</user-name> <password>********</password> </security> </xa-datasource> //persistence.xml <jta-data-source>java:jboss/billing2xa</jta-data-source> //Seam Managed Persistence Context: @ExtensionManaged @Produces @PersistenceUnit(unitName = "billing") @ConversationScoped EntityManagerFactory emf; //xhtml: <h:form> <h:panelGrid columns="2"> <rich:extendedDataTable value="#{ratePlanBean.ratePlans}" selectionMode="single" var="ratePlan" selection="#{ratePlanBean.activeRatePlanIdx}"> <rich:column> <f:facet name="header"><h:outputText value="Id" /></f:facet> <h:outputText value="#{ratePlan.id}" /> </rich:column> <rich:column> <f:facet name="header"><h:outputText value="Name" /></f:facet> <h:outputText value="#{ratePlan.name}" /> </rich:column> <a4j:ajax event="selectionchange" listener="#{ratePlanBean.refreshSvcs}" execute="@form" render="svc" /> </rich:extendedDataTable> <h:selectManyCheckbox id="svc" value="#{ratePlanBean.checkedSvcs}" layout="pageDirection"> <f:selectItems value="#{ratePlanBean.svcs}" var="svc" itemLabel="#{svc.id} #{svc.name}" itemValue="#{svc.id}" /> </h:selectManyCheckbox> </h:panelGrid> <h:commandButton action="#{ratePlanBean.submit}" value="Submit" /> <h:commandButton action="#{ratePlanBean.startConversation}" value="Start Conversation" /> <h:commandButton action="#{ratePlanBean.endConversation}" value="End Conversation" /> </h:form> //CDI Bean: @Named @ConversationScoped public class RatePlanBean implements Serializable { @Inject private Conversation conversation; @Inject Logger log; @Inject RatePlanRepository ratePlanRepository; @Inject SvcRepository svcRepository; @Inject private List<RatePlan> ratePlans; @Inject private Collection<Svc> svcs; private RatePlan activeRatePlan; private Collection<Object> activeRatePlanIdx; private Collection<Object> checkedSvcs; public RatePlanBean() { System.out.println("invoking RatePlanBean: conversation=" + conversation); } @PostConstruct public void init() { log.info("invoking init: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); } @PreDestroy public void destroy() { log.info("invoking destory: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); } @Produces @ConversationScoped public List<RatePlan> findRatePlans() { log.info("invoking findRatePlans: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); return ratePlanRepository.findAll(); } @Produces @ConversationScoped public Collection<Svc> findSvcs() { log.info("invoking findSvcs: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); return svcRepository.findZonedSvc(); } public List<RatePlan> getRatePlans() { log.info("invoking getRatePlans: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); return ratePlans; } public void setRatePlans(List<RatePlan> ratePlans) { log.info("invoking setRatePlans: " + conversation.getId() + " - " + conversation.getTimeout()); this.ratePlans = ratePlans; log.info("------------------------------------------"); } public Collection<Svc> getSvcs() { log.info("invoking getSvcs: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); return svcs; } public void setSvcs(Collection<Svc> svcs) { log.info("invoking setSvcs: " + conversation.getId() + " - " + conversation.getTimeout()); this.svcs = svcs; log.info("------------------------------------------"); } public Collection<Object> getActiveRatePlanIdx() { log.info("invoking getActiveRatePlanIdx: " + conversation.getId() + " - " + conversation.getTimeout()); if (activeRatePlanIdx != null) { for (Object o : activeRatePlanIdx) { log.info(o.getClass().getCanonicalName() + " : " + o); } } log.info("------------------------------------------"); return activeRatePlanIdx; } public void setActiveRatePlanIdx(Collection<Object> activeRatePlanIdx) { log.info("invoking setActiveRatePlanIdx: " + conversation.getId() + " - " + conversation.getTimeout()); this.activeRatePlanIdx = activeRatePlanIdx; if (activeRatePlanIdx != null) { for (Object o : activeRatePlanIdx) { log.info(o.getClass().getCanonicalName() + " : " + o); } } log.info("------------------------------------------"); } public void refreshSvcs() { log.info("invoking refreshSvcs: " + conversation.getId() + " - " + conversation.getTimeout()); if (activeRatePlanIdx != null) { for (Object o : activeRatePlanIdx) { log.info(o.getClass().getCanonicalName() + " : " + o); } } activeRatePlan = ratePlans.get((Integer)activeRatePlanIdx.iterator().next()); checkedSvcs.clear(); for (SvcCode svcCode : activeRatePlan.getPlanSvcs().keySet()) { checkedSvcs.add(svcCode.toString()); } log.info("current selected rate plan : " + activeRatePlan.getId() + " " + activeRatePlan.getName()); log.info("------------------------------------------"); } public Collection<Object> getCheckedSvcs() { log.info("invoking getCheckedSvcs: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); return checkedSvcs; } public void submit() { log.info("invoking submit: " + conversation.getId() + " - " + conversation.getTimeout()); if (checkedSvcs != null) { for (Object o : checkedSvcs) { log.info(o.getClass().getCanonicalName() + " : " + o); } } log.info("------------------------------------------"); } public void startConversation() { log.info("invoking startConversation start: " + conversation.getId() + " - " + conversation.getTimeout()); conversation.begin(); conversation.setTimeout(60000); log.info("invoking startConversation end: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); } public void endConversation() { log.info("invoking endConversation start: " + conversation.getId() + " - " + conversation.getTimeout()); conversation.end(); log.info("invoking endConversation end: " + conversation.getId() + " - " + conversation.getTimeout()); log.info("------------------------------------------"); } } //error log: //note the first line log is the last log before session time out //and the session time out after 30 mins(from 11:50:40,062 to 12:21:11) 11:50:40,062 INFO [com.spring.billing.pricing.RatePlanBean] (http--127.0.0.1-8080-2) ------------------------------------------ 12:21:11,500 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/billing3]] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Session event listener threw exception: java.lang.RuntimeException: javax.naming.NamingException: Failed to get context with name comp at org.jboss.seam.transaction.DefaultSeamTransaction.getSeamTransaction(DefaultSeamTransaction.java:153) [seam-persistence-impl-3.0.0.Final.jar:] at org.jboss.seam.transaction.DefaultSeamTransaction.isActive(DefaultSeamTransaction.java:57) [seam-persistence-impl-3.0.0.Final.jar:] at org.jboss.seam.persistence.ManagedPersistenceContextProxyHandler.joinTransaction(ManagedPersistenceContextProxyHandler.java:126) [seam-persistence-impl-3.0.0.Final.jar:] at org.jboss.seam.persistence.ManagedPersistenceContextProxyHandler.invoke(ManagedPersistenceContextProxyHandler.java:114) [seam-persistence-impl-3.0.0.Final.jar:] at $Proxy62.toString(Unknown Source) at java.lang.String.valueOf(Unknown Source) [:1.6.0_26] at java.lang.StringBuilder.append(Unknown Source) [:1.6.0_26] at org.jboss.weld.context.SerializableContextualInstanceImpl.toString(SerializableContextualInstanceImpl.java:67) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at java.lang.String.valueOf(Unknown Source) [:1.6.0_26] at java.lang.StringBuilder.append(Unknown Source) [:1.6.0_26] at org.jboss.weld.context.beanstore.AttributeBeanStore.attach(AttributeBeanStore.java:120) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.context.AbstractConversationContext.destroyConversation(AbstractConversationContext.java:363) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.context.AbstractConversationContext.destroy(AbstractConversationContext.java:345) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.context.http.HttpConversationContextImpl.destroy(HttpConversationContextImpl.java:12) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.context.http.HttpSessionContextImpl.destroy(HttpSessionContextImpl.java:78) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.servlet.WeldListener.sessionDestroyed(WeldListener.java:97) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.apache.catalina.session.StandardSession.expire(StandardSession.java:693) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:588) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:390) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:375) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1316) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at java.lang.Thread.run(Unknown Source) [:1.6.0_26] Caused by: javax.naming.NamingException: Failed to get context with name comp at org.jboss.as.naming.context.NamespaceObjectFactory.getObjectInstance(NamespaceObjectFactory.java:71) at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source) [:1.6.0_26] at javax.naming.spi.NamingManager.getContext(Unknown Source) [:1.6.0_26] at javax.naming.spi.ContinuationContext.getTargetContext(Unknown Source) [:1.6.0_26] at javax.naming.spi.NamingManager.getContinuationContext(Unknown Source) [:1.6.0_26] at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:175) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207) at javax.naming.InitialContext.lookup(Unknown Source) [:1.6.0_26] at org.jboss.seam.transaction.DefaultSeamTransaction.getUserTransaction(DefaultSeamTransaction.java:177) [seam-persistence-impl-3.0.0.Final.jar:] at org.jboss.seam.transaction.DefaultSeamTransaction.createUTTransaction(DefaultSeamTransaction.java:169) [seam-persistence-impl-3.0.0.Final.jar:] at org.jboss.seam.transaction.DefaultSeamTransaction.getSeamTransaction(DefaultSeamTransaction.java:134) [seam-persistence-impl-3.0.0.Final.jar:] ... 25 more