我有一个带有一些WAR和一个EJB模块的EAR应用程序。在这个EJB模块中,我有一个LdapConnectionPoolEJB,它为我的LDAP连接提供了一个连接池。到目前为止,效果很好。
我还为我的Liberty应用程序服务器提供了一个自定义登录模块。在其中,我检查凭据,并为每个传入请求另外向“主题”添加一些值。 但是在这里,我无法为LDAP连接池查找EJB。我在自定义登录中做了这样的事情:
InitialContext ic = new InitialContext();
LdapConnectionPoolBeanLocal connectionPoolBean = (LdapConnectionPoolBeanLocal) ic.lookup("java:global/myApp/myEJBmodule/LdapConnectionPoolBean!my.package.LdapConnectionPoolBeanLocal");
此绑定路径来自自由的message.log,显示了EJB的绑定位置。但是我得到了一个 NameNotFoundException 。
我还通过远程接口尝试了该操作,在该接口上我也得到了 NameNotFoundException 。
这是我的 bean实现:
@Singleton
@Startup
public class LdapConnectionPoolBean implements LdapConnectionPoolBeanLocal, LdapConnectionPoolBeanRemote {
public LDAPConnectionPool getLdapPool(){
//some implementation.
}
}
正常情况下,远程和本地接口使用@Remote和@Local进行注释。远程接口还扩展了java.rmi.Remote。
我的第一个问题:我应该使用 Local 还是 Remote ?一切都在同一个JVM上运行(据我所知)。为启动我的实际应用程序的Liberty服务器加载了自定义登录模块。登录模块代码本身位于.jar文件中,该文件在Liberty中配置为库。
第二个问题:是否有可能实现我想做的事情?如果是的话,我在做什么错了?