当前位置: 首页 > 知识库问答 >
问题:

运行在JBoss7上的EJB3.1的JNDI名称

经正祥
2023-03-14

我试图在JBoss7上运行这个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);
    }
}

第一个错误是:身份验证失败。因此,我在服务器:usr: test,pwd: test123中创建了一个用于“应用领域”的“管理用户”用户,然后修改getInvalContext()如下所示:

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。命名。NameNotFoundException:?????????????

所以,我想问:我必须用什么名字来查找我的计算器bean?

谢谢

共有1个答案

许法
2023-03-14

1) 通过使用全局JNDI名称。

java:global/CalculadoraProject/Calculator!demo.CalculatorRemote

2) 通过使用ejbjndi名称。如果仍然出现错误,请稍微使用斜杠。如果您具有所需的libs并且在代码的其他位置没有语法错误,则应该是正确的。

ejb:/CalculadoraProject/Calculator!demo.CalculatorRemote

JNDI结构
对于无状态bean:

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

值得一读的链接:
通过JNDI-EJB客户端API或远程命名项目,使用JNDI
https://docs.jboss.org/author/display/AS71/RemoteEJB调用从远程客户端https://docs.jboss.org/author/display/AS71/EJB调用

希望这有所帮助:)

 类似资料:
  • 我正在JBoss7.1上部署一个JavaEE应用程序。1,当部署会话bean时,JBoss会打印一条消息,说明它已经创建了多个JNDI绑定。大概是这样的: EJB和EJB之间有一点不同,但这是一般的想法。 我对这里发生的事情感到困惑。为什么有这么多?这些JNDI绑定之间有区别吗?如果有,应该在什么时候使用它们?

  • 我对J2EE是新手。我试图连接到使用JNDI在jboss AS 7中创建的数据源。 我使用Jboss作为7独立服务器来部署我的项目newdb.war。我已经在Jboss AS 7中创建了休闲数据源java:Jboss/datasources/oracleds(这是我的JNDI名称),并成功连接到Oracle数据库。 我正在使用oracle数据库存储我的sql表。 我在Eclipse中得到了休耕错误

  • 我正在设计一个JApplet,基本上这个小程序将允许用户绘制一个二次方程图,并插入x轴和y轴的范围。但要达到这一点,还有很多工作要做。 我还在设计界面的阶段。 以下是我的代码:

  • 我有一个遗留的 EJB 2 应用程序,我将其部署到 Websphere 8.5 中。该应用程序具有依赖关系,这些依赖关系定义了与数据源的 JNDI 绑定.xml和 /元.xml数据源.xml 我不允许更改这些依赖项中的代码,也不能更改Websphere的配置。但我可以更改jar文件中的配置文件。 我想在我的应用程序中覆盖有效的JNDI绑定。是否可以定义一个将添加到Ear的文件来覆盖这些绑定? ej

  • 我正在开发一个Java webapp,试图结合以下技术: Java EE 6 CDI JSF 2 EJB 3.1 Spring Security性 我使用@Stateless EJB bean来完成要完成的实际工作。 我只需要像jSessionCookie(由容器管理)、内部用户名和一些其他内部ID这样的少量会话信息。现在,我想知道把这个会话信息放在哪里,这样我就可以在JSF的支持bean中访问它

  • 问题内容: 我对此设置有问题,甚至无法查看日志。 这是我的 EJB: 的: Maven pom: 问题答案: 您具有无效的bean类型作为@DependsOn的属性。DependsOn用于表达两个Singleton会话Bean之间的依赖性,而不是Singleton和Stateless之间的依赖性。您应该将SchedulerEJB更改为Singleton或删除依赖项。 如果您决定将Scheduler