我是Java EJB 3.0的新手。可以从桌面应用程序客户端调用部署在JBoss上的(会话)bean吗?
提前致谢。
答案 0 :(得分:3)
是的,你可以。这里有一些细节(引用EJB2,但对于远程客户端,它与EJB3相同):http://www.theserverside.com/discussions/thread.tss?thread_id=9197
意译:
Hashtable env = new Hashtable();
env.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
env.put("java.naming.provider.url", "jnp://localhost:1099");
env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
Context ctx = new InitialContext(env);
// name is whatever JNDI name you gave it
Object o = ctx.lookup("home name");
EJBHome ejbHome = (EJBHome) PortableRemoteObject.narrow(o,EJBHome.class);
// This is userID should be the one passed.
EJB ejb = ejbHome.create(..);
答案 1 :(得分:1)
是
public static void main(String args[]) throws Exception {
InitialContext ctx = new InitialContext();
YourService yourService = (YourService) ctx.lookup("com.example.session.YourService");
String time = yourService.getTime();
System.out.println("Time is: " + time);
}
对于客户端配置,您必须提供内容为
的jndi.properties文件java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
如果您正在寻找JBoss上的工作示例,请尝试下载Enterprise JavaBeans 3.0, Fifth Edition
的源代码答案 2 :(得分:1)
假设您有以下远程接口:
@Remote
public interface HelloBeanRemote {
public String sayHello();
}
实现它的会话bean:
@Stateless
public class HelloBean implements HelloBeanRemote {
...
}
并且这个EJB在JBoss上正确打包和部署。
在客户端,创建一个包含以下内容的jndi.properties
并将其放在类路径中:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
然后使用以下代码调用EJB:
Context context;
try {
context = new InitialContext();
HelloBeanRemote beanRemote = (HelloBeanRemote)context.lookup("HelloBean/remote");
beanRemote.test();
} catch (NamingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
或者,如果您不想提供jndi.properties
文件,可以在代码中显式设置JNDI环境并创建如下的上下文:
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");
Context context = new InitialContext(properties);
但为了便于携带,我建议使用jndi.properties
。
答案 3 :(得分:0)
您还可以将bean公开为Web服务。我相信这是从EJB 3开始提供的。考虑到你可以使用注释来实现它,这是非常好的。您可能希望考虑使用此选项来减少耦合。这是指向tutorial的链接。