在JBoss中配置一个ear调用另一个ear上的远程ejb3
我是EJB3新手,在访问作为ear文件中的ejb模块部署的@Remote@无状态bean时,我缺少了一些东西。我想从soup.ear访问lima.ear中的远程bean 以下是我现在正在做的事情(略为缩写): 我想把利马班放在汤里:在JBoss中配置一个ear调用另一个ear上的远程ejb3,jboss,ejb-3.0,Jboss,Ejb 3.0,我是EJB3新手,在访问作为ear文件中的ejb模块部署的@Remote@无状态bean时,我缺少了一些东西。我想从soup.ear访问lima.ear中的远程bean 以下是我现在正在做的事情(略为缩写): 我想把利马班放在汤里: //deployed in soup.ear @Stateless public class Soup implements SoupLocal { @EJB private LimaBean limaBean; public Strin
//deployed in soup.ear
@Stateless
public class Soup implements SoupLocal {
@EJB
private LimaBean limaBean;
public String taste() {
return limaBean.sayName();
}
}
启动JBoss时,出现以下错误:
java.lang.RuntimeException:无法解析@EJB for container Soup:reference class:com.example.LimaBean ejbLink:未被任何EJB使用的全局JNDI名称
我很难弄清楚这是怎么回事,如果这是一条正确的道路
如果我在jboss中将LimaBean部署为jar文件,那么一切都很好强>
我读了一篇文章,其中有一个章节叫做“2.5.3.不同罐子和不同耳朵中的豆子之间的引用”
()
SB_浏览器区域的jboss.xml文件示例:
<jboss>
<session>
<ejb-name>SB_BrowseRegions</ejb-name>
<ejb-ref>
<ejb-ref-name>ejb/Region</ejb-ref-name>
<jndi-name>protocol://serverName/directory/RegionHome</jndi-name>
</ejb-ref>
</session>
</jboss>
SB_浏览器区
ejb/区域
protocol://serverName/directory/RegionHome
如果我触摸soup.ear,在JBoss启动之后,它就会很好地部署,所以我假设我需要像上面的文章所说的那样指定一个依赖项
但即使在部署之后,我在访问远程LimaBean时也会出错:
原因:java.lang.IllegalArgumentException:无法将com.soup.LimaBean字段com.soup.soup.LimaBean设置为$Proxy147
在sun.reflect.UnsafeFieldAccessorImpl.throwsetilegalargumentexception(UnsafeFieldAccessorImpl.java:146)中
在sun.reflect.UnsafeFieldAccessorImpl.throwsetilegalargumentexception(UnsafeFieldAccessorImpl.java:150)处
位于sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
位于java.lang.reflect.Field.set(Field.java:657)
位于org.jboss.injection.JndiFieldInjector.injector(JndiFieldInjector.java:115)
... 49多
我已经尝试了一些方法,但是,如果有人能为我指出正确的方向,我将不胜感激。由于我们设置了ear隔离,JNDI属性似乎需要设置为应用服务器之外的远程客户端
properties.put(Context.PROVIDER_URL, url);
InitialContext ctx = new InitialContext(properties);
只需指定InitialContext的URL,就可以了
properties.put(Context.PROVIDER_URL, url);
InitialContext ctx = new InitialContext(properties);