JAVA 在 SerialContext 中查找 bean 名称失败
JAVA Lookup Failed for bean name in SerialContext
场景如下:
我正在编写 java 企业应用程序
首先我从数据库 table "Derby" 创建了实体 类 然后我在 java 库项目中创建了一个助手 类 然后我创建了一个会话bean 在企业应用程序 bean 中,并在 java 库项目
中创建了一个 bean facade remote
这里是会话 bean 的重要代码部分:
@Stateless(mappedName = "officefacade")
public class OfficeFacade implements OwnerFacadeRemote {
@PersistenceContext
private EntityManager em;
然后我编写了一个简单的客户端来测试方法
客户代码:
public class Client {
private OwnerFacadeRemote request;
public static void main(String[] args) {
// TODO code application logic here
Client x = new Client();
}
public Object getEJBBean(String beanName)
{
try
{
InitialContext ctx = new InitialContext();
return ctx.lookup(beanName);
}
catch(Exception ex)
{
System.err.println("Error : " + ex.getMessage() + "\n\n\n");
}
return null;
}
private void insert()
{
request.createOwner(new OwnerDetails("1","M","444","M","afcdv"));
}
private void display()
{
List<OwnerDetails> xx = request.getAllOwner();
}
public Client()
{
request = (OwnerFacadeRemote) getEJBBean("officefacade");
insert();
display();
}
问题是每次我 运行 客户端都会收到 'officefacade'
的查找失败的错误
这里是完整的错误文本
> Error : Lookup failed for 'officefacade' in SerialContext[myEnv{java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFac tory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl}
如何确保映射名称可用以及如何修复它以便可以通过查找找到它,即使这意味着在串行上下文中对映射名称进行硬编码"i don't know what this is but it seem as the problem is coming from it"
非常感谢任何帮助,并提前感谢您的努力,我很确定一切都已正确实施,因此这是一个与映射名称相关的问题
开发工具是netbeans 8.0.2和glassfish 4.1
尝试将 @Stateless(mappedName = "officefacade")
替换为 @Stateless(name = "officefacade")
,InitialContext
的 lookup
方法似乎适用于 bean name
有关详细信息,请参阅相关 JavaDoc section and the related method
更新
刚刚查看了关于此主题的 Oracle's documentation - 根据那里提供的信息,您可能需要实际查找 "java:module/officefacade"
而不是纯粹的 "officefacade"
,具体取决于 bean 上下文。
场景如下:
我正在编写 java 企业应用程序
首先我从数据库 table "Derby" 创建了实体 类 然后我在 java 库项目中创建了一个助手 类 然后我创建了一个会话bean 在企业应用程序 bean 中,并在 java 库项目
中创建了一个 bean facade remote这里是会话 bean 的重要代码部分:
@Stateless(mappedName = "officefacade")
public class OfficeFacade implements OwnerFacadeRemote {
@PersistenceContext
private EntityManager em;
然后我编写了一个简单的客户端来测试方法
客户代码:
public class Client {
private OwnerFacadeRemote request;
public static void main(String[] args) {
// TODO code application logic here
Client x = new Client();
}
public Object getEJBBean(String beanName)
{
try
{
InitialContext ctx = new InitialContext();
return ctx.lookup(beanName);
}
catch(Exception ex)
{
System.err.println("Error : " + ex.getMessage() + "\n\n\n");
}
return null;
}
private void insert()
{
request.createOwner(new OwnerDetails("1","M","444","M","afcdv"));
}
private void display()
{
List<OwnerDetails> xx = request.getAllOwner();
}
public Client()
{
request = (OwnerFacadeRemote) getEJBBean("officefacade");
insert();
display();
}
问题是每次我 运行 客户端都会收到 'officefacade'
的查找失败的错误这里是完整的错误文本
> Error : Lookup failed for 'officefacade' in SerialContext[myEnv{java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFac tory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl}
如何确保映射名称可用以及如何修复它以便可以通过查找找到它,即使这意味着在串行上下文中对映射名称进行硬编码"i don't know what this is but it seem as the problem is coming from it"
非常感谢任何帮助,并提前感谢您的努力,我很确定一切都已正确实施,因此这是一个与映射名称相关的问题
开发工具是netbeans 8.0.2和glassfish 4.1
尝试将 @Stateless(mappedName = "officefacade")
替换为 @Stateless(name = "officefacade")
,InitialContext
的 lookup
方法似乎适用于 bean name
有关详细信息,请参阅相关 JavaDoc section and the related method
更新
刚刚查看了关于此主题的 Oracle's documentation - 根据那里提供的信息,您可能需要实际查找 "java:module/officefacade"
而不是纯粹的 "officefacade"
,具体取决于 bean 上下文。