当前位置: 首页 > 知识库问答 >
问题:

Webapp找不到持久性单元。在作用域中没有名为“X”的持久性单元可用

斜烈
2023-03-14

我试图使用EJB 3.1、JPA 2.0、M2E-WTP和JSF 2.1技术在WebLogic12c服务器上运行我的webapp,但仍然出现以下错误:

javax.ejb.EJBException: EJB
Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X'
is available in scope Webapp. Available persistence units: [] at
weblogic.persistence.ModulePersistenceUnitRegistry
.getPersistenceUnit(ModulePersistenceUnitRegistry.java:130) at
weblogic.persistence.BasePersistenceContextProxyImpl
.<init>(BasePersistenceContextProxyImpl.java:40) at
weblogic.persistence.TransactionalEntityManagerProxyImpl
.<init>(TransactionalEntityManagerProxyImpl.java:31) at
weblogic.persistence.EntityManagerInvocationHandlerFactory.
createTransactionalEntityManagerInvocationHandler
(EntityManagerInvocationHandlerFactory.java:20) at 
weblogic.persistence.PersistenceManagerObjectFactory
.createPersistenceContextProxy(PersistenceManagerObjectFactory.java:66) at 
weblogic.persistence.PersistenceManagerObjectFactory
.getObjectInstance(PersistenceManagerObjectFactory.java:31) at 
javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:251) at
weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:406) at
weblogic.j2eeclient.java.ClientReadOnlyContextWrapper.lookup

这是触发异常的EJBBean

@Stateless
public class QuoteSessionEJB implements QuoteSessionEJBLocal {

/**
 * Default constructor. 
 */
public QuoteSessionEJB() {
    // TODO Auto-generated constructor stub
}

@PersistenceContext(unitName="X")
private EntityManager em;
/**
* Returns a list of Quote objects in the database
* @return List<Customer>
*/
public List<Quote> getQuote() {
Query query = em.createNamedQuery("findQuotes");
return query.getResultList();
}

}

下面是persistence.xml文件,它位于eclipse构建的src/main/java-->META-INF下。

<?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="X" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>localJTA</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.target-server" value="WebLogic"/>
        <property name="eclipselink.logging.level" value="FINEST"/>          
    </properties>
</persistence-unit>
</persistence>

我花了几个小时在网上寻找答案,但没有结果。我不明白为什么我的persistence.xml中的持久性单元X找不到...

我希望有人遇到了同样的问题或知道如何解决它。非常感谢任何帮助!

更新:根据下面的better_use_mkstemp注释,我将包含persistence.xml的META-INF文件夹从src/main/java移动到了web-inf/classes。我必须在Eclipse中创建classes文件夹。这招奏效了!非常感谢!

通过浏览maven install命令创建的war文件,我可以看到META-INF文件夹被正确地放置在web-inf/classes文件夹中。但是仅仅在Eclipse中发布到服务器是行不通的。除非我在WEB-INF下手动创建classes文件夹,并手动删除/移动META-INF文件夹,否则我无法使它在IDE中工作。此外,将META-INF文件夹的副本放在两个地方作为解决方案似乎也没有意义。

共有1个答案

何晗昱
2023-03-14

尝试在persistence.xml中替换:

<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 version="1.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_1_0.xsd">
 类似资料:
  • 问题内容: 我收到以下错误: 这是我的persistence.xml文件: 这是我的persistenceLayer.xml: persistence.xml位于src / META-INF中,该文件位于构建路径中,因此应正确找到它。谁有想法? 问题答案: 好吧,我通常将persistence.xml放在资源文件夹/src/main/resouces/META- INF/persistence.x

  • 这是我的坚持课: 这是我的persistence.xml:

  • 我试图建立一个gradle任务,运行一个旨在生成SQL模式的java主类。 我没有毅力。xml配置文件。 以下是我的配置和代码: 我的gradle任务: 我的导出实用程序: 我的数据配置: 以下是我得到的一个例外: 编辑:我确实收到了警告:

  • 我正在编写一个独立的java应用程序,从Maven项目构建它并通过调用jar文件执行。 在应用程序中,我有一个实体管理器,它使用在我的持久性中定义的持久性单元。xml是独立的(事务类型=“RESOURCE\u LOCAL”) 实际的实体注释类来自另一个项目,因此被添加到pom中。xml文件作为依赖项。 问题是持久性。包含实体类的项目的xml覆盖了实际独立应用程序的持久性。构建jar时,jar目标文

  • 问题内容: 将persistence.xml放在eclipse中的项目的类路径中,因为在错误之前是找不到该文件。现在给出此错误: 原因:javax.persistence.PersistenceException:无效的persistence.xml。解析XML时出错[行:-1,列:-1]:cvc- elt.1:找不到元素’persistence’的声明 问题答案: 解决了! 我不知道到底出了什么

  • 问题内容: 在构建应用程序时会创建persistence.xml中的持久性单元。由于我想在运行时更改数据库URL,是否有任何方法可以在运行时修改持久性单元?我应该使用其他数据库,而不是在分发后预先绑定一个数据库。 我正在使用EclipseLink(JPA 2.1) 问题答案: 保持持久性单元文件(Persistence.xml)不变。您可以按如下所示覆盖其中的属性。