簡體   English   中英

如何使用JNDI Weblogic訪問EJB

[英]How to access EJB using JNDI Weblogic

您好我正在嘗試使用JNDI訪問EJB組件。 為此,我制作了一個名為HelloWorld的簡單程序。

遠程接口

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

}

家庭界面

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

Implmentation

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>

客戶查找計划

DataSource dataSource = null;
try {
    String ejburl = "t3://localhost:7101/";
    /**Setup the environment*/
    Hashtable environment = new Hashtable(6);
    /**Turn JNDI on to Weblogic and use oracle db password verification*/
    environment.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    environment.put(Context.SECURITY_PRINCIPAL, "weblogic");
    environment.put(Context.SECURITY_CREDENTIALS, "weblogic1");
    environment.put(Context.PROVIDER_URL, ejburl);

    Context context = new InitialContext(environment);
   method -1 Object obj = context .lookup("HelloWorld10g");
   method -2  Object obj2 = context .lookup("HelloWorld10gModelEJB_jarHelloWorldEJB_EO");
    System.out.println("JNDI Done");
    method -3 context.lookup("HelloWorldEJB#model.HelloWorldEJB");
} catch (Exception ex) {
    ex.printStackTrace();
}

現在我的問題是當客戶端程序使用方法1和方法2查看ejb bean然后返回bean但是程序無法通過方法3查找bean。這個方法出了什么問題。 有人能幫我嗎? 請看下面的圖片,它會告訴你更多關於env的信息。

在此輸入圖像描述

在此輸入圖像描述

在此輸入圖像描述

在此輸入圖像描述

您的bean只有一個Remote Interface ,在這種情況下,不需要完全限定名稱。 這應該工作:

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

如果您有多個Remote Interfaces ,則需要查找包含目標EJB的全局JNDI名稱部分和特定Remote Interface ,用符號#分隔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM