저는 JPA를 처음 사용하고 있으며, 스스로 가르치려고 노력하고 있습니다. 작은 웹 응용 프로그램을 설치하고 Glassfish 3.1에 배포하고 있습니다.persistence.xml의 데이터베이스 설정이 사용되지 않았습니다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd"
version="1.0">
<persistence-unit name="foo" transaction-type="JTA">
<jta-data-source>jdbc/foo</jta-data-source>
<class>my.app.Foo</class>
</persistence-unit>
</persistence>
그러나 지금까지 내가 이해, 내 모든 데이터베이스 연결 설정을 넣을 수 있어야한다 : 나는 이와 같은,이 persistence.xml에 JNDI 데이터 소스를 참조 할 때
JPA 잘 작동합니다 persistence.xml의 특성으로 변환하십시오. 이것은 좋은 습관은 아닐지 모르지만, 제가 실험하고있을 때, 그리고 아마도 유닛 테스팅 중에는 편리 할 것 같습니다.
그러나 내가 찾은 예제를 따르면 persistence.xml은 무시되고 대신 기본 컨테이너 관리 데이터 소스 인 jndi/__ default가 사용됩니다. 이것은 실행 중이 아닌 Derby 인스턴스입니다.
나는 임시 메모리 더비 예를 들어이 파일을 시도했다 :
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.0">
<persistence-unit name="foo" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>my.app.Foo</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:NxtMv;create=true"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.user" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
가 나는 또한 (JNDI를 통해 액세스 할 때 작동하는)는 PostgreSQL 서버에 대해이 작업을 시도했다 :
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.0">
<persistence-unit name="foo" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>my.app.Foo</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/foo"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.user" value="myuser"/>
<property name="javax.persistence.jdbc.password" value="secret"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
내 수많은 시도와 재시도 중에 누적 된 파일에는 관련성이없는 중요한 요소가있을 수 있습니다.
무엇이 여기에 있습니까?
나는 이것을 시도했지만, 당신 말이 맞습니다. 이것은 "트랜잭션 유형이 JTA 인 지속성 단위 만 컨테이너 관리 엔티티 관리자로 사용할 수 있습니다."라는 오류를 표시합니다. 내가 배치하려고 할 때. RESOURCE_LOCAL을 (를) 사용할 수 있고 여전히 배포 할 수있는 시나리오는 무엇입니까? –
@ 코더 : JTA 데이터 소스 없이는 contrainer-managed 트랜잭션을 사용할 수 없다는 것을 이해합니다. 즉, 수동으로 구성된 데이터 소스를 사용하려면 (Persistence.createEntitiyManagerFactory()를 통해 얻은 영속 컨텍스트에서) 수동으로 트랜잭션을 관리해야합니다. 그것은 EJB의 한 가지 더 융통성없는 것처럼 보입니다. – axtavt
@Coder Doe : 컨테이너 관리 트랜잭션을 사용하는 경우 JTA 데이터 소스를 사용할 수 밖에 없습니다. 나는 이것이 곧 바뀔 것이라고 생각하지 않는다! JTA를 직접 지원하는 서버는 Glassfish, JBoss, Websphere입니다. 비 JTA 서버 : Tomcat. – ChuongPham