Java 查找MailResource与模块名称组合时的Glassfish无限循环

Java 查找MailResource与模块名称组合时的Glassfish无限循环,java,jakarta-ee,glassfish,jndi,initial-context,Java,Jakarta Ee,Glassfish,Jndi,Initial Context,Glassfish在查找邮件资源时会运行无限循环。只有在ejb.jar.xml中定义自定义项时,才会发生错误 例外情况: 在javax.naming.InitialContext.lookup(InitialContext.java:392)中 位于com.sun.enterprise.naming.util.jndinaminigobjectfactory.create(jndinaminigobjectfactory.java:90) 位于com.sun.enterprise.naming.

Glassfish在查找邮件资源时会运行无限循环。只有在ejb.jar.xml中定义自定义项时,才会发生错误

例外情况:

在javax.naming.InitialContext.lookup(InitialContext.java:392)中 位于com.sun.enterprise.naming.util.jndinaminigobjectfactory.create(jndinaminigobjectfactory.java:90) 位于com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776) 位于com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744) 位于com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:180) 在com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)上 在com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)上 在javax.naming.InitialContext.lookup(InitialContext.java:392)中 在javax.naming.InitialContext.lookup(InitialContext.java:392)中 位于com.sun.enterprise.naming.util.jndinaminigobjectfactory.create(jndinaminigobjectfactory.java:90) 位于com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776) 位于com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744) 位于com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:180) 在com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)上 在com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)上 在javax.naming.InitialContext.lookup(InitialContext.java:392)中 在javax.naming.InitialContext.lookup(InitialContext.java:392)中 位于com.sun.enterprise.naming.util.jndinaminigobjectfactory.create(jndinaminigobjectfactory.java:90)

以下是我的配置:

glassfish-resources.xml

ejb.jar.xml

后端
当然,上面提到的所有文件都位于同一个module=>backend中

使用JNDI内部的详细日志记录,我可以深入到以下问题:

工作场景(无模块名称): 如果没有特殊的模块名称,模块名称将是文件扩展名为的文件名,例如backend-1.1.1-SNAPSHOT。这将导致以下查找场景,最终重新加载邮件资源:

.背景;MethodName=查找|SerialContext=>lookup(java:module/mail/MailSession)|#] .背景;MethodName=查找|SerialContext=>lookup相对名称:java:module/mail/MailSession |#] .JavaURLContext;MethodName=查找|在javaURLContext.lookup中,name=java:module/mail/MailSession serialcontext…null |#] .背景;MethodName=查找|SerialContext=>lookup(java:global/portal-1.1.1/backend-1.1.1-SNAPSHOT/mail/MailSession)| .背景;MethodName=查找|SerialContext=>lookup相对名称:java:global/portal-1.1.1/backend-1.1.1-SNAPSHOT/mail/MailSession |#] .SerialContextProviderImpl;MethodName=查找;|SerialContextProviderImpl::lookup java:global/portal-1.1.1/backend-1.1.1-SNAPSHOT/mail/MailSession |#] .GlassfishNamingManagerImpl;MethodName=查找|GlassfishNamingManager中的serialcontext..null |#] .GlassfishNamingManagerImpl;MethodName=查找|GlassfishNamingManager:查找名称:java:module/mail/MailSession |#] .GlassfishNamingManagerImpl;MethodName=BindTonNameSpace|naming.bind绑定名称:java:module/mail/MailSession |#]

错误场景(自定义模块名称): 添加自定义模块名(如上面提到的ejb.jar.xml所示)将导致无限循环查找失败

相关的查找日志如下所示:

FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.SerialContext;MethodName=查找|SerialContext=>lookup相对名称:java:module/mail/MailSession |#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.JavaURLContext;MethodName=查找|在javaURLContext.lookup中,name=java:module/mail/MailSession serialcontext…null |#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.SerialContext;MethodName=查找|SerialContext=>lookup(java:global/private-ear-1.2.0-SNAPSHOT/backend/mail/MailSession)| FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.SerialContext;MethodName=查找|SerialContext=>查找相对名称:java:global/private-ear-1.2.0-SNAPSHOT/backend/mail/MailSession |#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.SerialContextProviderImpl;MethodName=查找;|SerialContextProviderImpl::lookup java:global/private-ear-1.2.0-SNAPSHOT/backend/mail/MailSession |#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl;MethodName=查找|GlassfishNamingManager中的serialcontext..null |#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl;MethodName=查找|GlassfishNamingManager:查找名称:java:module/mail/MailSession |#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.SerialContext;MethodName=查找|SerialContext=>lookup(java:module/mail/MailSession)|#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.SerialContext;MethodName=查找|SerialContext=>lookup相对名称:java:module/mail/MailSession |#] FINE | glassfish3.1.1 | com.sun.enterprise.naming | u ThreadID=23_ThreadName=Thread-2;ClassName=com.sun.enterprise.naming.impl.JavaURLContext;MethodName=查找|在javaURLContext.lookup中,name=java:module/mai
<mail-resource enabled="true" host="${mail.host}"
    jndi-name="mail/MailSession" object-type="user"
    store-protocol="imap" store-protocol-class="com.sun.mail.imap.IMAPStore"
    transport-protocol="smtp" transport-protocol-class="com.sun.mail.smtp.SMTPTransport"
    user="mail@address.de" from="mail@address.de">
    <property name="mail-smtp-auth" value="true"/>
    <property name="mail-smtp-password" value="${password}" />
</mail-resource>
...
@Resource(name = "java:module/mail/MailSession")
private Session mySession;
...
<module-name>backend</module-name>
private-ear-1.2.0-SNAPSHOT  <ear, web, ejb>
    private-frontend-1.2.0-SNAPSHOT.war  <WebModule>
    backend-1.2.0-SNAPSHOT.jar           <EJBModule>
        java:module/mail/MailSession <MailResource>