2009-06-11 77 views
2

我是EJB3的新手,在访问在耳朵文件中部署为ejb模块的@Remote @Stateless bean时缺少一些东西。我想从soup.ear访问lima.ear中的远程bean。配置一只耳朵在JBoss的另一只耳朵上调用远程ejb3

这里是我现在做的(有点略):

//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:无法解析容器的@EJB的全局JNDI名称Soup:引用类:com.example.LimaBean ejbLink:未被任何EJB使用

我很难找出这个ejbLink是关于什么的,如果这是正确的道路。

如果我将LimaBean作为jar文件部署在jboss中,那么一切都很好!

我跑翻过的文章,有一个被称为“在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异常:无法设置com.soup.LimaBean场com.soup.Soup.limaBean到$ Proxy147 在sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) 在sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) 在sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63) at java.lang.reflect.Field.set(Field.java:657) at org.jboss.injection.JndiFieldInjector.in ject(JndiFieldInjector.java:115) ... 49更多

我已经尝试了一些东西,但是,如果任何人都可以指出我在正确的方向对此,我将不胜感激。

回答

2

由于我们设置了耳朵隔离,它看起来像需要将JNDI属性设置为应用程序服务器之外的远程客户端。

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

只需指定InitialContext的URL,那应该可以做到。