1

我在尝试使用 EJB 和 JSF Web 模块部署 Java Enterprise Web 应用程序时遇到问题。应用程序构建成功,但是当它部署到 Glassfish 4 服务器时,我得到了这个异常

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)

有什么建议么?

4

3 回答 3

1

我最近与 EJB 合作过,我可以告诉您检查您设置的 JNDI 以连接到 EJB。

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. 我不知道它是否是一个错误,但在 Eclipse 和 Glassfish 中,EJB 不能有外部 jar

于 2013-08-21T20:45:29.383 回答
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 文件被应用程序用作外部库,并且该 .jar 库位于 domain1/lib 目录中。

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

于 2015-10-27T01:13:11.797 回答
0

我遇到了同样的问题,结果发现原因是在 Payara/Glassfish 中,而不是在应用程序中。管理员门户 - http://localhost:4848/突然要求提供登录凭据,以前不是这样。设置一个新的域 / glassfish 实例为我解决了这个问题。可能并不适合所有人,但我希望它可以为你们中的一些人节省一些时间。

于 2018-09-19T22:34:13.590 回答