2013-06-27 1 views
4

Я разрабатываю динамический веб-проект (Java EE) с использованием JSF, PrimeFaces, JPA и работает на Tomcat 7. Разработка проекта основана на http://www.simtay.com/simple-crud-web-application-with-jsf-2-1-primefaces-3-5-maven-and-jpa/
Теперь я разрабатываю часть программного обеспечения JPA. В прошлом, когда я разработал некоторые мелочи (как упражнения) в Java SE, я имел обыкновение использовать следующие свойства базы данных:Как адаптировать файл persistence.xml для подключения JPA к базе данных JDBC/MySQL в среде Java EE (Tomcat + JSF)

jdbc.drivers=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 
jdbc.username=root 
jdbc.password=password 

Но сейчас я учусь JPA на Java EE.

В книге "Pro JPA 2 Овладение торговли Java Настойчивость API", глава 3, пункт "Упаковка It Up" вы можете прочитать:

В среде Java EE, многие свойства требуются в Файл persistence.xml для Java SE может быть опущен. В листинге 3-32 вы смотрите файл persistence.xml из листинга 2-11, преобразованный для развертывания как часть приложения Java EE. Вместо свойств JDBC для создания соединения мы объявляем, что администратор объекта должен использовать имя источника данных «jdbc/EmployeeDS». Если источник данных был определен как доступный в пространстве имен приложений вместо контекста именования локального компонента, вместо этого вместо используйте имя источника данных «java: app/jdbc/EmployeeDS». Атрибут типа транзакции также был удален, чтобы достоящий блок по умолчанию использовал JTA. Сервер приложений будет автоматически найти классы сущностей, поэтому даже список классов имеет . Этот пример представляет собой идеальную минимальную конфигурацию Java EE . Поскольку бизнес-логика, использующая это постоянство , реализована в сеансовом компоненте без состояния, файл persistence.xml обычно будет находиться в каталоге META-INF соответствующего EJB JAR .

Листинг 3-32. Определение единицы сохранения в Java EE

<persistence> 
    <persistence-unit name="EmployeeService"> 
     <jta-data-source>jdbc/EmployeeDS</jta-data-source> 
    </persistence-unit> 
</persistence> 

Листинг 2-11. Элементы в persistence.xml Файл

<persistence> 
    <persistence-unit name="EmployeeService" transaction-type="RESOURCE_LOCAL"> 
     <class>examples.model.Employee</class> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527 EmpServDB;create=true"/> 
      <property name="javax.persistence.jdbc.user" value="APP"/> 
      <property name="javax.persistence.jdbc.password" value="APP"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Мой вопрос: как я могу адаптировать общий файл persistence.xml в среде Java EE для подключения к базе данных MySQL/JDBC, используя свойства Я введенные в верхней части сообщение?

+1

Tomcat как баребон JSP/контейнер для сервлетов вряд ли можно считать «средой Java EE». Он вообще не поддерживает транзакции, управляемые контейнером (JTA), что вам в конечном итоге необходимо. Реальные Java EE-контейнеры, такие как Glassfish, JBoss AS и TomEE, поддерживают JTA (и JPA, EJB, JSF и т. Д. И т. Д.). На «простом» Tomcat вам необходимо установить JTA отдельно (например, при установке JSF и JPA отдельно). Googling «install jta tomcat» должен давать достаточные советы. Или просто перейдите в полноценный контейнер Java EE, так что вам не нужно каждый раз устанавливать свободные артефакты Java EE. – BalusC

+0

Мне не нравится TomEE, у меня было много неприятностей. В тот момент, когда я отказался от его использования, он не начинался. Мне нравится больше импортировать библиотеки в Tomcat. После просмотра http://stackoverflow.com/questions/2552612/how-to-use-jta-support-in-tomcat-6-for-hibernate я начал изучать, как использовать jbossts-full, чтобы мой проект правильно использовал JTA. Если вы поместите свой предыдущий комментарий в качестве ответа, я дам вам зеленый знак V –

ответ

4

Для данного примера требуется JTA, Java Transaction API. Он делегирует управление транзакциями в контейнер. Если включена JTA, если вы используете EJB @Stateless, то один вызов метода по умолчанию считается единой транзакцией. Это позволяет писать чистый код без каких-либо шаблонов tx.begin, tx.commit, tx.rollback и т. Д.

Как и JSF, EJB и JPA, по умолчанию JTA недоступен в бабочных контейнерах JSP/Servlet, таких как Tomcat и Jetty. Как JSF, EJB и JPA, вам необходимо установить JTA отдельно на Tomcat.

Альтернативой является переход от контейнера JSP/Servlet к реальному контейнеру Java EE (веб-профиля), например Glassfish, JBoss AS и TomEE.Он предлагает все прямо из коробки в отношении Java EE. Обратите внимание, что JBoss AS и TomEE в основном используют движок JSP/Servlet от Tomcat под обложками.

+0

, спасибо, ваша помощь драгоценна, чтобы ориентироваться в огромном океане Java EE. –

+0

Добро пожаловать. – BalusC

+0

У меня вопрос. Используя пример Sim Tay в TomEE, мне нужно установить JTA-движок или встроить его в TomEE? –