Спецификация EJB 3.1 представила встраиваемый API-интерфейс EJB 3.1 для выполнения компонентов EJB в среде Java SE.
В отличие от традиционного выполнения на сервере Java EE, встраиваемое использование позволяет клиентскому коду и соответствующим корпоративным компонентам работать в одной JVM и загрузчике классов. Это обеспечивает лучшую поддержку для тестирования, автономной обработки (например, пакетной обработки) и использования модели программирования EJB в настольных приложениях.
[…] Встраиваемый контейнер EJB обеспечивает управляемую среду с поддержкой тех же базовых сервисов, которые существуют в среде выполнения Java EE: внедрение, доступ к компонентной среде, транзакции, управляемые контейнером, и т. Д. В общем, компоненты корпоративного компонента не знают о вид управляемой среды, в которой они работают. Это обеспечивает максимальное повторное использование корпоративных компонентов в широком диапазоне сценариев тестирования и развертывания без значительных переделок.
Давайте посмотрим на пример.
Начните с создания проекта Maven и добавьте встраиваемую зависимость GlassFish.
Я решил использовать среду тестирования TestNG , но JUnit должен работать так же хорошо.
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
|
< dependencies > < dependency > < groupId >org.glassfish.extras</ groupId > < artifactId >glassfish-embedded-all</ artifactId > < version >3.1.2</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.testng</ groupId > < artifactId >testng</ artifactId > < version >6.4</ version > < scope >test</ scope > </ dependency > <!-- The javaee-api is stripped of any code and is just used to compile your application. The scope provided in Maven means that it is used for compiling, but is also available when testing. For this reason, the javaee-api needs to be below the embedded Glassfish dependency. The javaee-api can actually be omitted when the embedded Glassfish dependency is included, but to keep your project Java-EE 6 rather than GlassFish, specification is important. --> < dependency > < groupId >javax</ groupId > < artifactId >javaee-api</ artifactId > < version >6.0</ version > < scope >provided</ scope > </ dependency > </ dependencies > |
Вот простой сессионный компонент Stateless
сохранения состояния:
1
2
3
4
5
6
|
@Stateless public class HelloWorld { public String hello(String message) { return "Hello " + message; } } |
Он предоставляет бизнес-методы через представление без интерфейса .
Не существует специального API, который он должен использовать для возможности встраиваемого выполнения.
Вот некоторый тестовый код для выполнения bean-компонента в встраиваемом контейнере:
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
|
public class HelloWorldTest { private static EJBContainer ejbContainer; private static Context ctx; @BeforeClass public static void setUpClass() throws Exception { // Instantiate an embeddable EJB container and search the // JVM class path for eligible EJB modules or directories ejbContainer = EJBContainer.createEJBContainer(); // Get a naming context for session bean lookups ctx = ejbContainer.getContext(); } @AfterClass public static void tearDownClass() throws Exception { // Shutdown the embeddable container ejbContainer.close(); } @Test public void hello() throws NamingException { // Retrieve a reference to the session bean using a portable // global JNDI name HelloWorld helloWorld = (HelloWorld) ctx.lookup( "java:global/classes/HelloWorld" ); // Do your tests assertNotNull(helloWorld); String expected = "World" ; String hello = helloWorld.hello(expected); assertNotNull(hello); assertTrue(hello.endsWith(expected)); } } |
Исходный код доступен на GitHub в папке ejb31-embeddable
.
Пошаговое руководство с примером JPA можно найти в разделе Использование встроенного контейнера EJB для тестирования корпоративных приложений из документов NetBeans.
Хотя этот новый API является шагом вперед, у меня все еще есть проблема с этим подходом: вы вводите контейнер в тест. Это требует специализированного контейнера, который отличается от вашей производственной среды.
В Java EE 6 Testing Part II я представлю Arquillian и ShrinkWrap .
Arquillian, мощная контейнерно-ориентированная инфраструктура тестирования, расположенная поверх TestNG и JUnit, дает вам возможность создавать производственную среду на выбранном вами контейнере и просто выполнять тесты в этой среде (используя источники данных, места назначения JMS и целый ряд другие конфигурации, которые вы ожидаете увидеть в производственной среде). Вместо того, чтобы переводить время выполнения в тест, Arquillian переносит ваш тест во время выполнения.
Похожие сообщения
- Тестирование Java EE 6, часть II — Введение в Arquillian и ShrinkWrap
- Maven 2 плагин Cobertura — Обновлено
- Модульное тестирование JBoss 5 Сервисы
- Полосы каркаса и EJB3
- Maven 2 плагин Cobertura
- Предыдущая запись: изменение параметров URL с помощью jQuery
- Следующая запись: Тестирование Java EE 6, часть II — Введение в Arquillian и ShrinkWrap
Ссылка: тестирование Java EE 6, часть I — EJB 3.1 Встраиваемый API от нашего партнера JCG Самуэля Сантоса в блоге Samaxes .