【发布时间】:2010-12-09 18:18:17
【问题描述】:
我有一个这样定义的 EJB:
package com.foo;
@Stateless (mappedName="HelloWorld")
public class HelloWorldBean implements HelloWorld, HelloWorldLocal
....
当它部署到 Weblogic (WL) 时,它的名称为 myBean。我不确定这是否重要。
我尝试使用以下代码调用 bean:
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
ic = new InitialContext(ht);
tp = (HelloWorld) ic.lookup("HelloWorld#com.foo.HelloWorldBean");
有人知道我为什么会收到以下错误吗?
javax.naming.NameNotFoundException: While trying to lookup 'HelloWorld#com.foo.HelloWorldBean' didn't find subcontext 'HelloWorld#com'.
Resolved '' [Root exception is javax.naming.NameNotFoundException: While trying
to lookup 'HelloWorld#com.foo.HelloWorldBean' didn't find
subcontext 'HelloWorld#com'. Resolved '']; remaining name 'HelloWorld#com/foo/HelloWorldBean'
【问题讨论】:
-
你的bean有多个远程业务接口吗?
-
是的,HelloWorld 界面。对不起蹩脚的名字。我正在尝试熟悉 EJB。
-
这只是一个,不是多个 :) 无论如何我都回答了这两种情况。
-
不确定您是否收到通知,所以我将答案粘贴在这里:在@Stateless 中,@name() 是 ejb-jar.xml 中
的注释等效项。如果未指定 @Stateless name(),则默认为非限定 bean 类名。所以我不知道“myBean”是从哪里来的。那么,是的,您的 EJB 绝对应该在 JNDI 树中显示为“HelloWorld”(您指定的名称)。您确定部署顺利并且您的 EJB 已部署? -
是的,看来我的 bean 部署正确。 WL 没有错误,管理控制台中的“部署”页面显示“库”类型的“MyBean”部署状态为“活动”。
标签: java ejb-3.0 weblogic weblogic-10.x stateless-session-bean