我正在使用 Intellij Idea 13 开发一个示例 Java EE 应用程序。简单地说,我的项目是一个 Maven 项目,并且具有 JPA 端 EJB 模块。但是在 Glassfish 服务器上部署和运行应用程序时出现错误。
我创建了一个名为 SimpleEE 的 Maven 项目,并添加了 JPA、EJB 模块。
这是我的项目结构:
|-SampleEE
| |+.idea
| |-src
| | |-main
| | | |-java
| | | | |-beans
| | | | | |-MyBean.java
| | | | |-entities
| | | | |-Staff.java
| | | |-resources
| | | |-META-INF
| | | |-ejb-jar.xml
| | | |-persistence.xml
| | |+test
| |-pom.xml
| |-SampleEE.iml
| |-SampleEE.jpr
|+ExternalLibraries
MyBean.java:
package beans;
import entities.Staff;
import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
@Startup
@LocalBean
@Singleton
public class MyBean {
public MyBean() {
}
@PostConstruct
public void myMain() {
EntityManager em = Persistence.createEntityManagerFactory("mysqlPU").createEntityManager();
em.getTransaction().begin();
Staff staff = new Staff();
staff.setAge(44);
staff.setGender("M");
staff.setSalary(123);
staff.setName("Staff Name");
em.persist(staff);
em.getTransaction().commit();
}
}
员工.java
package entities;
import javax.persistence.*;
@Entity
public class Staff {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "STAFF_ID")
private int id;
@Column(name = "NAME")
private String name;
@Column(name = "AGE")
private Integer age;
@Column(name = "GENDER")
private String gender;
@Column(name = "SALARY")
private Integer salary;
@Lob
@Column(name = "IMAGE", nullable = true)
private byte[] image;
// Getters and setters
// ...
@Override
public int hashCode() {
// implementation ignored here for simplicity
}
@Override
public boolean equals(Object o) {
// implementation ignored here for simplicity
}
}
持久性.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="mysqlPU">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entities.Staff</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dbName"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="mysqlUsername"/>
<property name="javax.persistence.jdbc.password" value="mysqlPassword"/>
</properties>
</persistence-unit>
</persistence>
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>SampleEE</groupId>
<artifactId>SampleEE</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
</dependencies>
</project>
我创建了一个 EJB 应用程序:从项目结构中分解了 Artifact 。在运行/调试配置窗口中,我构建了 Glassfish 配置。但是,当运行此配置时,Idea 提示它无法在 mysql jdbc 驱动程序中找到类,并显示从此错误中出现的错误。服务器已启动但应用程序未部署。 Idea 输出日志中的错误消息片段:
....
[2013-12-13 04:07:31,362] Artifact SampleEE:ejb exploded: Artifact is being deployed, please wait...
[2013-12-13 04:07:33,011] Artifact SampleEE:ejb exploded: Error during artifact deployment. See server log for details.
[2013-12-13 04:07:33,018] Artifact SampleEE:ejb exploded: java.io.IOException: com.sun.enterprise.admin.remote.RemoteFailureException: Error occurred during deployment: Exception while loading the app : javax.ejb.CreateException: Initialization failed for Singleton MyBean. Please see server.log for more details.
Glassfish 日志中的最后一个错误
....
Caused by: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error. Class [com.mysql.jdbc.Driver] not found.
....
我猜库的 jar 文件没有部署。但是我的maven配置是有效的。 M2_HOME设置正确,IDEA解析maven路径。 jar 文件也可以在本地存储库中找到。
我在 Netbeans 中创建了一个相同的结构化项目,并且它运行成功。我不知道我做错了什么或者我缺少什么配置参数。
最佳答案
您需要添加 JavaEE 模块并添加创建 JavaEE Artifact 。然后将您需要的所有库添加到该 Artifact 中。
关于maven - 如何在 Intellij Idea 13 中将 Maven 项目部署到 Glassfish Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568924/