1

环境

  • WebLogic 11g(随后是 Java EE 5 和 EJB 3.0)
  • 一个 EJB 包含的 JAR 也包含所有持久性实体。它工作得很好(有一个使用 EJB 的 Web 应用程序,它按预期工作)。我决定将实体分离到另一层,为此我创建了另一个模块并将其部署为可选包。所以现在我有两个 JAR 文件,顺便说一下,我分别部署而不是作为一个应用程序的一部分;持久性 JAR 和 EJB JAR。

问题

在部署 EJB 期间,我收到以下错误(告诉我未找到可选包):

无法部署 EJB:来自 BLayer-1.0.0-SNAPSHOT.jar 的 StocksBean:在 BLayer-1.0.0-SNAPSHOT.jar 范围内没有名为“internalAppsPU”的持久性单元可用
。可用的持久性单位:[]

更多信息

持久性模块的 JAR 清单

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: bm03043
Build-Jdk: 1.6.0_18
Extension-Name: com.amir.persistence
Implementation-Version: 1.0.0
Specification-Version: 1.6

持久性模块 JAR 的 META-INF 文件夹中的 persistence.XML

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
    version="1.0">
    <persistence-unit name="internalAppsPU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>InternalAppsDS</jta-data-source>
        <class>com.xx.persistence.Stock</class>
        <properties>
            <property name="eclipselink.logging.level" value="FINE" />
        </properties>
    </persistence-unit>
</persistence>

EJB的代码

package com.xx.bll;

// bunch of imports //

@Stateless(name="StocksBean", mappedName="Internal-BLayer-StocksBean")
public class StocksBean implements Stocks {

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

   // SNIP //
}

EJB 的 JAR 清单

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: bm03043
Build-Jdk: 1.6.0_18
Extension-List: PLayer
PLayer-Extension-Name: PersistenceLayer
PLayer-Implementation-Version: 1.0.0-SNAPSHOT
PLayer-Specification-Version: 1.6

请注意以下事项:

  • InternalAppsDS数据源之前在 WebLogic 中进行了配置。
  • 在某些时候,我的印象是Extension-List中的名称必须与部署为可选包的 JAR 文件的名称相匹配。但是当我阅读更多时,我意识到这是不正确的。
4

1 回答 1

0

所以答案是使用与库中相同的扩展名。

于 2012-07-11T18:47:30.617 回答