不只是一个ear文件中可以调用,如果是weblogic,只要在一个application中就可以,可以是展开目录形式的应用。
本地接口没什么,当作一个普通类就可以了,虽然也是按照EJB框架来的,只是没有继承RMI。
本地接口没什么,当作一个普通类就可以了,虽然也是按照EJB框架来的,只是没有继承RMI。
解决方案 »
- 关于Hibernate的级联删除和更新,紧急求救
- struts2.0配置的问题
- HB高手解答下
- 请问能否在.net 中调用java写的rmi函数,谢谢
- struts2 读取指定盘符下的多张图片并显示到页面
- 发送一个消息到一个邮箱,怎么实现
- struts-config.xml大疑问?(散分!!!)
- 有状态的会话BEAN的状态体现在哪一方面?
- !!!!请问,在DAO中,对类的引用问题。
- maven父pom同时定义了dependecymanagement和depencies,子pom又定义了depencies
- eclipse+lomboz+jboss运行EJB出错!!请教高手!!!
- 方法java.net.Socket.getRemoteSocketAddress用的不爽!
本地接口如何使用是ejb 规范规定在哪里使用,还是由J2EE服务器,如weblogic,jboss等决定的.
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我没有测试过,你可以试一下,记得分享一下测试结果:)。
我在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)
试试看在weblogic的applications目录下面建立跟你的ear同样的结构并将war和jar部署其中,还有一个META-INF目录,local interface就可用了
还有一个问题,为什么local interface只能在一个*.ear中使用,是技术上的问题,还是ejb specification中的限制,我在ejb specification中怎么没找到这样的限制。另外是所有支持local interface的J2EE服务器都是只在*.ear中才可以用local interface吗????
并非都在ear中才能使用local interface,比如weblogic就可以在一个展开目录的application中使用