我是 EJB3 的新手,在访问作为 ejb 模块部署在 ear 文件中的 @Remote @Stateless bean 时缺少一些东西。我想从soup.ear 访问lima.ear 中的一个远程bean。
这是我现在正在做的事情(有点缩写):
//deployed under lima.ear
@Remote
@Stateless
public interface LimaBean {
String sayName();
}
我想把 LimaBean 放在汤里:
//deployed in soup.ear
@Stateless
public class Soup implements SoupLocal {
@EJB
private LimaBean limaBean;
public String taste() {
return limaBean.sayName();
}
}
当我启动 JBoss 时,我收到以下错误:
java.lang.RuntimeException:无法解析容器 Soup 的 @EJB 的全局 JNDI 名称:参考类:com.example.LimaBean ejbLink:未被任何 EJB 使用
我很难找出这个 ejbLink 是关于什么的,如果那是正确的路径。
如果我在 jboss 中将 LimaBean 部署为 jar 文件,那么一切正常!
我浏览了一篇文章,其中有一节名为“2.5.3。不同罐子和不同耳朵中的豆子之间的引用”
(http://jonas.ow2.org/doc/howto/jboss2_4-to-jonas3_0/html/x111.html)
SB_BrowseRegions 的 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>
如果我触摸了soup.ear,在JBoss 启动后它会正常部署,所以我假设我需要像上面的文章所说的那样指定一个依赖项。
但即使在它部署之后,我在访问远程 LimaBean 时也会出现错误:
原因:java.lang.IllegalArgumentException:无法在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) 在 sun.reflect.UnsafeFieldAccessorImpl 处将 com.soup.LimaBean 字段 com.soup.Soup.limaBean 设置为 $Proxy147。 throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63) at java.lang.reflect.Field.set(Field.java:657) at org.jboss.injection.JndiFieldInjector.inject (JndiFieldInjector.java:115) ... 49 更多
我已经尝试了一些事情,但是,如果有人能指出我正确的方向,我将不胜感激。