我试图在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) 通过使用全局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