【问题标题】:Glassfish open source edition 3.0.1 HTTP Status 500, EJBExceptionGlassfish 开源版 3.0.1 HTTP 状态 500,EJBException
【发布时间】:2012-08-14 16:48:24
【问题描述】:

我正在使用this 教程来学习 JavaEE Web 应用程序。我在 windows xp 上为 Java EE、objectdb-2.4.2_02、glassfish 3.1.2 使用 eclipse indigo。当我运行程序时,嵌入式浏览器会打开带有此状态的页面并打印 javax.ejb.EJBException。我用谷歌搜索,但我没有找到这个问题的答案。

   HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception 
javax.ejb.EJBException

note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1.2.2 logs.

--------------------------------------------------------------------------------

GlassFish Server Open Source Edition 3.1.2.2

服务器日志文件:

          [#|2012-08-23T15:51:38.979+0300|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=21;_ThreadName=Thread-2;|StandardWrapperValve[GuestServlet]: PWC1406: Servlet.service() for servlet GuestServlet threw exception
javax.ejb.EJBException
    at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215)
    at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89)
    at $Proxy130.getAllGuests(Unknown Source)
    at guest.__EJB31_Generated__GuestDao__Intf____Bean__.getAllGuests(Unknown Source)
    at guest.GuestServlet.doGet(GuestServlet.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName GuestbookPU
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:132)
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:173)
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:467)
    at guest.GuestDao.getAllGuests(GuestDao.java:22)
    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:601)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    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:601)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    ... 30 more
|#]

【问题讨论】:

  • 两件事情:1) 3.0.1 版本已经很老了,而且已知有点问题。切换到当前的 3.1.2 再试一次。 2) 最有趣的是看到堆栈跟踪错误消息提到。它将位于域目录的 log 子目录中名为 server.log 的文件中。它返回 500 错误代码这一事实仅表示处理过程中的错误,而不是发生的错误类型,实际上可能有 100 种导致此问题的原因。
  • 我把 Glassfish 的服务器日志文件放在 OP 中
  • 异常显示您使用的是 3.0.1,但日志显示您使用的是 3.1.2。您使用的具体版本是什么?
  • 甚至没有关于部署的信息,所以我认为这不是您正在试验的域或服务器......
  • @fvu:现在是 3.1.2。我在 OP 中添加了日志文件。实际上eclipse自动下载了一台服务器,所以有两台服务器,一台JavaEE和其他由eclipse安装。现在我配置了一个 JavaEE jdk 自带的。

标签: eclipse jakarta-ee jpa glassfish objectdb


【解决方案1】:

只是部分答案...

关键问题是

 Caused by: java.lang.IllegalStateException: 
     Unable to retrieve EntityManagerFactory for unitName null

这意味着它无法确定应该在 GuestDAO 中使用哪个 PersistenceUnit。这可能表明GF在项目中找不到您的persistence.xml文件,请仔细检查the creation of persistence.xml as described是否顺利,以及persistence.xml是否在部署的项目中存在ONCE和ONCE(曾经的部分是因为我注意到Eclipselink在一个项目中遇到多个persistence.xml文件时可能会很困惑。如果一切正常,请将单元名称添加到GuestsDAO中的@PersistenceContext注解中,如下所示

@PersistenceContext(unitName="GuestbookPU")
private EntityManager em;

如果所有这些都失败了,请告诉我。

【讨论】:

  • 我正在使用 Eclipse。只有一个 persistence.xml 文件。我在 ejb 文件中编辑了注释并运行程序。现在它在浏览器窗口中给出 404 错误消息“描述:请求的资源 () 不可用”。我更新了服务器日志。
  • 您要加载哪个页面?看起来您正在尝试加载默认网页( yourcomputer;port/Guestbook ),但该页面未在项目中定义。 yourcomputer;port/Guestbook/GuestServlet 应该可以工作。
  • 其实我在运行程序时出错了,我是在项目文件夹上右键运行它,而不是通过运行Servlet来运行它。它仍然引发相同的错误,即带有 ejb 异常的状态 500。我更新了堆栈跟踪。
【解决方案2】:

根据我的经验,这是某种数据库连接问题。最好的办法是登录到服务器并 PING 数据库以查看它是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 2011-01-01
    • 2014-01-08
    • 2012-12-04
    • 2017-11-01
    • 2016-05-29
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多