远程EJB 3.0查找(STS 3.4.0,Weblogic 10.3.5)

时间:2013-11-05 09:24:31

标签: java ejb weblogic lookup applicationcontext

我有一个Spring MVC 3.1.1应用程序,它需要查找部署到Weblogic 10.3.5中的远程EJB 3.0。

Spring应用程序在本地服务器VMware vFabric tc S.D.E中运行。 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时,我获得了相同的消息。 现在我不使用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.jarweblogic.jarwlfullclient.jar
但是我没有那些文件也得到了同样的错误信息(即使我认为我不需要将weblogic.jar放在其中)。

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

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

1 个答案:

答案 0 :(得分: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