Эта команда создает Chapter08Pool с использованием источника данных Derby и набора свойств для соединения с базой данных: название (chapter08DB), сервер (localhost) и порт (1527), который он слушает, пользователь (APP) и пароль (APP) для подключения. Если вы сейчас опросите этот источник данных, Derby создаст базу данных автоматически (потому что вы установили значения connectionAttributes=;create\=TRUE). Чтобы опросить источник данных, используйте следующую команду:

$ asadmin ping-connection-pool Chapter08Pool

После успешного выполнения этой команды вы должны увидеть каталог chapter08DB на жестком диске в том месте, где Derby хранит свои данные. Будут созданы база данных и пул соединений, и теперь вам нужно объявить источник данных jdbc/chapter08DS и связать его с только что созданным пулом следующим образом:

$ asadmin create-jdbc-resource — connectionpoolid 

··Chapter08Pool jdbc/chapter08DS

Для того чтобы получить список всех источников данных, хранящихся с помощью GlassFish, введите такую команду:

$ asadmin list-jdbc-resources

<p>Написание интеграционного теста BookEJBIT</p>

В версии 1.x и 2.x EJB интеграционное тестирование нашего BookEJB было бы затруднительно: вам пришлось бы использовать особенности определенных серверов приложений или внести изменения в код. С новым встроенным контейнером EJB становится проверяемым классом так же просто, как и любой другой класс, так как он может работать в нормальной среде Java SE. Единственное, что необходимо сделать, — добавить конкретный файл с расширением JAR в каталог, где хранится ваш файл, как это делается в файле pom.xml (он показан ниже, в листинге 8.17) с помощью зависимости glassfish-embedded-all.

В главе 4 я объяснил, как можно провести интеграционное тестирование для сущности со встроенной базой данных, поэтому я не буду вдаваться в подробности по данному вопросу. Для того чтобы произвести интеграционное тестирование EJB, вам следует использовать встроенную в память базу данных Derby, различные блоки хранения и встроенный в память контейнер EJB. Все эти компоненты уже готовы и работают в том же процессе, требуется только создать тестовый класс JUnit (листинг 8.16). Этот тест инициализирует EJBContainer(EJBContainer.createEJBContainer()), получает контекст JNDI, ищет EJB и использует его для создания и удаления книг, а также их извлечения во встроенную в память базу данных и из нее. Благодаря конструкции try-with-resources встроенный контейнер закрывается автоматически в конце блока try.

Листинг 8.16. Интеграционное тестирование BookEJB с использованием встраиваемого контейнера

public class BookEJBIT {

··@Test

··public void shouldCreateABook() throws Exception {

····Map properties = new HashMap<>();

····properties.put(EJBContainer.MODULES, new File("target/classes"));

····try (EJBContainer ec = EJBContainer.createEJBContainer(properties)) {

······Contextctx = ec.getContext();

······// Проверяет зависимости JNDI (источники данных и EJB)

······assertNotNull(ctx.lookup("java: global/jdbc/chapter08DS"));

······assertNotNull(

ctx.lookup("java: global/classes/BookEJB!org.agoncal.book.javaee7.chapter08.BookEJBRemote"));

······assertNotNull(

ctx.lookup("java: global/classes/BookEJB!org.agoncal.book.javaee7.chapter08.BookEJB"));

······// Ищет EJB

······BookEJB bookEJB = (BookEJB) 

ctx.lookup("java: global/classes/BookEJB!org.agoncal.book.javaee7.chapter08.BookEJB");

······// Ищет все книги и убеждается, что их две (они добавлены

······// в базу с помощью DBPopulator)

······assertEquals(2, bookEJB.findBooks(). size());

······// Создает книгу

······Book book = new Book("H2G2", 12.5F, "Научная фантастика", "1-24561-799-0", 354, false);

······// Сохраняет книгу в базе данных

Перейти на страницу:

Похожие книги