我是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
怎么了?
答案 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)的示例。