Java 如何使用JNDI Weblogic访问EJB
您好,我正在尝试使用JNDI访问EJB组件。为此,我制作了一个名为HelloWorld的简单程序 远程接口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
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");