从struts中定义的Action类访问EJB方法

时间:2012-03-17 09:55:01

标签: java tomcat jboss ejb-3.0 stateless-session-bean

我在Eclipse中定义了两个项目。 其中一个是EJB(3.0)项目,另一个是动态Web项目。

我已经定义了一个名为LoginAuthenticator的无状态会话bean,并为它创建了两个本地和远程接口。 在我的EJB项目中,我将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

我能够在JBoss 5.0.0上部署jar文件 我在部署

后在控制台上获得以下输出
LoginAuthenticator/remote - EJB3.x Default Remote Business Interface
LoginAuthenticator/remote-com.SR.enterprise.session.LoginAuthenticatorRemote - EJB3.x Remote Business Interface
LoginAuthenticator/local - EJB3.x Default Local Business Interface
LoginAuthenticator/local-com.SR.enterprise.session.LoginAuthenticatorLocal - EJB3.x Local Business Interface

现在从另一个Web项目我已经定义了一个动作类LoginAction,它将访问我的会话bean的公开方法。 初始上下文创建为

props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.put(javax.naming.Context.PROVIDER_URL,"jnp://localhost:1099");
props.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");

我将远程方法称为

LoginAuthenticatorRemote loginAuthenticator = (LoginAuthenticatorRemote) context.lookup("LoginAuthenticator/remote");

当我在Tomcat 6.0上运行第二个项目时,我收到以下错误消息

javax.naming.CommunicationException: Could not obtain connection to any of these urls: localhost:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.SocketException: Permission denied: connect]]]

service = Naming下jmx-console中的端口值为1099 服务=命名时jmx-console中的RmiPort值为1098 RmiBindAddress&服务=名称下的jmx-console中的BindAddress是127.0.0.1

我得到错误的原因是什么?我还应该为此配置什么? 任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我得到了解决方案。 我的防火墙阻止了对该JNDI地址和端口的请求,在禁用它之后连接现在正在工作。