Eclipse Glassfish开源版本3.0.1 HTTP状态500,EJBException

Eclipse Glassfish开源版本3.0.1 HTTP状态500,EJBException,eclipse,jakarta-ee,jpa,glassfish,objectdb,Eclipse,Jakarta Ee,Jpa,Glassfish,Objectdb,我正在使用教程学习JavaEE web应用程序。我正在WindowsXP上使用EclipseIndigo for JavaEE、objectdb-2.4.202和glassfish 3.1.2。当我运行该程序时,嵌入式浏览器会打开此状态的页面&打印javax.ejb.EJBException。我用谷歌搜索了一下,但没有找到这个问题的答案 HTTP Status 500 - ---------------------------------------------------------

我正在使用教程学习JavaEE web应用程序。我正在WindowsXP上使用EclipseIndigo for JavaEE、objectdb-2.4.202和glassfish 3.1.2。当我运行该程序时,嵌入式浏览器会打开此状态的页面&打印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
|#]

只有部分答案

关键问题是

 Caused by: java.lang.IllegalStateException: 
     Unable to retrieve EntityManagerFactory for unitName null
这意味着它无法确定应该在GuestDAO中使用哪个PersistenceUnit。这可能表示GF在项目中找不到persistence.xml文件,请再次检查是否运行良好,以及persistence.xml是否在部署的项目中存在一次且仅存在一次(这一部分是因为我注意到Eclipselink在一个项目中遇到多个persistence.xml文件时会变得非常混乱。如果一切正常,请将单元名称添加到GuestsDAO中的
@PersistenceContext
注释中,如下所示

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

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

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

两件事:1)版本3.0.1已经很旧了,并且已知有点问题。切换到当前的3.1.2,然后重试。2)最有趣的是看到错误消息提到的堆栈跟踪。它将位于域目录的log子目录中名为server.log的文件中。它返回500个错误代码的事实只是表明在处理过程中发生了错误,而不是发生了什么类型的错误,这个问题的原因可能有100多种。我将Glassfish的服务器日志文件放在OPF中。异常显示您使用的是3.0.1,但日志显示您使用的是3.1.2。你到底使用了什么版本?甚至没有关于部署的信息,所以我认为这不是你正在试验的域或服务器…@fvu:3.1.2。我在OP中添加了日志文件。实际上eclipse自动下载了一台服务器,所以有两台服务器,一台JavaEE,另一台由eclipse安装。现在我配置了JavaEEJDK附带的一个。只有一个persistence.xml文件。我在ejb文件中编辑了注释并运行程序。现在它在浏览器窗口中给出404错误消息“description:请求的资源()不可用”。我更新了服务器日志。您要加载哪个页面?看起来您正在尝试加载默认网页(您的计算机;端口/留言簿),但该网页未在项目中定义。你的电脑;port/Guestbook/GuestServlet应该可以工作。实际上,我在运行程序时犯了一个错误,我右键单击项目文件夹来运行它,而不是通过运行Servlet来运行它。它仍在引发相同的错误,即状态500,ejb异常。我更新了堆栈跟踪。