0

我有一个 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.xmlnor 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.jarwlfullclient.jar
weblogic.jar

我不知道是否需要一个 XML 配置(ejb-jar.xmlweblogic-ejb-jar.xml),也许当我制作这些文件时我犯了一些错误(现在我没有这些文件),但我也读过我可以部署没有 XML 的 EJB。

我已经阅读了有关 Stack Overflow 的其他一些问题,但这些建议都没有为我提供解决方案。

4

1 回答 1

1

这至少是错误的:

    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
于 2013-11-05T12:03:49.037 回答