远程调用session bean,Successful version handshake ,但是No EJB receiver available 50
jboss部署17:07:34,323INFO[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploy...
jboss部署
17:07:34,323 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeplo
ymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean name
d UserServiceImpl in deployment unit deployment "MessageSystem.jar" are as follo
ws:
java:global/MessageSystem/UserServiceImpl!MS.service.UserService
java:app/MessageSystem/UserServiceImpl!MS.service.UserService
java:module/UserServiceImpl!MS.service.UserService
java:jboss/exported/MessageSystem/UserServiceImpl!MS.service.UserService
java:global/MessageSystem/UserServiceImpl
java:app/MessageSystem/UserServiceImpl
java:module/UserServiceImpl
17:07:34,323 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeplo
ymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean name
d MessageSystem in deployment unit deployment "MessageSystem.jar" are as follows
:
java:global/MessageSystem/MessageSystem!messagesystem.MessageSystemLocal
java:app/MessageSystem/MessageSystem!messagesystem.MessageSystemLocal
java:module/MessageSystem!messagesystem.MessageSystemLocal
java:global/MessageSystem/MessageSystem
java:app/MessageSystem/MessageSystem
java:module/MessageSystem 展开
17:07:34,323 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeplo
ymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean name
d UserServiceImpl in deployment unit deployment "MessageSystem.jar" are as follo
ws:
java:global/MessageSystem/UserServiceImpl!MS.service.UserService
java:app/MessageSystem/UserServiceImpl!MS.service.UserService
java:module/UserServiceImpl!MS.service.UserService
java:jboss/exported/MessageSystem/UserServiceImpl!MS.service.UserService
java:global/MessageSystem/UserServiceImpl
java:app/MessageSystem/UserServiceImpl
java:module/UserServiceImpl
17:07:34,323 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeplo
ymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean name
d MessageSystem in deployment unit deployment "MessageSystem.jar" are as follows
:
java:global/MessageSystem/MessageSystem!messagesystem.MessageSystemLocal
java:app/MessageSystem/MessageSystem!messagesystem.MessageSystemLocal
java:module/MessageSystem!messagesystem.MessageSystemLocal
java:global/MessageSystem/MessageSystem
java:app/MessageSystem/MessageSystem
java:module/MessageSystem 展开
1个回答
展开全部
为什么你写的是 ejb:/ 前缀而不 java: 开头的?
java: 本身是 JNDI 的一个协议,并不是随便写的。它与 ldap://server:port/path 是一个概念。
另外从JVM容器外(这叫远程调用),不是直接用 ejb:/ 或 java:/ 而是使用服务器专用的像 jnp:// 或 iiop:// 或 corbaloc::// 这种协议的。java:/ 仅用在从容器内发起请求(因此才叫 java 协议嘛)。你需要知道 JBoss 的 jnp:// 协议的端口是什么,默认的开发环境下这个端口是 1099。如:jnp://localhost:1099/ 开头的。我们也可以选择 all 配置下启用 iiop 的 EJB unified invoker 来用 iiop 方式调用。
如果你们在 new InititalContext(properties) 中已经提供了 provider url 是 jnp:// 开头的,那么之后再 initialContext.lookup 时就不用再带着 jnp:// 前缀了,直接用后面不带服务器地址和端口的那个路径了,比如:假设命名 jndi 是 jnp://localhost:1099/ejb/myremote 那么用 ctx.lookup("/ejb/myremote") 就可以了。
从 JBoss 命令来看,似乎你从外面远程访问非要调用 global 开头的,而从 ejb-jar 模块内调用可以用 module 开头的,在 ear 内部可以用 app 开头的,这是我的猜想,我本人并不喜欢服务器这种自动的做法,JBoss 在每次重大版本升级中频繁地改动它的设计让产品级的应用程序受影响,因此如果你要做一个产品最好还是手工写一个 ejb-jar.xml 来得可靠,它不用每次修改代码,最多在部署时配置一个 ejb reference binding。另外我们可以通过 annotation 或 ejb-jar.xml 明确地指定一个固定的 JNDI 名字,J2EE 规范要求支持把同一个 ear 文件部署成两个完全独立的应用程序到不同的 JNDI 名下而互不影响(比如你有多个客户,它们的程序逻辑略有不同,但类名和包名完全相同并用运行在你们公司租给这些客户的同一台物理服务器上,比如它们在进行 UAT 测试不想影响生产环境那台机器而选择租用你的测试机器)。
java: 本身是 JNDI 的一个协议,并不是随便写的。它与 ldap://server:port/path 是一个概念。
另外从JVM容器外(这叫远程调用),不是直接用 ejb:/ 或 java:/ 而是使用服务器专用的像 jnp:// 或 iiop:// 或 corbaloc::// 这种协议的。java:/ 仅用在从容器内发起请求(因此才叫 java 协议嘛)。你需要知道 JBoss 的 jnp:// 协议的端口是什么,默认的开发环境下这个端口是 1099。如:jnp://localhost:1099/ 开头的。我们也可以选择 all 配置下启用 iiop 的 EJB unified invoker 来用 iiop 方式调用。
如果你们在 new InititalContext(properties) 中已经提供了 provider url 是 jnp:// 开头的,那么之后再 initialContext.lookup 时就不用再带着 jnp:// 前缀了,直接用后面不带服务器地址和端口的那个路径了,比如:假设命名 jndi 是 jnp://localhost:1099/ejb/myremote 那么用 ctx.lookup("/ejb/myremote") 就可以了。
从 JBoss 命令来看,似乎你从外面远程访问非要调用 global 开头的,而从 ejb-jar 模块内调用可以用 module 开头的,在 ear 内部可以用 app 开头的,这是我的猜想,我本人并不喜欢服务器这种自动的做法,JBoss 在每次重大版本升级中频繁地改动它的设计让产品级的应用程序受影响,因此如果你要做一个产品最好还是手工写一个 ejb-jar.xml 来得可靠,它不用每次修改代码,最多在部署时配置一个 ejb reference binding。另外我们可以通过 annotation 或 ejb-jar.xml 明确地指定一个固定的 JNDI 名字,J2EE 规范要求支持把同一个 ear 文件部署成两个完全独立的应用程序到不同的 JNDI 名下而互不影响(比如你有多个客户,它们的程序逻辑略有不同,但类名和包名完全相同并用运行在你们公司租给这些客户的同一台物理服务器上,比如它们在进行 UAT 测试不想影响生产环境那台机器而选择租用你的测试机器)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询