Создаем простой maven проект с использованием Java EE + WildFly10 + JPA (Hibernate) + Postgresql + EJB + IntelliJ IDEA +4


В данной статья я расскажу, как сконфигурировать проект на JBoss с использование JPA. В подробности JPA, Hibernate, EJB лезть не буду, это отдельная тема. Просто покажу структуру проекта, как настроить datasource на WildFly и все это запустить в IntelliJ IDEA. Данный каркас, я думаю, будет полезен новичкам, работающим с JavaEE и JPA.

Установка WildFly10


Заходим на официальный сайт WildFly и скачиваем версию 10.1.0.Final. (возможно будет работать и другая, но в данном проекте я использовал ее).

Распаковываем архив в любую директорию на вашем компьютере.
Далее создадим нового пользователя. Для этого запускаем bin/add-user.bat. Там все достаточно просто. Следуем инструкциям и запоминаем введенный username и password.

Создание datasource


Следующим шагом будет создание datasource на сервере. Самым простым способом будет использование консоли администратора, предоставляемой WildFly.

Для того чтобы в нее зайти, сначала нужно запустить сервер /bin/standalone.bat и перейти по адресу 127.0.0.1:9990. Используем имя пользователя и пароль, которые только что создали.

Идем в раздел Deployments->Add->Upload a new deployment.

Теперь скачиваем jdbc драйвер с официального сайте postgresql. Я скачал postgresql-42.2.4.jar. Его добавляем в deployments. Имя можно дать любое.

Далее Configuration->Subsystems->Datasources->Non-XA->Add.

Выбираем Postgresql Datasource и наш скачанный драйвер. Задаем url нашей базы, логин и пароль. (не путать с логином и паролем от сервера). Если все сделали правильно, то должен появиться ваш новый datasource в списке. Во вкладке View вы можете проверить соединение с базой, если нажмете Test Connection.

Создаем проект в IntelliJ IDEA


Здесь все стандартно. Думаю лишних комментариев не требуется. Создаем maven проект. В packaging ставим war. И добавляем необходимые зависимости.

Собственно вот мой 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>yst</groupId>
    <artifactId>hiberProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.12.Final</version>
            <scope>provided</scope>
        </dependency>


    </dependencies>

    <build>
        <finalName>hiberProject</finalName>
    </build>


</project>

Структура проекта




Обратите внимание, что persitence.xml лежит в WEB-INF->classes->META-INF.

А вот и сам 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="myUnit" >
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:/PostgresDS</jta-data-source>
        <class>UserEntity</class>
        <class>JavaBean</class>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />

        </properties>
    </persistence-unit>

</persistence>

В качестве jta-data-source используем jndi-name, которое указали при создании datasource.
Если забыли, можно посмотреть на 127.0.0.1:9990 в разделе Configuration->Subsystems->Datasources->Наш datasource->View->Attributes->строка JNDI.

Теперь давайте посмотрим на наши классы.

1. Простейший entity класс.

Подробности не расписываю. Это уже другая тема.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


@Entity
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

2. EJB класс

Аннотация @PersistenceContext инжектит наш persistence-unit и на его основе создает EntityManager.

Аннотация @Stateless указывает, что это ejb.

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;



@Stateless
public class JavaBean {

    @PersistenceContext(unitName = "myUnit")
    EntityManager entityManager;

    public void saveUser(UserEntity user){
        entityManager.persist(user);

    }

}

3. Простейший Servlet

Аннотация @EJB инжектит JavaBean.

В методе doGet создается пользователь с именем «Ser» и вызывается метод saveUser из ejb.
Если таблицы userentity не было, то hibernate создаст сам таблицу и вставит туда нашего user.

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/test")
public class App extends HttpServlet{

    @EJB
    JavaBean javaBean;


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        UserEntity user=new UserEntity();
        user.setName("Ser");

        javaBean.saveUser(user);

        resp.getWriter().println("Hello from servlet");
    }
}

Запуск проекта


Для настройки jboss в IDEA, заходим в Run->EditConfiguration, нажимаем "+" в левом верхнем углу и выбираем jboss-local.



В качестве ApplicationServer выбираем папку с нашим установленным WildFly. В качестве артифакта я выбрал ExternalArtifact (собранный maven hiberProject.war), убрал стандартный Build и добавил стандартные задачи maven (clean package install).

Теперь жмем старт и ждем когда загрузится сервер. Далее заходим на страницу localhost:8080/имяпроекта/test.

При загрузке страницы срабатывает метод doGet и наш user с именем «Ser» записывается в базу.

Всем спасибо. Надеюсь кому-то эта статья помогла.
Вот ссылка на GitHub с этим проектом.




К сожалению, не доступен сервер mySQL