我正在将一个ejb应用程序从weblogic迁移到jboss。该应用程序正在寻找使用jndi的ejb。我有ejb-jar.xml和jboss.xml到WEB-INF/中,如下所示
jboss.xml
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>DataAccessEJB</ejb-name>
<jndi-name>HeatMapDataAccessJNDI</jndi-name>
<local-jndi-name>HeatMapDataAccessLocalJNDI</local-jndi-name>
</session>
<session>
<ejb-name>PMSessionFacadeEJB</ejb-name>
<jndi-name>PMSessionFacadeJNDI</jndi-name>
<local-jndi-name>PMSessionFacadeLocalJNDI</local-jndi-name>
</session>
<session>
<ejb-name>RRMSessionFacadeEJB</ejb-name>
<jndi-name>RRMSessionFacadeJNDI</jndi-name>
<local-jndi-name>RRMSessionFacadeLocalJNDI</local-jndi-name>
</session>
<session>
<ejb-name>FIPMSessionFacadeEJB</ejb-name>
<jndi-name>FIPMSessionFacadeJNDI</jndi-name>
<local-jndi-name>FIPMSessionFacadeLocalJNDI</local-jndi-name>
</session>
</enterprise-beans>
</jboss>
ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC
"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
"http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<!-- A list of all the session and entity beans packaged within this jar file. -->
<session>
<!-- An arbitrary identifier that's used to match up this description of the bean with the
corresponding entry in the weblogic-ejb-jar.xml file -->
<ejb-name>
DataAccessEJB
</ejb-name>
<!-- The name of the interface implemented by the bean's home object -->
<home>
com.bfm.app.pirptfe.heatmap.ejb.DataAccessHomeInterface
</home>
<!-- The name of the interface implemented by the bean's remote object -->
<remote>
com.bfm.app.pirptfe.heatmap.ejb.DataAccessRemoteInterface
</remote>
<local-home>
com.bfm.app.pirptfe.heatmap.ejb.DataAccessLocalHomeInterface
</local-home>
<local>
com.bfm.app.pirptfe.heatmap.ejb.DataAccessLocalInterface
</local>
<!-- The name of the bean class -->
<ejb-class>
com.bfm.app.pirptfe.heatmap.ejb.DataAccessBean
</ejb-class>
<!-- Is this session bean Stateful or Stateless? -->
<session-type>
Stateless
</session-type>
<!-- If this bean uses any transactions, will these transactions be managed by the Container or
by the Bean itself? -->
<transaction-type>
Container
</transaction-type>
</session>
<session>
<ejb-name>
PMSessionFacadeEJB
</ejb-name>
<home>
com.bfm.app.pirptfe.heatmap.ejb.PMSessionFacadeHome
</home>
<remote>
com.bfm.app.pirptfe.heatmap.ejb.PMSessionFacadeRemote
</remote>
<ejb-class>
com.bfm.app.pirptfe.heatmap.ejb.PMSessionFacadeBean
</ejb-class>
<session-type>
Stateless
</session-type>
<transaction-type>
Container
</transaction-type>
</session>
<session>
<ejb-name>
RRMSessionFacadeEJB
</ejb-name>
<home>
com.bfm.app.pirptfe.heatmap.ejb.RRMSessionFacadeHome
</home>
<remote>
com.bfm.app.pirptfe.heatmap.ejb.RRMSessionFacadeRemote
</remote>
<ejb-class>
com.bfm.app.pirptfe.heatmap.ejb.RRMSessionFacadeBean
</ejb-class>
<session-type>
Stateless
</session-type>
<transaction-type>
Container
</transaction-type>
</session>
<session>
<ejb-name>
FIPMSessionFacadeEJB
</ejb-name>
<home>
com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeHome
</home>
<remote>
com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeRemote
</remote>
<ejb-class>
com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeBean
</ejb-class>
<session-type>
Stateless
</session-type>
<transaction-type>
Container
</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
当我运行应用程序时,它会加载。日志如下所示
14:08:16,990 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named FIPMSessionFacadeEJB in deployment unit deployment "pirptfe.war" are as follows:
java:global/pirptfe/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeRemote
java:app/pirptfe/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeRemote
java:module/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeRemote
java:jboss/exported/pirptfe/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeRemote
java:global/pirptfe/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeHome
java:app/pirptfe/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeHome
java:module/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeHome
java:jboss/exported/pirptfe/FIPMSessionFacadeEJB!com.bfm.app.pirptfe.heatmap.ejb.FIPMSessionFacadeHome
在我的代码中,用于查找服务的JNDI名称如下所示
// The JNDI Names used to lookup a service
private static final String PMSESSIONFACADEEJB_JNDIHOME =
"PMSessionFacadeJNDI";
private static final String RRMSESSIONFACADEEJB_JNDIHOME =
"RRMSessionFacadeJNDI";
private static final String FIPMSESSIONFACADEEJB_JNDIHOME =
"FIPMSessionFacadeJNDI";
当代码尝试使用以下代码在上下文中查找 ejb 时,它会给出异常
serviceName是下面代码中的JNDI名称
public EJBHome getEJBHome(int parServiceId)
throws FrontServiceLocatorException {
// Trying to find the JNDI Name for the reqested service
String serviceName = getServiceName(parServiceId);
EJBHome ejbHome = null;
try {
// Checking to see if I can find the EJBHome interface in the cache
if (ejbHomeCashe_.containsKey(serviceName)) {
ejbHome = (EJBHome)ejbHomeCashe_.get(serviceName);
return ejbHome;
} else {
// I could not find the home interface in the cache, look it up
// and then cache it
Context ctx = new InitialContext();
Object jndiRef = ctx.lookup(serviceName);
Object portableObj = PortableRemoteObject.narrow(jndiRef,
getEJBHomeRef(
parServiceId));
ejbHome = (EJBHome)portableObj;
ejbHomeCashe_.put(serviceName, ejbHome);
return ejbHome;
}
} catch (NamingException e) {
throw new FrontServiceLocatorException("Naming exception error in FrontServiceLocator.getEJBHome()",
e);
}
catch (Exception e) {
throw new FrontServiceLocatorException("General exception in FrontServiceLocator.getEJBHome()",
e);
}
}
例外情况:
18:40:12,376 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) javax.naming.NameNotFoundException: RRMSessionFacadeJNDI -- service jboss.naming.context.java.RRMSessionFacadeJNDI
18:40:12,376 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
18:40:12,392 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
18:40:12,392 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at org.jboss.as.naming.InitialContext.lookup(InitialContext.java:113)
18:40:12,392 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:214)
18:40:12,407 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at javax.naming.InitialContext.lookup(InitialContext.java:411)
18:40:12,407 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at com.bfm.app.pirptfe.heatmap.web.FrontServiceLocator.getEJBHome(FrontServiceLocator.java:191)
18:40:12,407 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at com.bfm.app.pirptfe.heatmap.web.CommonalityRRM.process(CommonalityRRM.java:77)
18:40:12,423 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at com.bfm.app.pirptfe.heatmap.web.CommonalityRRM.doPost(CommonalityRRM.java:54)
18:40:12,423 ERROR [stderr] (http-localhost-127.0.0.1-8080-1) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
有人能帮我解决吗。
我的问题还没有解决,但我得到了我在这里做错什么的答案。
jboss-ejb3.xml
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="urn:security"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd
http://java.sun.com/xml/ns/javaee"
version="3.1" impl-version="2.0">
<enterprise-beans>
<session>
<ejb-name>DataAccessEJB</ejb-name>
<resource-ref>
<res-ref-name>java:app/pirptfe/HeatMapDataAccessJNDI</res-ref-name>
<lookup-name>HeatMapDataAccessJNDI</lookup-name>
</resource-ref>
</session>
<session>
<ejb-name>PMSessionFacadeEJB</ejb-name>
<resource-ref>
<res-ref-name>java:app/pirptfe/PMSessionFacadeJNDI</res-ref-name>
<lookup-name>PMSessionFacadeJNDI</lookup-name>
</resource-ref>
</session>
<session>
<ejb-name>RRMSessionFacadeEJB</ejb-name>
<resource-ref>
<res-ref-name>java:app/pirptfe/RRMSessionFacadeJNDI</res-ref-name>
<lookup-name>RRMSessionFacadeJNDI</lookup-name>
</resource-ref>
</session>
<session>
<ejb-name>FIPMSessionFacadeEJB</ejb-name>
<resource-ref>
<res-ref-name>java:app/pirptfe/FIPMSessionFacadeJNDI</res-ref-name>
<lookup-name>FIPMSessionFacadeJNDI</lookup-name>
</resource-ref>
</session>
</enterprise-beans>
</jboss:ejb-jar>
我是java EE的新手。最近我正在使用bean无状态处理一个项目,但我得到了以下错误 豆子: Servlet: javax.name.nameingException: 在 SerialContext[myEnv={java.name.factory.initial=com.sun.enterprise.name.name.impl.SerialInitContext, java.name.fa
我有一个Web项目,其中有几个EJB在不同的包中。但是我在查找EJB时遇到了问题。 我的目录结构:有两个包索引。作业和索引。ejb。 --包index.job有一个POJOindex.java --包装索引。ejb有一个由@Stateless(name=“indexEJB”,mappedName=“indexEJB”)和@LocalBean定义的ejb --包装索引。ejb还有一个定义为“本地”的
问题:似乎无法通过spring在Webphsere服务器中执行jndi查找EJB3。一直找不到我的jndi名称。我看不出我做错了什么。对于Websphere,您是否必须为jndi名称查找添加不同的内容? 堆栈溢出参考问题-EJB3注入Springbean 版本: Spring版本:4.1.2 WebSphereServer版本:7.0.0.27 Spring错误: 创建名为'myLocalEjb'
在prop service中的必需类中,但serviceCaller在这里显示为null。在这个问题上搜索发现,我们只能在容器管理的类中使用@EJB,而不能在简单的java类中使用。 我已经尝试了一切,但注意似乎是有效的。所以请帮我解决这个问题。
我有一个Spring MVC 3.1.1应用程序,它需要查找部署到WebLogic10.3.5中远程EJB3.0。 其中ABC不同的每一次尝试。 安装和配置Weblogic后,我可以看到部署在控制台中的EJB,这就是我在他的JNDI树中看到的: 每个都是一个树节点,名称为 如您所见,我想在Spring Security3.1.4中设置EJB for login作用域。 这是远程接口的分支: 这是类
我在本地机器上创建了两个liberty实例。我在服务器X中部署了一个包含远程ejb的war模块,并在服务器Y中部署了另一个war模块,它必须从服务器X中远程查找ejb。 下面是从宁静的 Web 服务中查找 ejb 的代码。 当我尝试调用 Web 服务时,我得到以下异常 本地对象不支持 DII 操作 P.S.我已经在两个端口号不同的服务器上启用了ejbRemote功能。 我将查找字符串更改为“cor