2013-08-21 66 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

我收到相同的錯誤。你能告訴我你怎麼解決這個錯誤。 –

相關問題