带有maven和glassfish的EJB 3.0。错误:"它包含零ejb"

时间:2015-03-11 07:31:03

标签: java maven java-ee glassfish ejb-3.0

我是maven和JavaEE的新手。我需要将一个bean部署到glassfish 4. Bean代码:

@Remote(IBean.class)
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class BeanImpl implements IBean{
    ...
}

我在Intellij IDEA中创建了一个具有以下结构的maven应用程序:

1. lib
      ejb-api-3.0.jar
      mylib.jar
2. META-INF
      MANIFEST.MF
      persistance.xml
3. src/main/java
    com.mypackage
      BeanImpl.java
      model
4. src/main/resources
      my_sql_patches.sql
5. src/test
      empty
6. pom.xml

MANIFEST.MF:

Manifest-Version: 1.0

的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.myapp</groupId>
    <artifactId>myapp-app-bean</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>ru.mylib</groupId>
            <artifactId>mylib</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.ejb</groupId>
            <artifactId>ejb-api</artifactId>
            <version>3.0</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/ejb-api-3.0.jar</systemPath>
        </dependency>
    </dependencies>

    <properties>
        <jdk.version>1.8</jdk.version>
    </properties>

    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ejb-plugin</artifactId>
                <configuration>
                    <ejbVersion>3.0</ejbVersion>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

我使用maven进行全新安装,并成功构建了jar文件。但后来我把它部署在glassfish上,它告诉我:

部署期间出错:部署应用程序时出现异常[myapp-app-bean-1.0-SNAPSHOT]:无效的ejb jar myapp-app-bean-1.0-SNAPSHOT:它包含零ejb。有效的ejb jar至少需要一个会话/实体/消息驱动的bean

怎么了?

1 个答案:

答案 0 :(得分:2)

问题是您打包为JAR而不是EJB。这可能有点令人困惑,因为两种打包格式都以名为.jar的文件结束。

相应地更改pom.xml

<packaging>ejb</packaging>

附加说明:

如果必须将其他lib打包为依赖项,那么EJB只是正确解决方案的一部分。

要做到这一点,您需要一个“包装”EJB的EAR。

在EAR中,您可以为依赖项创建lib文件夹。

EAR结构看起来与此类似:

/EAR
/EAR/YourEJB.jar
/EAR/lib
/EAR/lib/some-lib.jar

如果您不熟悉所有这些,我建议使用NetBeans,因为它具有良好的Glassfish集成,并提供了最常见的Java EE项目结构(EJB,EAR,WAR)的示例。