配置一只耳朵在JBoss的另一只耳朵上调用远程ejb3

时间:2009-06-11 21:58:55

标签: jboss ejb-3.0

我是EJB3的新手,在访问部署为ear文件中的ejb模块的@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的内容,如果这是正确的道路。

如果我将LimaBean部署为jboss中的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>

如果我触摸了汤。在JBoss启动之后,它会部署得很好,所以我假设我需要指定一个依赖,就像上面的文章所说的那样。

但即使在部署之后,我在访问远程LimaBean时遇到错误:

引起:java.lang.IllegalArgumentException:无法将com.soup.LimaBean字段com.soup.Soup.limaBean设置为$ Proxy147     at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)     at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)     at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)     在java.lang.reflect.Field.set(Field.java:657)     在org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:115)     ......还有49个

我尝试过一些事情但是,如果有人能指出我正确的方向,我会很感激。

1 个答案:

答案 0 :(得分:2)

看起来JNDI属性需要设置为好像它是app服务器之外的远程客户端,因为我们设置了耳朵隔离。

    properties.put(Context.PROVIDER_URL, url);
    InitialContext ctx = new InitialContext(properties);

只需指定InitialContext的URL,这应该可以解决问题。