gpt4 book ai didi

maven - Webapp 找不到持久性单元。范围内没有名为 'X' 的持久性单元可用

转载 作者:行者123 更新时间:2023-12-01 06:34:04 25 4
gpt4 key购买 nike

我正在尝试使用 EJB 3.1、JPA 2.0、M2E-WTP 和 JSF 2.1 技术在我的 weblogic 12c 服务器上运行我的 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();
}

}

这是位于 src/main/java --> META-INF 下 eclipse 构建的 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="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 中创建类文件夹。这有效!非常感激!

跟进问题:做一些更多的研究,我发现将 META-INF 文件夹放在 src/main/resources 中也可以解决问题,但事实并非如此。我不知道这是否是 Maven 的 M2E-WTP eclipse 插件的问题,或者我只是在这里误解了一些东西。下面是文件夹结构的屏幕截图。

enter image description here

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

最佳答案

尝试替换你的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">

关于maven - Webapp 找不到持久性单元。范围内没有名为 'X' 的持久性单元可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16838691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com