[英]Remote EJB 3.0 lookup (STS 3.4.0, Weblogic 10.3.5)
我有一个Spring MVC 3.1.1应用程序,该应用程序需要查找部署到Weblogic 10.3.5中的远程EJB 3.0。
Spring应用程序在本地服务器VMware vFabric tc SDE 2.9中运行,Weblogic也是本地的,并由STS 3.4.0启动
我尝试了许多不同的查找方式,但错误消息是:
Name [ABC] is not bound in this Context. Unable to find [ABC]
每次尝试的ABC都不同。
Weblogic已安装和配置,我可以看到在控制台内部署的EJB,这就是他的JNDI树中可以看到的:
AdminServer+LoginBean#it+company+project+ejb+login+LoginBeanRemote
每个+
是一个树节点,名称为LoginBean#it.company.project.ejb.login.LoginBeanRemote
在AdminServer下,我还可以看到子树ejb.mgmt.MEJB
,我不知道这是否是一个有用的通知。
如您所见,我想在Spring Security 3.1.4中使该EJB用于登录范围。
那是远程接口的分支:
@Remote
public interface LoginBeanRemote {
public User loadUserByUsername(final String username);
}
那是课程分支:
@Stateless(mappedName = "LoginBean")
public class LoginBean implements LoginBeanRemote {
@Override
public User loadUserByUsername(final String username) {
final User user = new User();
(...)
return user;
}
}
现在没有ejb-jar.xml
或weblogic-ejb-jar.xml
,但是当我使用一个或每个配置XML时,我会获得相同的消息。 现在,我不使用@Stateless
内的name
标签,但是使用它时,我获得了相同的消息。
那是客户分支:
public class UserLogin {
public User loadUserByUsername(final String username) {
final User user = new User();
Context context = null;
final Hashtable <String, String> webLogic = new Hashtable <String, String>();
webLogic.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
webLogic.put(Context.PROVIDER_URL, "[http://localhost:7001]()"); //also used t3 and iiop
//also used SECURITY_PRINCIPAL & SECURITY_CREDENTIALS
try {
context = new InitialContext();
final LoginBeanRemote login = (LoginBeanRemote) context.lookup("LoginBean#it.postel.aos.ejb.login.LoginBeanRemote");
(...)
} catch (final NamingException ne) {
(...)
}
(...)
return user;
}
}
在生产中,spring应用程序将被部署到与EJB模块不同的AS中,甚至是Weblogic 10.3.5,因此我使用了远程EJB。
我已经在STS内进行了所有测试。
我已经将EJB作为外部JAR引用到了Spring应用程序中。
我将这些文件放在lib文件夹中,放入我域的Weblogic服务器中:
LoginEjb.jar
, weblogic.jar
和wlfullclient.jar
,
但是即使没有这些文件,我也获得了相同的错误消息(即使我认为我也不需要在其中放入weblogic.jar
)。
我不知道是否需要一个XML配置( ejb-jar.xml
或weblogic-ejb-jar.xml
),也许当我制作这些文件时,我犯了一些错误(现在我没有那些文件),但是我已经还请阅读我可以部署没有XML的EJB。
我已经阅读了有关Stack Overflow的其他一些问题,但是这些建议都没有为我提供解决方案。
这至少是错误的:
final Hashtable <String, String> webLogic = new Hashtable <String, String>();
webLogic.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
webLogic.put(Context.PROVIDER_URL, "[http://localhost:7001]()"); //also used t3 and iiop
try {
context = new InitialContext();
如果仅使用不带参数的new InitialContext()
,则表示正在进行本地查找,而不是远程查找。 您需要使用所拥有的参数来初始化上下文,如下所示:
final Hashtable <String, String> webLogic = new Hashtable <String, String>();
webLogic.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
webLogic.put(Context.PROVIDER_URL, "http://localhost:7001"); //also used t3 and iiop
try {
context = new InitialContext(webLogic); // <--- note this
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.