2013-08-21 28 views
1

我尝试使用EJB和JSF Web模块部署Java Enterprise Web应用程序时遇到问题。 申请成功建立,但是当它被部署到GlassFish服务器4,我得到这个例外Glassfish javax.ejb.EJBException

javax.ejb.EJBException 
at com.sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:748) 
at com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:698) 
at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:503) 
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4475) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2009) 
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979) 
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220) 
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
at com.sun.proxy.$Proxy325.vratiSveRelacije(Unknown Source) 
at kontroler.KontrolerPrevoznika.vratiSveRelacije(KontrolerPrevoznika.java:275) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at javax.el.ELUtil.invokeMethod(ELUtil.java:326) 
at javax.el.BeanELResolver.invoke(BeanELResolver.java:536) 
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:136) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:204) 

有什么建议?

回答

1

我最近和EJB一起工作过,我可以告诉你检查你设置的连接到EJB的JNDI。

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); 
props.setProperty("org.omg.CORBA.ORBInitialHost", "*hostname*"); 
props.setProperty("org.omg.CORBA.ORBInitialPort", "*3700*");//default port 
InitialContext ctx = new InitialContext(props); 
FirstBeanRemote bean = (FirstBeanRemote) ctx.lookup("java:global/*EARNAME/EJBJARNAME*/FirstBean!*fullyqualifiedpackage*.FirstBeanRemote"); 
  1. 最重要的是检查,如果你设置 ctx.lookup说法。

  2. 检查EJB jar是否正确部署。

  3. 我不知道,如果它的一个bug,但在Eclipse和Glassfish中,EJB不能有外部罐子

+0

对不起,如果这是一个愚蠢的问题,但这个代码应该在哪里?我真的是一个初学java ee –

+1

好吧,我想你有两个项目,一个客户端或消费者(可以是一个Web项目或一个桌面应用程序)和一个EJB项目,这个代码应该在客户端或消费者端。为什么?因为此代码查找客户端以外的连接 – Jessai

+0

我在企业应用程序内部拥有JSF和EJB模块,但我不知道该如何放置代码。它应该在配置文件还是在源码包或其他地方。 –

0

我解决了这个问题。我异常的样子:

javax.ejb.EJBException 
     at com.sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:748) 
     at com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:698) 
     at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:503) 
     at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4566) 

而且因为我的EJB方法抛出由应用程序作为外部库和库的.jar使用其他.jar文件中声明的例外是在域1/lib目录下。

尝试从EJB方法抛出另一个异常,您将看到结果。

+0

我收到相同的错误。你能告诉我你怎么解决这个错误。 –

相关问题