关于使用Wildfly 18进行JNDI查找,我面临一个相当奇怪的行为。我有一个简单的EJB:
package com.getronics.ejb;
import javax.ejb.Remote;
import javax.ejb.Local;
import javax.ejb.Stateless;
@Stateless
@Local(ICalculadoraLocal.class)
public class CalculadoraBean implements ICalculadoraLocal {
public int suma(int a, int b){
return a+b;
}
}
使用简单的界面:
package com.getronics.ejb;
public interface ICalculadoraLocal{
int suma(int a, int b);
}
还有一个简单的JSP页面可以检查出来:
<html>
<body>
<%@ page import="java.util.Hashtable,javax.naming.*,com.getronics.ejb.*" %>
request: <%= request.getRequestURI()%><br>
<%
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
ICalculadoraLocal calculadora = (ICalculadoraLocal)context.lookup("java:app/ejb-0.0.0.0.0.1/CalculadoraBean!com.getronics.ejb.ICalculadoraLocal");
int suma = calculadora.suma(2,2);
%>
context: <%= context%></br>
2+2= <%=suma%>
</body>
</html>
这工作正常:
request: /ejb/index.jsp
context: javax.naming.InitialContext@3e532295
2+2= 4
但是,当我尝试使用线程时,如下所示:
<html>
<body>
<%@ page import="java.util.Hashtable,javax.naming.*,com.getronics.ejb.*" %>
request: <%= request.getRequestURI()%><br>
<%
new Thread() {
public void run() {
try {
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
ICalculadoraLocal calculadora = (ICalculadoraLocal)context.lookup("java:app/ejb-0.0.0.0.0.1/CalculadoraBean!com.getronics.ejb.ICalculadoraLocal");
int suma = calculadora.suma(2,2);
System.out.println("suma: " + suma);
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
%>
</body>
</html>
它抛出一个NameNotFoundException:
javax.naming.NameNotFoundException: java:app/ejb-0.0.0.0.0.1/CalculadoraBean!com.getronics.ejb.ICalculadoraLocal
关于为何会发生这种情况的任何想法?
问题来源:Stack Overflow
似乎使用“ global”而不是“ app”可以使其工作:
ICalculadoraLocal calculadora = (ICalculadoraLocal)context.lookup("java:global/ear-0.0.0.0.0.1/ejb-0.0.0.0.0.1/CalculadoraBean!com.getronics.ejb.ICalculadoraLocal");
原因似乎是“ Napp查找”“ app”,“ module”和“ comp”在规范中不适用于那些线程。
您可以检查以下链接以获取更多信息: https://developer.jboss.org/thread/173179 https://lists.jboss.org/pipermail/jboss-as7-dev/2011-June/002292.html
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。