[英]How to access SessionFactory of Hibernate using JNDI in WEBLOGIC 9.2 server?
[英]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.