无法修复java.lang.IllegalStateException:无法为unitName检索EntityManagerFactory [英] Unable to fix java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName

查看:211
本文介绍了无法修复java.lang.IllegalStateException:无法为unitName检索EntityManagerFactory的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过一个项目来学习JSP和servlet。我的目标不是专注于JPA,ORM和持久化
或甚至EJB现在。所以,请不要告诉我阅读教程或书籍。不幸的是,我不应该使用
来使用SQL查询与数据库进行交互。相反,我使用预先编写的JPA代码来管理持久性
,而我专注于jsp和servlet。



当我运行我的项目时,我收到错误 - java.lang.IllegalStateException:无法为unitName AffableBeanPU检索EntityManagerFactory。
我的项目位于 - https://github.com/ double-whammy / affablebean.git
下载为zip按钮在右下角。



注意 - 我的在META-INF文件夹中的persistence.xml文件。我再次检查并修建了我的项目。
可以排除这个原因。



我已经google了,没有一个解决方案有帮助。如何解决这个错误?

  MyProject 
|
| __java(src文件夹)
| |
| | __controller(package)
| | | __ControllerServlet.java
| |
| | __entity(这里的实体类)
| | __session(每个实体类的外观类)
|
|
| __WebContent
|
| __WEB-INF
|
| __view
| | __category.jsp
| |
| | etc ...
|
| __index.jsp

异常:


$ b $时间|信息:重定向到/index.jsf
时间|信息:管理控制台:初始化会话属性...
时间|警告:EJB5184:在EJB CategoryFacade调用期间发生系统异常,
方法:public java.util.List session.AbstractFacade.findAll()
Time | Warning:javax.ejb.EJBException
at com。 sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:748)
在com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:698)
在com.sun.ejb。 container.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:503)
在com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4475)
在com.sun.ejb.containers.BaseContainer。 postInvoke(BaseContainer.java:2009)
在com.sun.ejb.containers.BaseContainer.postInvoke(BaseConta iner.java:1979)
在com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)
在com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java: 88)
at com.sun.proxy $ Proxy193.findAll(Unknown Source)
在会话中.__ EJB31_Generated__CategoryFacade__Intf ____ Bean __。findAll(Unknown Source)
在controller.ControllerServlet.init(ControllerServlet.java: 31)
在javax.servlet.GenericServlet.init(GenericServlet.java:244)
在org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1583)
在org .apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1212)
etc ............................ ....................... etc ...
在java.lang.Thread.run(Thread.java:745)

导致:java.lang.IllegalStateException:无法检索单位名称的EntityManagerFactory AffableBeanPU
在com.sun.enterprise.container.common.impl.Enti在com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:171)中的
(com.un.enterprise.container)上的
common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:834)
在session.AbstractFacade.findAll(AbstractFacade.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
etc ............................. ........................ ...
在com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
... 33更多

时间|严重:WebModule [/ AffableBean] StandardWrapper.Throwable
javax.ejb.EJBException
在com.sun.ejb.containers。 EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:748)
在com.sun.ejb.containers.EJBContainerTransactionManager.completeNe wTx(EJBContainerTransactionManager.java:698)
在com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:503)
etc .............. ............................................
在会议上.__ EJB31_Generated__CategoryFacade__Intf____Bean__。 findAll(Unknown Source)
在controller.ControllerServlet.init(ControllerServlet.java:31)
在javax.servlet.GenericServlet.init(GenericServlet.java:244)
在org.apache。 catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1583)
在org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1212)
etc ........ ...........................................等...
在java.lang.Thread.run(Thread.java:745)

导致:java.lang.IllegalStateException:无法检索单位名称的EntityManagerFactory AffableBeanPU
在com.sun.enterprise comcon.en tainer.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:171)
在com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:834)
在会话。 AbstractFacade.findAll(AbstractFacade.java:41)
etc ................................... ................ etc ...
在com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
... 33更多

时间|警告:StandardWrapperValve [ControllerServlet]:为Servlet分配Servlet的异常
java.lang.IllegalStateException:无法在com.sun中为unitName AffableBeanPU
检索EntityManagerFactory。 com.un.Manager.aspx com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityM anagerWrapper.java:834)
在session.AbstractFacade.findAll(AbstractFacade.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
etc ...... .............................................等...

Persistence.xml:

 <?xml version =1.0encoding =UTF-8?> 
< persistence version =2.0
xmlns =http://java.sun.com/xml/ns/persistencexmlns:xsi =http://www.w3.org/ 2001 / XMLSchema-instance
xsi:schemaLocation =http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd >
< persistence-unit name =AffableBeanPU
transaction-type =JTA>
< jta-data-source> jdbc / affablebean< / jta-data-source>
<属性>
< property name =eclipselink.logging.levelvalue =FINEST/>
< / properties>
< / persistence-unit>
< / persistence>


解决方案

/ META-INF /persistence.xml 必须最终在运行时类路径中,而不是Web资源。所以,您需要将其放在Java源文件夹中,而不是在Web内容文件夹中。 persistence.xml 与Web资源无关,而与Java bean无关。



移动它: p>

  MyProject 
| - java(src文件夹)
| | - 控制器
| | `--ControllerServlet.java
| | - entity
| | - session
| ` - META-INF
| ` - persistence.xml< - 这里。
`--WebContent
` - WEB-INF
| - 查看
| | - category.jsp
| ` - etc ..
` - index.jsp

/ WEB-INF / classes 内生成具有 /META-INF/persistence.xml 的正确的WAR结构。您似乎正在使用Eclipse,您也可以通过在项目属性中选择JPA facet来实现此目的。





这样Eclipse将生成一个 persistence.xml 在正确的地方。




I am trying to learn JSP and servlets by making a project. My goal is NOT to focus on JPA, ORM and persistence or even EJB for now. So, please do not tell me to read a tutorial or book on that. Unfortunately, I am not supposed to use SQL queries to interact with the database. Instead, I used pre-written JPA code to manage the persistence while I focus on jsp and servlets.

When I run my project, I get the error - java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName AffableBeanPU. My project is located at - https://github.com/double-whammy/affablebean.git Download as zip button is on bottom right corner.

Note - My persistence.xml file IS inside the META-INF folder. I checked and built my project again. So that reason can be ruled out.

I googled and none of the solutions were of help. How do I fix this error ?

MyProject
|
|__java (src folder)
|    |
|    |__controller (package)
|    |   |__ControllerServlet.java
|    |
|    |__entity (entity classes here) 
|    |__session (facade classes for each entity class)
|
|   
|__WebContent
    |
    |__WEB-INF
         |
         |__view
         |    |__category.jsp        
         |    |
         |    |etc...
         |
         |__index.jsp

Exception:

Time|Info: Redirecting to /index.jsf
Time|Info: Admin Console: Initializing Session Attributes...
Time|Warning: EJB5184:A system exception occurred during an invocation on EJB CategoryFacade, 
method: public java.util.List session.AbstractFacade.findAll()
Time|Warning: 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.$Proxy193.findAll(Unknown Source)
at session.__EJB31_Generated__CategoryFacade__Intf____Bean__.findAll(Unknown Source)
at controller.ControllerServlet.init(ControllerServlet.java:31)
at javax.servlet.GenericServlet.init(GenericServlet.java:244)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1583)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1212)
etc ................................................... etc...
at java.lang.Thread.run(Thread.java:745) 

Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName AffableBeanPU
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:138)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:171)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:834)
at session.AbstractFacade.findAll(AbstractFacade.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
etc ................................................... etc...
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
... 33 more

Time|Severe: WebModule[/AffableBean]StandardWrapper.Throwable
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)
etc ................................................... etc...
at session.__EJB31_Generated__CategoryFacade__Intf____Bean__.findAll(Unknown Source)
at controller.ControllerServlet.init(ControllerServlet.java:31)
at javax.servlet.GenericServlet.init(GenericServlet.java:244)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1583)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1212)
etc ................................................... etc...
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName AffableBeanPU
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:138)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:171)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:834)
at session.AbstractFacade.findAll(AbstractFacade.java:41)
etc ................................................... etc...
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
... 33 more

Time|Warning: StandardWrapperValve[ControllerServlet]: Allocate exception for servlet ControllerServlet
java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName AffableBeanPU
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:138)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:171)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:834)
at session.AbstractFacade.findAll(AbstractFacade.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
etc ................................................... etc...

Persistence.xml :

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="AffableBeanPU"
    transaction-type="JTA">
    <jta-data-source>jdbc/affablebean</jta-data-source>
    <properties>
        <property name="eclipselink.logging.level" value="FINEST" />
    </properties>
</persistence-unit>
</persistence>

解决方案

The /META-INF/persistence.xml must end up in runtime classpath, not in web resources. So, you need to put it in Java source folder, not in Web content folder. The persistence.xml is not related to web resources, but to Java beans.

Move it up:

MyProject
 |-- java (src folder)
 |    |-- controller
 |    |    `--ControllerServlet.java
 |    |-- entity
 |    |-- session
 |    `-- META-INF
 |         `-- persistence.xml <-- Here.
 `--WebContent
     `-- WEB-INF
          |-- view
          |    |-- category.jsp        
          |    `-- etc..
          `-- index.jsp

This way the build will produce the proper WAR structure with /META-INF/persistence.xml inside /WEB-INF/classes. You seem to be using Eclipse, you can also achieve this by selecting the JPA facet in project's properties.

This way Eclipse will generate a persistence.xml at the right place.

这篇关于无法修复java.lang.IllegalStateException:无法为unitName检索EntityManagerFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆