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
 
    