繁体   English   中英

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

[英]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.xmlweblogic-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.jarweblogic.jarwlfullclient.jar
但是即使没有这些文件,我也获得了相同的错误消息(即使我认为我也不需要在其中放入weblogic.jar )。

我不知道是否需要一个XML配置( ejb-jar.xmlweblogic-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM