[英]JNDI name for EJB 3.1 running on JBoss 7
我试图在JBoss 7上运行此EJB示例,但它总是抛出NameNotFoundException。
我尝试测试的EJB是:计算器。 当我在JBoss 7上部署它时,在服务器控制台中显示以下几行:
java:global/CalculadoraProject/Calculator!demo.CalculatorRemote
java:app/CalculadoraProject/Calculator!demo.CalculatorRemote
java:module/Calculator!demo.CalculatorRemote
java:jboss/exported/CalculadoraProject/Calculator!demo.CalculatorRemote
java:global/CalculadoraProject/Calculator
java:app/CalculadoraProject/Calculator
java:module/Calculator
计算器bean代码是这样的:
package demo;
import javax.ejb.Stateless;
@Stateless
public class Calculator implements CalculatorRemote
{
@Override
public double sum(double a, double b)
{
return a+b;
}
}
远程接口代码为:
package demo;
import javax.ejb.Remote;
@Remote
public interface CalculatorRemote
{
public double sum(double a,double b);
}
必须通过JNDI连接EJB的主要代码是:
package demo;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Test
{
public static void main(String[] args) throws Exception
{
Context ctx=getInitialContext();
String jndiName="?????????????";
CalculatorRemote c = (CalculatorRemote)ctx.lookup(jndiName);
System.out.println( c.sum(2,2) );
}
private static Context getInitialContext() throws Exception
{
Properties p=new Properties();
p.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory");
p.put("java.naming.provider.url","remote://localhost:4447");
return new InitialContext(p);
}
}
第一个错误是:身份验证失败。 因此,我为服务器中的“ ApplicationRealm”创建了一个“管理用户”用户:usr:test,pwd:test123,然后修改getInitialContext()如下所示:
Properties p=new Properties();
p.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory");
p.put("java.naming.provider.url","remote://localhost:4447");
p.put(Context.SECURITY_PRINCIPAL,"test");
p.put(Context.SECURITY_CREDENTIALS,"test123");
下一个错误是:javax.naming.NameNotFoundException:?????????????
因此,我想问:查找计算器bean必须使用什么名称?
谢谢!
1)通过使用全局JNDI名称。
java:global/CalculadoraProject/Calculator!demo.CalculatorRemote
2)通过使用ejb JNDI名称。 如果仍然出现错误,请稍加斜线播放。 如果您具有所需的库并且在其他代码位置没有语法错误,则应该是正确的。
ejb:/CalculadoraProject/Calculator!demo.CalculatorRemote
JNDI结构
对于无状态豆:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
对于有状态的bean:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
值得阅读的链接:
https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project
希望这有帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.