2014-07-10 231 views
0

我尝试在jboss7服务器上部署jboss5 bean项目包。其他开发人员已经对代码在jboss7上工作做了一些改变,比如将jboss-deployment-structure.xml放入项目中。EJB 3.1问题

我创建了两个bean,一个在项目A(BeanA)中,另一个在项目B(BeanB)中。 BeanA不得不查找BeanB。我总是得到“没有与类型的接口 'de.foo.soa.foobar.al.BeanB' 发现EJB绑定de.foo.soa.foobar.ba.ProjectB/BeanB

豆B:

import javax.ejb.Stateless; 
    import javax.ejb.LocalBean; 

    @Stateless 
    @LocalBean 
    public class NumSrvLocalBean { 

     public String testNumSrv() { 
      return "numsrv works"; 
     } 
    } 

bean中的作用:

@EJB private NumSrvLocalBean numSrvLocalBean; 
private String numSrvLocalBean_path = "java:module/NumSrvLocalBean!de.foo.soa.foobar.al.NumSrvLocalBean"; 
ctx = new InitialContext(); 
numSrvLocalBean = (NumSrvLocalBean) ctx.lookup(numSrvLocalBean_path); 

我还添加合适的依赖性到JBoss部署-structure.xml:

<module name="deployment.ProjectB.jar" export="true"/> 

所以evertything对我的理解很好,但我总是得到这个例外。我创建了自己的项目,让我们称它为项目X.在那里我可以查找任何其他项目的Bean(大约15)。我不能在项目A中注入项目A以外的任何bean。但是我可以在项目中注入bean。所以必须有东西阻塞项目中的bean。

我有在项目中的此文件:

  • 的jboss.xml
  • JBoss的部署,structure.xml
  • MANIFEST.MF(标准,未填写)
  • 持久性。 xml
  • seam.properties
  • ProjectA.properties(包含一个wsdlUrl,因为此项目也被配置为XML-RPC项目)

我期待了四个你的想法,

问候。

+0

我不确定在这里,但AFAIK'java:module'意味着在_current_模块中查找,这就是为什么您可以从BeanA查找BeanC。您需要将模块名称添加到查找路径。查看管理控制台(默认情况下为端口9990)并检查绑定的JNDI路径。 – Thomas

+0

你是对的,但我也用'global:..'来测试它。 那就是结果: 15:32:38,953错误[stderr](MSC服务线程1-5)javax.naming.NameNotFoundException:ProjectA/ProjectA!de.foo.soa.foobar.ba.BeanA - service jboss.naming .context.java.global.ProjectA。“BeanA!de.foo.soa.foobar.ba.BeanA” 15:32:38,955 ERROR [stderr](MSC service thread 1-5)\t at org.jboss.as .naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97) (和更多行)。 – JeromeC

+0

纠正我,如果我错了,但我不会看到管理控制台中的任何东西,因为没有任何部署错误的原因。 – JeromeC

回答

0

我使用EJB(mappedName =“java:global/....”)解决了这个问题。 我已经尝试过EJB(mappedName = className.JNDI_NAME),但这没有奏效。我们在JBoss 5中使用了接口,在这里我们定义了JNDI名称,如

@Local 
public interface ClassNameLocal extends ClassNameInterface { 

    /** Name im JNDI (Java Naming and Directory Interface) */ 
    public final static String JNDI_NAME = "foo/bar/and/so/on/ClassName/local"; 

} 

这似乎不工作了。我需要使用完整的路径。