我正在开发一个需要在gf服务器上远程访问bean的应用程序客户端。从阅读开始我认为我应该可以使用注射注释,但这对我不起作用。然后我切换到使用InitialContext查找我的bean的映射名称,但我也无法使其工作。我在这里看了几个线程,据我所知,我需要包含所有需要的jar文件,并将EJB项目添加到我的appCLients路径中。这在Eclipse中或从服务器管理页面单击启动都不起作用。
EJB项目中的My Bean
/**
* Session Bean implementation class MazeBean
*/
@Stateless(mappedName = "mazes")
@Remote
public class MazeBean
{
我试图访问的课程(不是主要的,我认为,这就是为什么我不能使用注射)
public class MazeBuilder
{
private MazeBean mazeBean;
Maze maze;
public MazeBuilder()
{
Context ctx;
try
{
ctx = new InitialContext();
mazeBean = (MazeBean)ctx.lookup("java:comp/env/mazes");
} catch (NamingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
maze = mazeBean.getMaze(1); (line 31)
mazeBean.regenerateMaze(maze);
}
}
在Eclipse中运行时遇到的异常
javax.naming.NamingException: Lookup failed for 'java:comp/env/mazes' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: No object bound for java:comp/env/mazes [Root exception is java.lang.NullPointerException]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at mazeBuilder.MazeBuilder.<init>(MazeBuilder.java:23)
at Main.main(Main.java:16)
Caused by: javax.naming.NameNotFoundException: No object bound for java:comp/env/mazes [Root exception is java.lang.NullPointerException]
at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:229)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:471)
... 4 more
Caused by: java.lang.NullPointerException
at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:159)
... 5 more
Exception in thread "main" java.lang.NullPointerException
at mazeBuilder.MazeBuilder.<init>(MazeBuilder.java:31)
at Main.main(Main.java:16)
现在它说没有该名称的对象所以我显然没有正确设置它。我的印象是注释是一种合法的定义方法,所以我的bean的mappedName属性应该允许我找到它。还有什么方法可以让豆子被发现?
Eclipse Kepler,GF4,MySql 5.5.31,EclipseLink 2.5
我在main中尝试了两种方法并获得相同的异常
答案 0 :(得分:0)
我现在已经解决了这个问题,感谢Ajan,在更正全局名称后,它正在glassfish lib目录中添加gf-client.jar和appserv-rt.jar。
ps - 如何将问题设置为已解决?