6.9. Java™ 지속성 API로 데이터 소스 사용


트랜잭션 관리 관점에서 JPA(Java™ Persistence API)와 함께 데이터 소스를 사용하는 방법을 이해하는 것이 중요합니다. 이 섹션에서는 JPA 사양 자체의 세부 정보 또는 가장 알려진 JPA 구현인 Hibernate에 대한 세부 정보를 설명하지 않습니다. 대신 이 섹션에서는 JPA 영구 단위를 데이터 소스에 가리키는 방법을 보여줍니다.

6.9.1. 데이터 소스 참조 정보

META-INF/persistence.xml 설명자( JPA 2.1 사양 참조, 8.2.1.5 jta-data-source, non-jta-data-source)는 다음 두 가지 종류의 데이터 소스 참조를 정의합니다.

  • <JTA-data-source > - JTA 트랜잭션과 함께 사용할 JTA 사용 데이터 소스에 대한 JNDI 참조입니다.
  • <non-jta-data-source > - JTA 트랜잭션 외부에서 사용할 JTA 사용 데이터 소스에 대한 JNDI 참조입니다. 이 데이터 소스는 일반적으로 초기화 단계에서도 사용됩니다. 예를 들어, Hibernate를 자동 생성 데이터베이스 스키마로 구성하는 hibernate.hbm2ddl.auto 속성도 사용됩니다.

이 두 데이터 소스는 javax.sql.DataSource 또는 javax.sql.XADataSource 와 관련이 없습니다! 이는 JPA 애플리케이션을 개발할 때 일반적으로 잘못된 오류입니다. 두 JNDI 이름은 모두 JNDI 바인딩된 javax.sql.DataSource 서비스를 참조해야 합니다.

6.9.2. JNDI 이름 참조

osgi.jndi.service.name 속성에 OSGi 서비스를 등록하면 OSGi JNDI 서비스에 바인딩 됩니다. OSGi 런타임(예: Fuse/Karaf)에서 JNDI는 이름 값 쌍으로 구성된 간단한 사전이 아닙니다. OSGi의 JNDI 이름을 사용하여 오브젝트를 참조하려면 서비스 조회 및 서비스 후크와 같은 기타 더 복잡한 OSGi 메커니즘이 포함됩니다.

다음 목록에서는 새로운 Fuse 설치에서 JNDI에 데이터 소스를 등록하는 방법을 보여줍니다.

karaf@root()> install -s mvn:mysql/mysql-connector-java/5.1.34
Bundle ID: 223
karaf@root()> install -s mvn:org.osgi/org.osgi.service.jdbc/1.0.0
Bundle ID: 224
karaf@root()> install -s mvn:org.ops4j.pax.jdbc/pax-jdbc-mysql/1.3.0
Bundle ID: 225
karaf@root()> install -s mvn:org.ops4j.pax.jdbc/pax-jdbc/1.3.0
Bundle ID: 226
karaf@root()> install -s mvn:org.ops4j.pax.jdbc/pax-jdbc-pool-common/1.3.0
Bundle ID: 227
karaf@root()> install -s mvn:org.ops4j.pax.jdbc/pax-jdbc-config/1.3.0
Bundle ID: 228

karaf@root()> config:edit --factory --alias mysql org.ops4j.datasource
karaf@root()> config:property-set osgi.jdbc.driver.name mysql
karaf@root()> config:property-set dataSourceName mysqlds
karaf@root()> config:property-set osgi.jndi.service.name jdbc/mysqlds
karaf@root()> config:property-set dataSourceType DataSource
karaf@root()> config:property-set jdbc.url jdbc:mysql://localhost:3306/reportdb
karaf@root()> config:property-set jdbc.user fuse
karaf@root()> config:property-set jdbc.password fuse
karaf@root()> config:property-set jdbc.useSSL false
karaf@root()> config:update

karaf@root()> feature:install jndi

karaf@root()> jndi:names
JNDI Name                 │ Class Name
──────────────────────────┼───────────────────────────────────────────────
osgi:service/jndi         │ org.apache.karaf.jndi.internal.JndiServiceImpl
osgi:service/jdbc/mysqlds │ com.mysql.jdbc.jdbc2.optional.MysqlDataSource

표시된 대로 데이터 소스는 osgi:service/jdbc/mysqlds JNDI 이름에서 사용할 수 있습니다.

그러나 OSGi에서 JPA의 경우 전체 JNDI 이름을 사용해야 합니다. 다음은 데이터 소스 참조를 지정하는 샘플 META-INF/persistence.xml 조각입니다.

<jta-data-source>
    osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/mysqlds)
</jta-data-source>
<non-jta-data-source>
    osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/mysqlds)
</non-jta-data-source>

위의 구성이 없으면 다음과 같은 오류가 발생할 수 있습니다.

Persistence unit "pu-name" refers to a non OSGi service DataSource
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.