当前位置: 技术问答>java相关
在app client通过引用方式调用ejb????
来源: 互联网 发布时间:2017-03-17
本文导语: 在客户端程序如果直接用JNDI名称调用ejb可以找到,但是用引用方式就不可以,为什么???我是在application-client.xml里加入了ejb的引用名称的,并且将这个xml文件与客户端需要的ejb接口文件打包成一个client.jar,在客户...
在客户端程序如果直接用JNDI名称调用ejb可以找到,但是用引用方式就不可以,为什么???我是在application-client.xml里加入了ejb的引用名称的,并且将这个xml文件与客户端需要的ejb接口文件打包成一个client.jar,在客户端程序中把client.jar import进来的。
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://192.168.0.50:7001");
InitialContext ic = new InitialContext(ht);
//Object obj = ic.lookup("java:comp/env/ejb/RouteFacade"); 这样会有NamingException
Object obj = ic.lookup("RouteFacade"); //这样写就不会出错
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://192.168.0.50:7001");
InitialContext ic = new InitialContext(ht);
//Object obj = ic.lookup("java:comp/env/ejb/RouteFacade"); 这样会有NamingException
Object obj = ic.lookup("RouteFacade"); //这样写就不会出错
|
http://www.mail-archive.com/jboss-user@lists.sourceforge.net/msg22608.html
java:comp/env/-- is private to each ejb and is defined by the ejb-ref and ejb-local-ref in the bean, what you should do instead is :
in your ejb-jar.xml for the bean that references CompanyUser bean through java:comp/env/ejb/CompanyUser
...
ejb/CompanyUser
...
plus information according to the bean :
ejb-ref-type, local-home, local
...
CompanyUser
...
of course we assume that you two beans are in the same jar deployement.
otherwise you don't specify ejb-link and use jboss.xml instead to make the link to the bean.
java:comp/env/-- is private to each ejb and is defined by the ejb-ref and ejb-local-ref in the bean, what you should do instead is :
in your ejb-jar.xml for the bean that references CompanyUser bean through java:comp/env/ejb/CompanyUser
...
ejb/CompanyUser
...
plus information according to the bean :
ejb-ref-type, local-home, local
...
CompanyUser
...
of course we assume that you two beans are in the same jar deployement.
otherwise you don't specify ejb-link and use jboss.xml instead to make the link to the bean.
|
Object obj = ic.lookup("java:comp/env/ejb/RouteFacade"); //这样会有NamingException
Object obj = ic.lookup("RouteFacade"); //这样写就不会出错
Object obj = ic.lookup("RouteFacade"); //这样写就不会出错
|
thanks first!
不过,对于ejb调用ejb时需要在ejb-jar.xml里面加入引用参考才可以用“java:comp/env/”方式调用这一点我是知道的,
可我的问题是在app client如果也用“java:comp/env/”方式调用ejb应该怎么做呢,我是在application-client.xml里面加入了关于ejb引用的描述的。有了一个appClient.jar文件了,这个jar文件里面包括了客户应用所需要的ejb远程接口类以及客户程序,还有application-client.xml、MANIFEST.MF,MANIFEST.MF里面定义了main class。然后在jbuilder里面建了一个ear,设置了ejb模块(ejb.jar)和app client模块(appClient.jar),编译成功了,可是deploy的时候报这样的错误:
Unable to activate application, app, from source, e:beauser_projectsmydomain.myserveruploadappapp.ear. Reason: Unable to create mbean Name: appClient.jar Type: null Exception: weblogic.management.MBeanCreationException: - with nested exception:
[javax.management.MalformedObjectNameException: type cannot be null]
这是为什么呢?
不过,对于ejb调用ejb时需要在ejb-jar.xml里面加入引用参考才可以用“java:comp/env/”方式调用这一点我是知道的,
可我的问题是在app client如果也用“java:comp/env/”方式调用ejb应该怎么做呢,我是在application-client.xml里面加入了关于ejb引用的描述的。有了一个appClient.jar文件了,这个jar文件里面包括了客户应用所需要的ejb远程接口类以及客户程序,还有application-client.xml、MANIFEST.MF,MANIFEST.MF里面定义了main class。然后在jbuilder里面建了一个ear,设置了ejb模块(ejb.jar)和app client模块(appClient.jar),编译成功了,可是deploy的时候报这样的错误:
Unable to activate application, app, from source, e:beauser_projectsmydomain.myserveruploadappapp.ear. Reason: Unable to create mbean Name: appClient.jar Type: null Exception: weblogic.management.MBeanCreationException: - with nested exception:
[javax.management.MalformedObjectNameException: type cannot be null]
这是为什么呢?