gpt4 book ai didi

java - EJB 3.2 - 无法正确配置远程客户端

转载 作者:行者123 更新时间:2023-12-02 03:55:28 26 4
gpt4 key购买 nike

我是 EJB 新手,为了演示目的,我编写了一个非常小的 ejb 组件。它应该做的就是打印“hello”。目前正在努力正确配置远程客户端的InitialContext。我使用的容器是JBoss 7.0。我使用 JaveEE7.0 和 ejb3.2。

ejb 的接口(interface):

package hello;

public interface Hello {

public String sayHello(String name);
}

bean 本身:

package hello;

import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless(name="HelloEJB")
@Remote(Hello.class)
public class HelloBean implements Hello {

@Override
public String sayHello(String name) {
return "Hello, " + name;
}

}

以及我放置在 EJB 项目中但作为 java 应用程序运行的远程客户端:

package client;

import hello.Hello;

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

public class Test {

public static void main(String[] args) {

Hello statelessHello = null;
try {
statelessHello = lookupStatelessHello(); // the method that throws exception
} catch (NamingException e) {
System.out.println("Bean Loading Failed");
e.printStackTrace();
Thread.currentThread().stop();
}
Hello stub=(Hello)PortableRemoteObject.narrow(statelessHello, Hello.class);
System.out.println("obtained a remote stateless hello for invocation");
System.out.println(stub.sayHello(args[0]));
}



private static Hello lookupStatelessHello() throws NamingException {
// the problematic code:
Properties jndiProperties = new Properties();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.PROVIDER_URL,"remote://localhost:4447"); // tried to change ports.
jndiProperties.put("jboss.naming.client.ejb.context", true);
Context context = new InitialContext(jndiProperties); // exception happens here
return (Hello) context.lookup("stateless1/HelloEJB!hello.Hello");
}
}

当我运行 JBoss 时,我成功地部署了我的 ejb 项目,没有出现任何问题:

13:37:20,141 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named HelloEJB in deployment unit deployment "stateless1.jar" are as follows:

java:global/stateless1/HelloEJB!hello.Hello java:app/stateless1/HelloEJB!hello.Hello java:module/HelloEJB!hello.Hello
java:global/stateless1/HelloEJB java:app/stateless1/HelloEJB
java:module/HelloEJB

13:37:20,255 INFO [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployed "stateless1.jar"

但是当我尝试从远程客户端调用 ejb 时,我得到:

Bean Loading Failed javax.naming.NoInitialContextException: Cannot instantiate class: org.jboss.naming.remote.client.InitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory] at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.init(Unknown Source) at javax.naming.InitialContext.(Unknown Source) at client.Test.lookupStatelessHello(Test.java:34) at client.Test.main(Test.java:18) Caused by: java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method)

我尝试过更改端口,尝试添加安全凭证,但我不明白如何添加用户,尝试阅读指南,但坦率地说,因为我是新手,这对我来说相当困难。另外,我很确定我查找 bean 的方式是错误的,但这不是现在的问题。

我希望你能够帮助我找到我在这里做错的事情。如果您需要有关设置的更多信息,请询问。

最佳答案

如上所述,您需要 jboss-client.jar 以及您的代码,才能使其正常工作。具体jar可以在

找到
JBOSS_HOME/bin/client/jboss-client-7.1.0.Final.jar.

另请查看官方文档和 wiki,其中包含完整示例。请参阅here .

关于java - EJB 3.2 - 无法正确配置远程客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com