不只是一个ear文件中可以调用,如果是weblogic,只要在一个application中就可以,可以是展开目录形式的应用。
本地接口没什么,当作一个普通类就可以了,虽然也是按照EJB框架来的,只是没有继承RMI。

解决方案 »

  1.   

    to lzl123(少年) 
    本地接口如何使用是ejb 规范规定在哪里使用,还是由J2EE服务器,如weblogic,jboss等决定的.
      

  2.   

    在EJB spec中提到:
    Session and entity beans may have local clients. A local client is a client that is collocated in the same
    JVM with the session or entity bean that provides the local client view and which may be tightly coupled
    to the bean.
    这里只说在同一个JVM中就可以使用local interface。而在J2EE spec中提到:
    The EJB container is required to support access to local enterprise beans. We
    recommend that the web container also support access to local enterprise beans.
    No support is provided for access to local enterprise beans from the application
    client container or the applet container.
    这里说(同一个应用)中的ejb之间可以是使用local interface,而且“推荐”web container也可以调用local interface,既然是“推荐”而不是“强制”,各个服务器提供商就可能有不同的实现。weblogic是遵循了这个推荐,JBoss我没有测试过,你可以试一下,记得分享一下测试结果:)。
      

  3.   

    to lzl123(少年) 
    我在weblogic8.1上试了一下,将一个*.war和一个*.jar包放到一个*.ear中,jsp可以访问session bean的local interface,但是将*.war和*.jar分别放到不同的*.ear包或将*.war和*.jar单独发布,出现如下错误:Error 500--Internal Server Error 
    javax.naming.LinkException: .  Root exception is javax.naming.NameNotFoundException: While trying to look up /app/ejb/myejb.jar#MSSQL/local-home in /app/webapp/myjsp/31057243.; remaining name '/app/ejb/myejb/jar#MSSQL/local-home'
    at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:869)
    at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:150)
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:338)
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:333)
    at weblogic.jndi.factories.java.ReadOnlyContextWrapper.lookup(ReadOnlyContextWrapper.java:45)
    at weblogic.jndi.internal.AbstractURLContext.lookup(AbstractURLContext.java:124)
    at javax.naming.InitialContext.lookup(InitialContext.java:347)
    at weblogic.jndi.internal.WLNamingManager.getObjectInstance(WLNamingManager.java:96)
    at weblogic.jndi.internal.ServerNamingNode.resolveObject(ServerNamingNode.java:277)
    at weblogic.jndi.internal.BasicNamingNode.resolveObject(BasicNamingNode.java:743)
    at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:191)
    at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
    at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:166)
    at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284)
    at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244)
    at weblogic.jndi.internal.ServerNamingNode_811_WLStub.lookup(Unknown Source)
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:338)
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:333)
    at javax.naming.InitialContext.lookup(InitialContext.java:347)
    at jsp_servlet.__jsp2._jspService(__jsp2.java:147)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
     
      

  4.   

    local interface需要在一个application中才有用,一个application的概念相当于一个展开目录结构的ear。
    试试看在weblogic的applications目录下面建立跟你的ear同样的结构并将war和jar部署其中,还有一个META-INF目录,local interface就可用了
      

  5.   

    to  lzl123(少年)
    还有一个问题,为什么local interface只能在一个*.ear中使用,是技术上的问题,还是ejb specification中的限制,我在ejb specification中怎么没找到这样的限制。另外是所有支持local interface的J2EE服务器都是只在*.ear中才可以用local interface吗????
      

  6.   

    应该是specification中规定的,理论上讲只要在一个JVM中都可以使用local interface,因为它跟普通得interface没什么不同。
    并非都在ear中才能使用local interface,比如weblogic就可以在一个展开目录的application中使用