我将 EJB jar 部署到 OpenEJB 远程模式,但我的客户端无法查找 EJB [EJB 已正确部署],在调试项目后我发现 openejb.client.moduleid 必须具有值。但是什么是 moduleid,我该如何设置这个属性?
问问题
539 次
1 回答
1
openejb.client.moduleid
用于 Java EE App Client 使用。该 ID 指的是 App Client 的 ID(在 META-INF/application-client.xml 中指定),而不是部署的任何特定 EJB 模块的 ID。也就是说,避免使用 Java EE App Clients 并且不要设置openejb.client.moduleid
.
它应该像在部署应用程序时使用打印到日志输出的 JNDI 名称一样简单。
import javax.ejb.Stateless;
@Stateless
public class HelloBean implements Hello {
public String sayHello() {
return "Hello World!!!!";
}
}
然后,当您部署它时,您应该会看到部署器的输出如下:
dblevins@mingus:~/projects$ $OPENEJB_HOME/bin/openejb deploy hello.jar
Application deployed successfully at "hello.jar"
App(id=/home/dblevins/projects/hello.jar)
EjbJar(id=hello.jar, path=/home/dblevins/projects/hello.jar)
Ejb(ejb-name=HelloBean, id=HelloBean)
Jndi(name=HelloBeanRemote)
这在日志中
2011-06-27 16:21:58,187 - INFO - Configuring enterprise application: /home/dblevins/projects/hello.jar
2011-06-27 16:21:58,191 - INFO - Enterprise application "/home/dblevins/projects/hello.jar" loaded.
2011-06-27 16:21:58,191 - INFO - Assembling app: /home/dblevins/projects/hello.jar
2011-06-27 16:21:58,193 - INFO - Jndi(name=HelloBeanRemote) --> Ejb(deployment-id=HelloBean)
2011-06-27 16:21:58,206 - INFO - Created Ejb(deployment-id=HelloBean, ejb-name=HelloBean, container=My Stateless Container)
2011-06-27 16:21:58,206 - INFO - Deployed Application(path=/home/dblevins/projects/hello.jar)
客户端可以使用如下信息查找 bean Jndi(name=HelloBeanRemote)
:
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
public class Client {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
props.put(Context.PROVIDER_URL, "ejbd://127.0.0.1:4201");
Context initialContext = new InitialContext(props);
Hello hello = (Hello) initialContext.lookup("HelloBeanRemote");
System.out.println(hello.sayHello());
}
}
于 2011-06-27T23:32:12.250 回答