我已在域模式
中部署了如下所示的应用程序MyWebApp.war ---> which has web tier
MyEjb.jar --> which has all ejbs
service.jar --> from where ejb is invoked
两者都以域模式部署。
并在调用时使用
java:global/MyEjb/...
这有效,但我想知道它在同一台服务器上部署时的性能影响。 如果我想以本地方式访问它,还需要改变什么。
如果我使用java:app/MyEjb/..
访问它,则无法找到该bean。
而且, 如果我从同一台服务器调用ejb并使用下面的代码
Hashtable Props = new Hashtable();
Props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.as.naming.InitialContextFactory");
Props.put(Context.PROVIDER_URL, "remote://localhost:4447");
Props.put("jboss.naming.client.ejb.context", Boolean.valueOf(true));
为什么在这种情况下使用“远程”? 还有其他方式可以在本地打电话吗?
我的目标是在本地调用ejb,因为一切都在同一个JVM上运行。
答案 0 :(得分:1)
您正在进行本地和远程访问的JNDI查找。您传递给Context
的字符串定义了这是否是远程本地查找(以及传递给Context
的属性)。
对于远程查找,您的名称将以ejb:...
开头(例如here所述)。此外,您通过传递Context
等属性来创建"org.jboss.ejb.client.naming"
的实例,该属性表示上下文工厂所在的Java包:
Properties contextProperties = new Properties();
contextPropertiesL.put( Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(contextProperties);
如果您的名字以java:...
开头,则会在本地查找。本地意味着在同一个JVM中,因此不必对象进行序列化/反序列化。因此,本地存根在运行时方面更有效,因为EJB的调用就像调用JVM中任何其他对象的方法一样。
只有在您想要进行远程查找时,才需要传递给Context
的属性。