2015-10-15 120 views
0

我创建了这个代码会话bean:NameAlreadyBoundException一些使用JNDI

package ejb2; 
import javax.annotation.Resource; 
import javax.ejb.SessionContext; 
import javax.ejb.Stateless; 

@Stateless(name = "TestEJB", mappedName = "EJB2-Project1-TestEJB") 
public class TestEJBBean implements TestEJB, TestEJBLocal { 
    @Resource 
    SessionContext sessionContext; 

    public TestEJBBean() { 
    } 

    public String getHello(String who_welcome) { 
     return "Hello " + who_welcome; 
    } 
} 

正如你可以看到,它几乎是一个默认的代码(除getHello法)。除了这个豆我有一个客户端:

package ejb2; 

import java.util.Hashtable; 

import javax.naming.CommunicationException; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

public class TestEJBClient { 
    public static void main(String[] args) { 
     try { 
      final Context context = getInitialContext(); 
      TestEJB testEJB = (TestEJB) context.lookup("EJB2-Project1-TestEJB#ejb2.TestEJB"); 
      System.out.println(testEJB.getHello("Student")); 
     } catch (CommunicationException ex) { 
      System.out.println(ex.getClass().getName()); 
      System.out.println(ex.getRootCause().getLocalizedMessage()); 
      System.out.println("\n*** A CommunicationException was raised. This typically\n*** occurs when the target WebLogic server is not running.\n"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private static Context getInitialContext() throws NamingException { 
     Hashtable env = new Hashtable(); 
     // WebLogic Server 10.x/12.x connection details 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
     env.put(Context.PROVIDER_URL, "t3://localhost:7101"); 
     return new InitialContext(env); 
    } 
} 

第一次它像一个魅力工作。但后来我又创建了另一个bean:

package ejb2; 
import javax.annotation.Resource; 
import javax.ejb.Stateless; 
import javax.ejb.SessionContext; 
import javax.naming.Context; 
import javax.naming.InitialContext; 

@Stateless(name = "ClientEJB", mappedName = "EJB2-Project1-ClientEJB") 
public class ClientEJBBean implements ClientEJB, ClientEJBLocal { 
    @Resource 
    SessionContext sessionContext; 
    TestEJB testEJB; 

    public ClientEJBBean() { 
     try { 
      final Context context = new InitialContext(); 
      testEJB = (TestEJB) context.lookup("EJB2-Project1-TestEJB#ejb2.TestEJB"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

    public String getHelloFromBean(String who) { 
     return testEJB.getHello(who); 
    } 
} 

现在bean不起作用。我得到一个错误这样的:

weblogic.application.ModuleException:无法业务接口绑定到JNDI名称:EJB2Project1WebApp_warClientEJB_Home,抛出异常javax.naming.NameAlreadyBoundException:[EJB:011224]无法界面ejb2.ClientEJB绑定到ClientEJB。另一个EJB已经为该名称绑定了一个接口。剩余名称'EJB2-Project1-ClientEJB#ejb2'。 NestedException消息是:[EJB:011224]无法将接口ejb2.ClientEJB绑定到ClientEJB。另一个EJB已经为该名称绑定了一个接口。

这些代码有什么问题?

回答

0

至于我能看到你尝试用相同的JNDI名称 部署两个无状态的EJB尝试取消部署当前的应用程序,从管理控制台 检查JNDI树,并确保树木不具备JNDI名称你看作重复。

+0

我检查了我的JNDI树。它不包含任何重复的名称。 – JaKoZo

+0

你可以把你的耳朵或战争文件的地方,所以我可以尝试.... – Cris