我创建了这个代码会话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已经为该名称绑定了一个接口。
这些代码有什么问题?
我检查了我的JNDI树。它不包含任何重复的名称。 – JaKoZo
你可以把你的耳朵或战争文件的地方,所以我可以尝试.... – Cris