以下是JBoss 6启动时显示的用于查找此持久性单元JPA-DB的正确JNDI字符串:
10:26:09,847 INFO [PersistenceUnitDeployment] Starting persistence unit persistence.unit:unitName=tpar.ear/tpar-jboss-ejb3.jar#JPA-DB
10:26:09,847 INFO [Ejb3Configuration] Processing PersistenceUnitInfo [
name: JPA-DB
...]
10:26:09,847 WARN [Ejb3Configuration] Persistence provider caller does not implement the EJB3 spec correctly.PersistenceUnitInfo.getNewTempClassLoader() is null.
...
...
10:26:10,950 INFO [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
10:26:10,950 INFO [NamingHelper] Creating subcontext: persistence.unit:unitName=tpar.ear
10:26:10,950 INFO [SessionFactoryObjectFactory] Bound factory to JNDI name: persistence.unit:unitName=tpar.ear/tpar-jboss-ejb3.jar#JPA-DB
10:26:10,950 INFO [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
我已经尝试了以下方法和其他各种方法,但我现在不记得了,它们都抛出NameNotFoundException:
entityManager = (EntityManager) jndi.lookup("java:/EntityManagers/JPA-DB");
entityManager = (EntityManager) jndi.lookup("java:comp/EntityManagers/JPA-DB");
entityManager = (EntityManager) jndi.lookup("java:comp/env/JPA-DB");
entityManager = (EntityManager) jndi.lookup("JPA-DB");
1条答案
按热度按时间wbrvyc0a1#
我可以通过查看JNDI树视图找到该名称:
1.转到
http://localhost:8080/jmx-console
1.搜索JNDIView并单击链接
service=JNDIView
1.叫用
list()
方法的按钮。1.在结果树视图中搜索持久性名称。
它看起来像这样:
但是,该对象实际上是一个SessionFactoryImpl而不是一个EntityManager。此外,JBoss生成的jndi查找字符串非常糟糕:
通过将以下属性添加到
persistence.xml
,我可以使用较短的名称进行查找,同时将对象作为EntityManager获取:请注意,使用长JNDI名称仍会返回SessionFactoryImpl对象,以防有人需要SessionFactory。