Вот пошаговое описание, которое я использовал для установки соединения на основе JTA с EclipseLink.
Сначала убедитесь, что:
сервер GlassFishзапущен и работает
asadmin list-domains
Сервер Apache Derby запущен и работает
NetworkServerControl.bat sysinfo -h localhost -p 1527
Далее создайте пул соединений JDBC и ресурс JDBC
- создайте пул соединений JDBC, который использует
org.apache.derby.jdbc.EmbeddedDataSource
asadmin create-jdbc-подключение бассейн--datasourceclassname org.apache.derby.jdbc.EmbeddedDataSource--restype javax.sql.XADataSource--property databaseName = ecbDB: serverName = localhost: portNumber = 1527: пароль = APP: пользователь = APP: connectionAttributes = \; create \ = true EmbeddedPool
asadmin create-jdbc-resource --conconctionpoolid EmbeddedPool jdbc / EmbeddedResource
Если вы посмотрите на Консоль администрирования GlassFish ( localhost: 4848 ), вы заметите новые узлы:
Ресурсы> JDBC> Пулы соединений JDBC> EmbeddedPoolРесурсы> JDBC> Ресурсы JDBC> jdbc / EmbeddedResource
Как вы можете видеть, jdbc/EmbeddedResource
был присвоен EmbeddedPool
.
Затем создайтеминимальная версия 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="ecbPU">
<jta-data-source>jdbc/EmbeddedResource</jta-data-source>
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
</properties>
</persistence-unit>
</persistence>
Использование сессионных компонентов без сохранения состояния или состояния в качестве компонентов для управления операциями сохранения (насколько я знаю, это предпочтительная стратегия для приложений Java EE):
public interface ECBService {
}
@Stateless
public class ECBServiceBean implements ECBService {
@PersistenceContext(unitName = "ecbPU")
protected EntityManager em;
}
Использовать установку сеттера для назначения зависимости контекста именования среды в поле (полезно в случае модульного тестирования):
public class ECBServlet extends HttpServlet {
private ECBService service;
@EJB
public void setECBService(EcbService service) {
this.service = service;
}
}
Наконец, развертывание производит следующее:
INFO: EclipseLink, version: Eclipse Persistence Services - 2.5.0.v20130507
FINE: Detected database platform: org.eclipse.persistence.platform.database.JavaDBPlatform
CONFIG: connecting(DatabaseLogin(
platform=>DatabasePlatform
user name=> ""
connector=>JNDIConnector datasource name=>null
))
CONFIG: Connected: jdbc:derby:ecbDB
User: APP
Database: Apache Derby Version: 10.10.1.1 - (1458268)
Driver: Apache Derby Embedded JDBC Driver Version: 10.10.1.1 - (1458268)
CONFIG: connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> ""
connector=>JNDIConnector datasource name=>null
))
CONFIG: Connected: jdbc:derby:ecbDB
User: APP
Database: Apache Derby Version: 10.10.1.1 - (1458268)
Driver: Apache Derby Embedded JDBC Driver Version: 10.10.1.1 - (1458268)
Надеюсь, это поможет.