在JBoss中配置一个ear调用另一个ear上的远程ejb3

在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

我是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 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);