2011-01-21 3 views
5

단위 테스트에서 ecbDB JTA 데이터 소스를 찾을 수 없습니다.Derby 내장 데이터베이스 용 Java EE 6 애플리케이션에서 EclipseLink/JPA 2.0에서 JTA 데이터 소스를 설정하는 방법은 무엇입니까?

RESOURCE_LOCAL에 대해 동일한 persistence.xml이 작동합니다. EJB 컨테이너 내에서만 JTA 데이터 소스를 찾지 못합니다. 나는 예외 다음 단위 테스트 실행 얻을

.. 여기

SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method 
java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'ecbDB' in SerialContext [Root exception is javax.naming.NameNotFoundException: ecbDB not found] 
at org.glassfish.persistence.jpa.PersistenceUnitInfoImpl.<init>(PersistenceUnitInfoImpl.java:111) 

의 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_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="ecbPU" transaction-type="JTA"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>ecbDB</jta-data-source> 
     <mapping-file>META-INF/orm.xml</mapping-file> 

     <properties> 
      <property 
       name="javax.persistence.jdbc.driver" 
       value="org.apache.derby.jdbc.EmbeddedDriver" /> 
      <property 
       name="javax.persistence.jdbc.url" 
       value="jdbc:derby:target/ecbDB;create=true" /> 

      <!-- EclipseLink 2.0 properties --> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
      <property name="eclipselink.ddl-generation.output-mode" 
         value="sql-script" /> 
      <!-- <property name="eclipselink.ddl-generation.output-mode" value="database" 
      /> --> 
      <property name="eclipselink.application-location" value="./target/ddl" /> 
      <property name="eclipselink.create-ddl-jdbc-file-name" 
         value="create.sql" /> 
      <property name="eclipselink.drop-ddl-jdbc-file-name" value="drop.sql" /> 
      <property name="eclipselink.logging.level" value="ALL" /> 
      <property name="eclipselink.logging.file" value="./target/eclipselink.logs" /> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

이 코드는 jpa1.0 with openjpa와 작동합니다. eclipselink 및 jpa2.0; 위의 코드에서 desource가 정의/등록되지 않았다고 생각합니다. –

답변

0

먼저 확인하십시오 더비 구성이와 (적절한 JDBC 자원을 만들 것입니다 쉘 명령 "asadmin list-jdbc-resources"). 그렇지 않은 경우 "asadmin create-jdbc-resource"로 만듭니다. 도움이 필요하면 "asadmin list-commands"를 입력하십시오.

+0

embedded derby를 사용하고 있습니다. 유닛 테스트에서 임베디드 더비를 사용하면 어떻게 jdbc 리소스를 정의 할 수 있습니까? –

+0

예외가 발생합니다. 내부 예외 : java.sql.SQLException : 연결을 할당하는 중 오류가 발생했습니다. 원인 : 다음 이유로 인해 연결을 할당 할 수 없습니다. java.net.ConnectException : 포트 1527에서 localhost 서버에 연결하는 중 오류가 발생했습니다. 연결이 거부되었습니다. 연결하십시오. 오류 코드 : 0 \t (org.eclipse.persistence.exceptions.DatabaseException.sqlException) (DatabaseException.java:309) –

+0

포트 1527에서 서버에 연결하지 못했다는 메시지가 표시되면 임베디드 Derby를 사용하면 Client/Server Derby를 사용하고 있으며 네트워크 서버가 작동하지 않습니다. –

0

임베디드 글래스 피시에서 실행 중이십니까? 그렇다면 그가보고있는 문제는 그가 JTA 데이터 소스를 가지고 있기 때문에 ecbDB가 domain.xml에 정의되어 있지 않기 때문입니다. 이 경우 Kaster의 답변은 올바른 방향이므로 임베디드 커넥션 풀과 관련 JDBC 리소스를 만들어야합니다. asadmin 명령이나 Glassfish 웹 관리 GUI를 사용할 수 있습니다. 이 시점에서 두 개의 javax.persistence.jdbc 속성을 persistence.xml에서 제거해야합니다. 연결 풀 리소스 설정에 의해 이러한 설정이 적용될 것이기 때문입니다.

1

다음은 EclipseLink와 JTA 기반 연결을 설정하는 데 사용한 단계별 설명입니다.

먼저 다음 사항을 확인합니다

  • 글래스 피쉬 서버가 작동하고 최대

    asadmin list-domains

  • 아파치 더비 서버입니다 실행하고

    NetworkServerControl.bat sysinfo -h localhost -p 1527

를 실행 617,451,515,

다음, JDBC 연결 풀과 JDBC 자원을 만들

  • org.apache.derby.jdbc.EmbeddedDataSource

및 asadmin 만들-JDBC 접속 풀을 사용하여 JDBC 연결 풀을 만들
--datasourceclassname 조직 .apache.derby.jdbc.EmbeddedDataSource
--restype javax.sql.XADataSource에
--property 여기서 databaseName = ecbDB : 서버 = 로컬 호스트 : portNumber를 = 1527 : 암호 = APP : 사용자 = APP : connectionAttributes = \; \ = 사실 EmbeddedPool

  • 만들
JDBC 자원을 만들

및 asadmin 생성-JDBC-자원


Y EmbeddedPool의 경우 JDBC/EmbeddedResource을 --connectionpoolid 새로운 노드를 알 수 있습니다 :

자원> JDBC> JDBC 연결 풀> EmbeddedPool
자원> JDBC> JDBC 자원> JDBC/EmbeddedResource
: ou는 글래스 피쉬 관리 콘솔에서보고 (4848로컬 호스트를) 받아

jdbc/EmbeddedResource에서 볼 수 있듯이 EmbeddedPool에 할당되었습니다. 나는이 자바에 대한 선호하는 전략입니다 알고있는 구성 요소까지 (지속성 작업을 관리하기로

<?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> 

사용 상태 비/상태 세션 빈 :


그런 다음, persistence.xml을 최소한의 버전을 만들 EE 애플리케이션)

public interface ECBService { 
} 

@Stateless 
public class ECBServiceBean implements ECBService { 
    @PersistenceContext(unitName = "ecbPU") 
    protected EntityManager em; 
} 

사용 세터 주입 부 검사시)에 (a 필드에 유용한 컨텍스트 의존성 명명 환경을 할당 : 01,235

16,
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) 

나는 그것이 도움이되기를 바랍니다.

관련 문제