Fer*_*ães 1 jndi java-ee jboss6.x
我在JBoss 6.0 AS上的localhost上部署了一个应用程序.此应用程序有一个名为ExampleEJB的远程EJB bean.现在我正在尝试编写一个使用ExampleEJB的简单客户端应用程序.此客户端应用程序不会部署在任何应用程序服务器上.我们的想法是编写一个简单的Java SE客户端程序.我写了以下尝试执行查找:
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL,"localhost:1099");
env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
InitialContext ic = new InitialContext(env);
Run Code Online (Sandbox Code Playgroud)
在这一点上,我尝试了两种方法.第一种方法是执行直接查找,例如Java EE 6 Tutorial(http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html):
ExampleEJB exampleEJB = (ExampleEJB) ic.lookup("java:global/myApp/ExampleEJB");
Run Code Online (Sandbox Code Playgroud)
第二次尝试是尝试获取JNDI上下文环境,然后从这个环境中获取所需的bean:
Context envContext = (Context)ic.lookup("java:/comp/env");
envContext.lookup(...)
Run Code Online (Sandbox Code Playgroud)
问题是我收到以下异常:"javax.naming.NameNotFoundException:global not bound"和"javax.naming.NameNotFoundException:comp not bound".我无法按要求执行查找.
有人有线索吗?
如果您正在使用java:global/
,那么JNDI名称应如下所示:
java:global/<application>/<module>/<component>
Run Code Online (Sandbox Code Playgroud)
要么
java:global/<ear>/<ejb-jar>/<ejb-name>
Run Code Online (Sandbox Code Playgroud)
其中ear是.ear文件的名称,ejb-jar是EJB .jar文件的名称.
如果您同时拥有本地和远程接口,则可以使用此方案进行区分:
java:global/<ear>/<ejb-jar>/<ejb-name>!<interface>
Run Code Online (Sandbox Code Playgroud)
其中接口包含包和接口名称(例如:a.b.c.ExampleEJBRemoteIfc
).
因此,在您的设置中:如果myApp.ear
包含myEjb.jar
名称为EJB的contains ExampleEJB
,请尝试此JNDI名称:
java:global/myApp/myEjb/ExampleEJB
Run Code Online (Sandbox Code Playgroud)
要么
java:global/myApp/myEjb/ExampleEJB!a.b.c.ExampleEJBRemoteIfc
Run Code Online (Sandbox Code Playgroud)
无论如何,仔细检查JMX控制台中的JNDI名称:
http://localhost:8080/jmx-console/
Run Code Online (Sandbox Code Playgroud)
至于comp/env与global:java:comp/env和java:global之间的关系是什么
归档时间: |
|
查看次数: |
6441 次 |
最近记录: |