Java 如何使用JNDI Weblogic访问EJB

Java 如何使用JNDI Weblogic访问EJB,java,weblogic,ejb-2.x,Java,Weblogic,Ejb 2.x,您好,我正在尝试使用JNDI访问EJB组件。为此,我制作了一个名为HelloWorld的简单程序 远程接口 public interface HelloWorldEJB extends EJBObject { public String sayHello() throws RemoteException; } 主界面 public interface HelloWorldEJBHome extends EJBHome { HelloWorldEJB create() thro

您好,我正在尝试使用JNDI访问EJB组件。为此,我制作了一个名为HelloWorld的简单程序

远程接口

public interface HelloWorldEJB extends EJBObject {
    public String sayHello() throws RemoteException;

}
主界面

public interface HelloWorldEJBHome extends EJBHome {
    HelloWorldEJB create() throws RemoteException, CreateException;
}
实施

public class HelloWorldEJBBean implements SessionBean {
    private SessionContext _context;

    public void ejbCreate() {
    }

    public void setSessionContext(SessionContext context) throws EJBException {
        _context = context;
    }

    public void ejbRemove() throws EJBException {
    }

    public void ejbActivate() throws EJBException {
    }

    public void ejbPassivate() throws EJBException {
    }

    private Object getEntityByDTO(Object entityDTO) throws FinderException,
                                                           NamingException {
        return null;
    }

    public String sayHello(){
        return "Hello";
     }
}
ejb-jar.xml

<?xml version = '1.0' encoding = 'windows-1252'?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
         version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee">
  <enterprise-beans>
    <session>
      <description>Session Bean ( Stateless )</description>
      <display-name>HelloWorldEJB</display-name>
      <ejb-name>HelloWorldEJB</ejb-name>
      <home>model.HelloWorldEJBHome</home>
      <remote>model.HelloWorldEJB</remote>
      <ejb-class>model.HelloWorldEJBBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
  </enterprise-beans>
  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>HelloWorldEJB</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>
现在我的问题是,当客户机程序使用方法1和方法2查找ejb bean时,然后返回bean,但程序无法使用方法3查找bean。这个方法有什么问题。有人能帮我吗? 请参见下图,这将告诉您更多关于env的信息


您的bean只有一个
远程接口
,在这种情况下,不需要完全限定的名称。这应该起作用:

HelloWorldEJB helloWorldEJB = (HelloWorldEJB) context.lookup("HelloWorldEJB");


如果您有多个
远程接口
,则需要查找一个名称,该名称包含目标EJB的全局
JNDI
名称部分和特定的
远程接口
,由符号
#

分隔,不确定,但默认weblogic端口是7001(不是
t3://localhost:7101/
).我已将其更改为7101.其次,此方法1和2运行良好。唯一的方法是抛出NamingNotFoundException。首先,我的项目中有n个remote,我只是在测试如何访问bean。第二,我尝试了你的解决方案,但给出了错误。“javax.naming.NameNotFoundException:无法解析'HelloWorldEJB'。已解析“”[根异常为javax.naming.NameNotFoundException:无法解析'HelloWorldEJB'。已解析“”];剩余名称'HelloWorldEJB'我已粘贴所有内容,您能为我生成此查找字符串吗?这里的全局JNDI是什么。类似于这个globalJNDI#RemoteInterface的东西
HelloWorldEJB helloWorldEJB = (HelloWorldEJB) context.lookup("HelloWorldEJB");