java - JNDI 问题

标签 java websphere jndi

我有使用JNDI的代码。代码片段如下:

EntityManager createEM(String JNDI ){

  EntityManager em = null;
   try{
   InitialContext ic = new InitialContext();
   em = (EntityManager) ic.lookup(JNDI);
   return em;
   }
 catch (Exception ex){
   LOG.Error("error in creating em");
   ex.printStackTrace();

}

}

现在我收到错误。控件进入 catch block 。

javax.naming.NameNotFoundException: Name comp/env/persistence not found in context "java:".
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1837)
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1166)
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1095)
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1233)
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:394)
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:214)
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:154)
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr     R  at javax.naming.InitialContext.lookup(Unknown Source)

我有 2 个项目说 A 和 B。现在项目 B 具有上述方法,并且从项目 A 我正在从项目 B 调用方法。persistent.xml 仅存在于项目 A 中。我需要将 persist.xml 放入项目 A 也是如此?我还得到以下内容作为异常的一部分

 javax.naming.NameNotFoundException: Name comp/env/persistence not found in context "java:".

可能是什么原因。我正在使用 websphere。

最佳答案

您对问题的描述有点草率:

persistent.xml is presnt only in project A.Do i need to place persistent.xml in project A too?

我认为您的意思是:persistence.xml 仅存在于项目 B 中。我是否也需要将 persistence.xml 放入项目 A 中?

具体的设置是什么?这两个项目是否部署到同一服务器?他们在不同的服务器上吗?项目 A 是否正在访问项目 B 的远程 session bean?我们在谈论哪些项目? Web 项目、EJB 项目? EAR 项目中同时包含 Web 和 EJB 项目吗?

我认为不支持将实体管理器从一个应用程序发送到另一个应用程序。这个想法是,客户端调用远程 bean,然后该远程 bean 获取本地实体管理器,对其进行一些操作并返回结果。如果 A 是您的客户端,那么 A 当然不需要需要有本地 persistence.xml。

您的问题很可能是您所寻找的实体管理器根本无法以您认为的名称使用。 java:comp/env/persistence 显然不存在。通常实体管理器不会自动出现在 JNDI 中。如果 B 是一个 servlet,您将需要这样的东西:

<persistence-context-ref>
    <persistence-context-ref-name>persistence</persistence-context-ref-name>
    <persistence-unit-name>yourpu</persistence-unit-name>
</persistence-context-ref>

如果 B 是 EJB session bean,则需要如下所示的内容:

@Stateless
@PersistenceUnit(name="persistence", unitName="yourpu")
public class BBean implements BRemoteInterface {
    // some code here...
}

此后,实体管理器将在 java:comp/env/persistence 下可用,但当从该 servlet 或 bean 启动 JNDI 查找时可用。 java:comp/env 是一个相对上下文,对于对其进行查找的每个位置都是不同的。

您至少可以做的就是简单地从 B 打印您的 java:comp/env 上下文,然后查看其中到底有什么。请参阅这个简单的示例如何进行此类打印:http://tripoverit.blogspot.com/2007/03/print-jndi-tree.html

关于java - JNDI 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545593/

相关文章:

java - 使用 JasperReports 从 json 填充报告

java - 解析足球队和结果

java - 访问外部WS时为"WebServiceException: Failed to access the WSDL"和"CertificateException: PKIX path building failed"

windows - Websphere进程被移除后如何处理端口被占用?

tomcat - 如何在 grails 中指定可移植的 jndi 数据源查找

java - Spring启动REST API 404错误

Eclipse 没有导入所有 Axis2 jar,但项目仍在 Tomcat 上运行?

oracle - Tomcat 上的 Grails Oracle - JNDI 配置 - InstanceAlreadyExistsException 等错误

java - @EJB 注入(inject)独立主客户端

java - 需要帮助来理解此复选框代码在 Android 中的工作原理