2 Replies Latest reply on May 5, 2006 10:54 AM by andrew.rw.robinson

    Getting access to entity manager from servlet?

    andrew.rw.robinson

      Is it possible to get the entity manager from a servlet? I am using JBoss-Seam CVS and running it on Tomcat under the ejb3 container. I am trying to integrate support with PayPal and have written a servlet to catch the call from paypal. In that method I want to get access to my PayPalTransaction object to persist a new object/record to the database.

      What I tried:

      UserTransaction utx = Transactions.getUserTransaction();
       utx.begin();
       try
       {
       EntityManager entityManager = (EntityManager)
       Naming.getInitialContext().lookup("java:/EntityManagers/entityManager");
      


      I also tried "java:/entityManager" and just "entityManager"

      The lookup is failing.

      Error I got:
      javax.naming.NameNotFoundException: EntityManagers not bound
       at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
       at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
       at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
       at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
       at javax.naming.InitialContext.lookup(InitialContext.java:351)
      


      Persistence.xml:
      <persistence>
       <persistence-unit name="entityManager" transaction-type="RESOURCE_LOCAL">
       <provider>org.hibernate.ejb.HibernatePersistence</provider>
       <jta-data-source>java:/bethanyDatasource</jta-data-source>
       <properties>
       <property name="hibernate.dialect"
       value="org.hibernate.dialect.PostgreSQLDialect" />
       <property name="connection.release_mode">after_statement</property>
       <property name="hibernate.default_schema">public</property>
       <property name="hibernate.transaction.manager_lookup_class"
       value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
       <property name="hibernate.transaction.flush_before_completion" value="true"/>
       <property name="hibernate.show_sql" value="true"/>
       <property name="hibernate.query.substitutions"></property>
       <property name="jboss.entity.manager.factory.jndi.name"
       value="java:/bethanyEntityManagerFactory"/>
       </properties>
       </persistence-unit>
      </persistence>
      


      jboss-beans.xml:
      <?xml version="1.0" encoding="UTF-8"?>
      
      <deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
       xmlns="urn:jboss:bean-deployer">
      
       <bean name="bethanyDatasourceBootstrap"
       class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
       <property name="driverClass">org.postgresql.Driver</property>
       <property name="connectionURL">jdbc:postgresql://localhost/bethany</property>
       <property name="userName">bethany</property>
       <property name="password">xxx</property>
       <property name="jndiName">java:/bethanyDatasource</property>
       <property name="minSize">0</property>
       <property name="maxSize">10</property>
       <property name="blockingTimeout">1000</property>
       <property name="idleTimeout">100000</property>
       <property name="transactionManager"><inject bean="TransactionManager" /></property>
       <property name="cachedConnectionManager"><inject bean="CachedConnectionManager" /></property>
       <property name="initialContextProperties"><inject bean="InitialContextProperties" /></property>
       </bean>
      
       <bean name="bethanyDatasource" class="java.lang.Object">
       <constructor factoryMethod="getDatasource">
       <factory bean="bethanyDatasourceBootstrap" />
       </constructor>
       </bean>
      
      </deployment>


      Is it possible to do this outside of the faces context?

      Thanks,
      Andrew