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

от автора

В данной статья я расскажу, как сконфигурировать проект на 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» записывается в базу.

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


ссылка на оригинал статьи https://habr.com/post/420827/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *