问题是如下。我正在尝试将项目从JBoss 4.2迁移到JBoss 7.1。 之前的ejb查找是通过以下方式完成的:
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
props.put(Context.SECURITY_PRINCIPAL, new SimplePrincipal(login));
props.put(Context.SECURITY_CREDENTIALS, password);
InitialContext ctx = new InitialContext(props);
SomeClass someClass = (SomeClass) ctx.lookup("appName/SomeClass/local");
一切都很好。现在实施如下:
InitialContext ctx = new InitialContext();
SomeClass someClass = (SomeClass) ctx.lookup("java:app/jarModuleName/SomeClass!com.example.SomeClass");
ejb interface:
@Local
public interface SomeClass(){
...
}
ejb class:
@Stateless(name = "SomeClass")
public class SomeClassImpl implements SomeClass() {
...
}
在启动期间,jboss显示绑定是:
java:app/jarModuleName/SomeClass!com.example.SomeClass
但是后面的lookup()会导致NameNotFoundException。
包结构如下:
appName.ear
|
+--jmx-services.sar (where lookup method is invoked)
|
+--jarModuleName.jar (where ejb is located.)
jarModuleName中的ejb-jar.xml的内容:
<ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
<session>
<ejb-name>SomeClass</ejb-name>
<ejb-class>com.example.SomeClassImpl</ejb-class>
</session>
</enterprise-beans>
还可以指定,MBean是使用jboss-service.xml和start()/ stop()方法在“旧式”中创建的,而不是@Startup和@Singleton注释。
答案 0 :(得分:1)
将@Local
和@Remote
同时用于两个独立的界面,强烈建议您使用@EJB
。
还将您的EJB放在不同的jar文件中并进行部署。
这个文件夹结构对我有用:
yourApp.ear
{
-lib
-META-INF
{
的application.xml
}
-yourEJB.jar
-yourWebContent.war
}
你的META-INF文件夹中应该有一个application.xml,其示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
<module>
<ejb>
yourEJB.jar
</ejb>
</module>
<module>
<web>
<web-uri>
yourWar.war
</web-uri>
<context-root>
yourAppRoot (use it as localhost://yourAppRoot)
</context-root>
</web>
</module>
</application>
在JBoss中部署yourApp.ear。
我没有在我的应用程序中使用ejb-jar.xml。