[英]Does GlassFish 5.0.1 (with Java 8) supports EJB 2.1 and EJB 3.1?
GlassFish 5.0.1(帶有 Java 8)是否支持 EJB 2.1 和 EJB 3.1?
我用 Payara 安裝了 GlassFish,並嘗試用 EJB 3.1 實體和 session bean 部署我的 EAR 應用程序,它掛在ServletContext.log():Initializing Spring root WebApplicationContext
我等了幾個小時,什么也沒有。 是的,我知道,EJB 已經死了,我應該遷移到 spring...我只是在尋找替代方案來保留我基於 EJB 的舊應用程序而無需任何遷移。
完整的最后日志行:
...
[2020-06-11T16:22:27.773+0300] [Payara 5.201] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: ThreadID=101 ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1591881747773] [levelValue: 800] [[
Portable JNDI names for EJB WulogEJB: [java:global/CCC-ear-RAYAPP-1.0.1-SNAPSHOT-payaraora/CCC-ejb-entity-in-payara-1.0.1-SNAPSHOT/WulogEJB, java:global/CCC-ear-RAYAPP-1.0.1-SNAPSHOT-payaraora/CCC-ejb-entity-in-payara-1.0.1-SNAPSHOT/WulogEJB!com.Tree.common.entityejb.WulogEntityHome]]]
[2020-06-11T16:22:27.922+0300] [Payara 5.201] [INFO] [] [javax.enterprise.web] [tid: ThreadID=101 ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1591881747922] [levelValue: 800] [[
WebModule[/TreeOnline-RAYAPP] ServletContext.log():No Spring WebApplicationInitializer types detected on classpath]]
[2020-06-11T16:22:28.011+0300] [Payara 5.201] [INFO] [jsf.config.listener.version] [javax.enterprise.resource.webcontainer.jsf.config] [tid: ThreadID=101 ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1591881748011] [levelValue: 800] [[
Initializing Mojarra |version.string| for context '/TreeOnline-RAYAPP']]
[2020-06-11T16:22:28.471+0300] [Payara 5.201] [INFO] [] [javax.enterprise.web] [tid: ThreadID=101 ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1591881748471] [levelValue: 800] [[
WebModule[/TreeOnline-RAYAPP] ServletContext.log():Initializing Spring root WebApplicationContext]]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
<security-domain>java:/TreeSecurityDomain</security-domain>
<resource-ref>
<res-ref-name>jdbc/treeDataSource</res-ref-name>
<jndi-name>treeDataSource</jndi-name>
</resource-ref>
</glassfish-web-app>
我以前使用過 Wildfly,但它在版本 9 之后刪除了 EJB 實體支持。我在 JAVA 8 上使用 EJB 3.1 實體和 session beans 編譯了我的應用程序。 + 在 -> JDBC 連接池下創建連接 -> 具有 JNDI 屬性 + 使用set server.ejb-container.property.disable-nonportable-jndi-names="true"
禁用可移植 jndi 名稱
也許我的 glassfish-ejb-jar.xml 語法不正確?
<?xml version="1.0" encoding="UTF-8"?>
<glassfish-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:1.1"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1" impl-version="2.1">
<assembly-descriptor>
<s:security>
<ejb-name>*</ejb-name>
<s:security-domain>TreeSecurityDomain</s:security-domain>
<s:missing-method-permissions-deny-access>false</s:missing-method-permissions-deny-access>
</s:security>
<container-transaction>
<method>
<ejb-name>*</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Supports</trans-attribute>
</container-transaction>
</assembly-descriptor>
<enterprise-beans>
<entity>
<ejb-name>AminataEJB</ejb-name>
<resource-ref>
<res-ref-name>jdbc/treeDataSource</res-ref-name>
<jndi-name>java:treeDataSource</jndi-name>
</resource-ref>
</entity>
<entity>
<ejb-name>AmeliaEJB</ejb-name>
<resource-ref>
<res-ref-name>jdbc/treeDataSource</res-ref-name>
<jndi-name>java:treeDataSource</jndi-name>
</resource-ref>
</entity>
</enterprise-beans>
</glassfish-ejb-jar>
可能是因為描述標簽?
xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
和
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
?
啟用調試級別並看到很多這樣的:
DEBUG o.s.jndi.JndiObjectFactoryBean - Converted JNDI name [java:comp/env/TREE/treeDataSource] not found - trying original name [TREE/treeDataSource]. javax.naming.NamingException: Lookup failed for 'java:comp/env/TREE/treeDataSource' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitTreeFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: No object bound to name java:comp/env/TREE/treeDataSource]
這是否意味着我需要將所有 JNDI 綁定從java:treeDataSource
為java:comp/env/TREE/treeDataSource
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.