Статьи

Пример методов диспетчера CDI Java EE

Это руководство по методам CDI Disposer . В CDI, поскольку метод Producer генерирует объект, который затем может быть Disposer в приложение, метод Disposer используется для удаления объекта по завершении его работы. Метод Disposer всегда соответствует методу Producer .

Примером использования метода Disposer является случай, когда приложение использует соединение с базой данных. Поскольку соединение должно закрываться после завершения взаимодействия с базой данных, метод Disposer используется для удаления объекта, представляющего соединение.

Здесь мы покажем вам, как использовать метод Disposer . Мы создадим простой сервис. Затем мы создадим метод Producer для создания и внедрения службы в приложение и метод Disposer для очистки службы после ее завершения.

Нашей предпочтительной средой разработки является Eclipse . Мы используем версию Eclipse Juno (4.2) вместе с плагином Maven Integration версии 3.1.0. Вы можете скачать Eclipse отсюда и Maven Plugin для Eclipse отсюда . Установка плагина Maven для Eclipse выходит за рамки данного руководства и не будет обсуждаться. Tomcat 7 — это используемый сервер приложений.

Давайте начнем,

1. Создайте новый проект Maven

Перейдите в Файл -> Проект -> Maven -> Проект Maven.

New-Maven-проект

На странице мастера «Выберите имя проекта и местоположение» убедитесь, что опция «Создать простой проект (пропустить выбор архетипа») не отмечена , нажмите «Далее», чтобы продолжить со значениями по умолчанию.

новый проект

Здесь должен быть добавлен архетип maven для создания веб-приложения. Нажмите «Добавить архетип» и добавьте архетип. Установите переменную «Archetype Group Id» на "org.apache.maven.archetypes" , переменную «Archetype ardact Id» на "maven-archetype-webapp" и «Archetype Version» на "1.0" . Нажмите «ОК», чтобы продолжить.

Maven-архетип-WebApp

На странице мастера «Введите идентификатор артефакта» вы можете определить имя и основной пакет вашего проекта. Установите для переменной «Group Id» значение "com.javacodegeeks.snippets.enterprise" а для переменной «Artifact Id» — "cdibeans" . Вышеупомянутые варианты составляют основной пакет проекта как "com.javacodegeeks.snippets.enterprise.cdibeans" а имя проекта — "cdibeans" . Установите для переменной «Package» значение "war" , чтобы создать файл war для развертывания на сервере tomcat. Нажмите «Готово», чтобы выйти из мастера и создать свой проект.

newcdiproject1

Структура проекта Maven показана ниже:

newcdiproject2

    Он состоит из следующих папок:

  • Папка / src / main / java, которая содержит исходные файлы для динамического содержимого приложения,
  • Папка / src / test / java содержит все исходные файлы для модульных тестов,
  • Папка / src / main / resources содержит файлы конфигурации,
  • Папка / target содержит скомпилированные и упакованные результаты,
  • Папка / src / main / resources / webapp / WEB-INF содержит дескрипторы развертывания для веб-приложения,
  • pom.xml — это файл объектной модели проекта (POM). Единственный файл, который содержит все связанные с проектом конфигурации.

2. Добавьте все необходимые зависимости

Вы можете добавить зависимости в файле Maven pom.xml , отредактировав его на странице «Pom.xml» редактора POM, как показано ниже:

pom.xml:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.javacodegeeks.snippets.enterprise.cdi</groupId>
    <artifactId>cdibeans</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>cdibeans Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet</artifactId>
            <version>1.1.10.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.faces</artifactId>
            <version>2.1.7</version>
        </dependency>
    </dependencies>
 
    <build>
        <finalName>cdibeans</finalName>
    </build>
</project>

Как видите, Maven декларативно управляет библиотечными зависимостями. Создается локальный репозиторий (по умолчанию в папке {user_home} /. M2), и все необходимые библиотеки загружаются и помещаются туда из общедоступных репозиториев. Кроме того, внутрибиблиотечные зависимости автоматически разрешаются и обрабатываются.

3. Создать простой Сервис

Класс GreetingCard.java — это интерфейс с двумя методами.

GreetingCard.java

1
2
3
4
5
6
7
8
package com.javacodegeeks.snippets.enterprise.cdibeans;
 
public interface GreetingCard {
 
    public void sayHello();
     
    public void sayGoodBye();
}

Реализация сервиса показана ниже:

GreetingCardImpl.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
package com.javacodegeeks.snippets.enterprise.cdibeans.impl;
 
import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;
 
 
public class GreetingCardImpl implements GreetingCard {
 
    public void sayHello() {
        System.out.println("Hello!!!");
    }
 
    public void sayGoodBye() {
        System.out.println("GoodBye!!!");
         
    }
}

4. Использование продюсера и диспозитора в управляемом бине

В управляемом компоненте ниже мы используем методы Producer и Disposer созданные выше. В частности, в классе GreetingCardFactory.java мы создаем метод getGreetingCard() , аннотированный аннотацией @Produces . Метод создает экземпляр GreetingCardImpl . Точно так же метод Disposer имеет аннотированный параметр @Disposes . Параметр Disposer получает объект, созданный методом источника. Метод Disposer вызывается автоматически, когда заканчивается контекст. Здесь, поскольку мы создали метод RequestScoped Producer метод Disposer вызывается в конце запроса.

GreetingCardFactory.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.javacodegeeks.snippets.enterprise.cdibeans;
 
import java.io.Serializable;
 
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
 
import com.javacodegeeks.snippets.enterprise.cdibeans.impl.GreetingCardImpl;
 
public class GreetingCardFactory implements Serializable {
 
    private static final long serialVersionUID = -44416514616012281L;
 
    @Produces
    @RequestScoped
    @Greetings
    public GreetingCard getGreetingCard() {
        GreetingCard greetingCard = new GreetingCardImpl();
        greetingCard.sayHello();
        return greetingCard;
    }
 
    public void disposeGreetingCard(
            @Disposes @Greetings GreetingCard greetingCard) {
        greetingCard.sayGoodBye();
    }
 
}

Мы можем использовать квалификаторы для предоставления различных реализаций определенного типа бина. Квалификатор — это аннотация, которую мы применяем к бобу. Тип квалификатора — это аннотация Java, определенная как @Target({METHOD, FIELD, PARAMETER, TYPE}) и @Retention(RUNTIME) .

Здесь мы объявляем квалификатор @Greetings , как показано ниже:

Greetings.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
package com.javacodegeeks.snippets.enterprise.cdibeans;
 
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
 
import javax.inject.Qualifier;
 
@Qualifier
@Retention(RUNTIME)
@Target({ FIELD, TYPE, METHOD, PARAMETER })
public @interface Greetings {
 
}

5. Запустите приложение

Чтобы запустить приложение, мы создали простой сервлет, как показано ниже:

GreetingServlet.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.javacodegeeks.snippets.enterprise.cdibeans.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.inject.Inject;
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 com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;
import com.javacodegeeks.snippets.enterprise.cdibeans.Greetings;
 
@WebServlet(name = "greetingServlet", urlPatterns = {"/sayHello"})
public class GreetingServlet extends HttpServlet {
 
    private static final long serialVersionUID = 2280890757609124481L;
     
    @Inject
    @Greetings
    private GreetingCard greetingCard;
 
      public void init() throws ServletException {
      }
 
      public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          out.println("<h1>" + "Hello ... " + "</h1>");
          System.out.println(" .... " + greetingCard.toString());
      }
       
      public void destroy(){
      }
 
}

Чтобы запустить пример, мы должны построить проект с Maven, а затем поместить файл war созданный в папке webbaps на tomcat. Тогда мы можем нажать на:

http://localhost/8080/cdibeans/sayHello

и результат показан ниже:

Индик.точки

Это было руководство по методам диспетчера CDI Java EE.

Загрузите исходный код этого учебника: CDIDisposerMethodExample