首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityManager JNDI查找

EntityManager JNDI查找
EN

Stack Overflow用户
提问于 2021-01-26 18:37:18
回答 1查看 608关注 0票数 3

在JBoss 6启动时,查找这个持久性单元JPA的正确JNDI字符串是什么?

代码语言:javascript
复制
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:

代码语言:javascript
复制
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");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-28 01:57:03

通过查看JNDI视图,我能够找到名称:

http://localhost:8080/jmx-console

  • Search

  • 转到JNDIView,并在结果树视图上单击list() method.

  • Search的链接按钮,以获得持久性名称。

看起来是这样的:

代码语言:javascript
复制
Global JNDI Namespace

+- persistence.unit:unitName=tpar.ear (class: org.jnp.interfaces.NamingContext)
  |   +- tpar-jboss-ejb3.jar#JPADB (class: org.hibernate.impl.SessionFactoryImpl)

尽管如此,对象实际上是一个SessionFactoryImpl而不是EntityManager。此外,JBoss生成的jndi查找字符串非常可怕:

代码语言:javascript
复制
jndi.lookup("persistence.unit:unitName=tpar.ear/tpar-jboss-ejb3.jar#JPADB");

通过将以下属性添加到persistence.xml中,我可以使用较短的名称查找对象,同时将对象作为EntityManager:

代码语言:javascript
复制
<property name="jboss.entity.manager.jndi.name" value="tpar/entity-manager"/>

注意,使用长JNDI名称仍然返回SessionFactoryImpl对象,以防有人想要SessionFactory。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65907266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档