我有一个 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
其中every+
是一个树节点,名称是LoginBean#it.company.project.ejb.login.LoginBeanRemote
在 AdminServer 下,我还可以看到 subtree 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
nor weblogic-ejb-jar.xml
,但是当我使用一个或每个配置 XML 时,我得到了相同的消息。现在我不使用name
里面的标签@Stateless
,但是当我使用它时,我得到了同样的信息。
那是客户端分支:
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 的其他一些问题,但这些建议都没有为我提供解决方案。