1概要

この記事では、Hibernate/JPAを使用してhttps://en.wikipedia.org/wiki/Java

Naming

and

Directory

Interface[JNDI]データソースを使用してSpringアプリケーションを作成します。

SpringとHibernateの基本を再発見したい場合は、link:/永続層 – 春とjpa[この記事]を調べてください。


2データソースの宣言


2.1. システム

JNDIデータソースを使用しているので、それをアプリケーションで定義するのではなく、アプリケーションコンテナで定義します。

この例では、8.5.xバージョンのhttp://tomcat.apache.org/[Tomcat]と9.5.xバージョンのhttps://www.postgresql.org/[PostgreSQL]データベースを使用します。 。

他のJavaアプリケーションコンテナと選択したデータベースを使用して、同じ手順を複製できるはずです(適切なJDBC jarがある限り)。


2.2. アプリケーションコンテナでデータソースを宣言する

データソースは、

<GlobalNamingResources>

要素内の

<tomcat

home>/conf/server.xml__ファイルで宣言します。

データベースサーバーがアプリケーションコンテナと同じマシン上で実行されており、目的のデータベースの名前が

postgres

で、ユーザー名が

baeldung

、パスワードが

pass1234

の場合、リソースは次のようになります。

<Resource name="jdbc/BaeldungDatabase"
  auth="Container"
  type="javax.sql.DataSource"
  driverClassName="org.postgresql.Driver"
  url="jdbc:postgresql://localhost:5432/postgres"
  username="baeldung"
  password="pass1234"
  maxTotal="20"
  maxIdle="10"
  maxWaitMillis="-1"/>

ここでは、リソースの名前を

jdbc/BaeldungDatabase

にしました。これは、このデータソースを参照するときに使用される名前になります。

その型とデータベースドライバのクラス名も指定する必要があります。これが機能するためには、対応するjarも

<tomcat

home>/lib/__に配置する必要があります(この場合は、PostgreSQLのJDBC jar)。

残りの設定パラメータは以下のとおりです。


  • auth =” Container”

    – コンテナがサインオンすることを意味します

アプリケーションに代わってリソースマネージャ
**

maxTotal、maxIdle、

、および

maxWaitMillis

– プール接続の

設定パラメータ

また、

<tomcat

home>/conf/context.xmlの

<Context>

要素内に

ResourceLink

を定義する必要があります。

<ResourceLink
  name="jdbc/BaeldungDatabase"
  global="jdbc/BaeldungDatabase"
  type="javax.sql.DataSource"/>


server.xml



Resource

で定義した名前を使用していることに注意してください。

** 3リソースを使う


3.1. アプリケーションを設定する

今度は、純粋なJava構成を使用して単純なSpring JPA Hibernateアプリケーションを定義します。

まず、Springのコンテキストの設定を定義することから始めます(ここではJNDIに焦点を当てており、あなたは既にSpringの設定の基本を知っていると仮定しています)。

@Configuration
@EnableTransactionManagement
@PropertySource("classpath:persistence-jndi.properties")
@ComponentScan("org.baeldung.persistence")
@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao")
public class PersistenceJNDIConfig {

    @Autowired
    private Environment env;

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory()
      throws NamingException {
        LocalContainerEntityManagerFactoryBean em
          = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());

       //rest of entity manager configuration
        return em;
    }

    @Bean
    public DataSource dataSource() throws NamingException {
        return (DataSource) new JndiTemplate().lookup(env.getProperty("jdbc.url"));
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);
        return transactionManager;
    }

   //rest of persistence configuration
}

リンクの設定の完全な例があることに注意してください。


dataSource

Beanを作成するには、アプリケーションコンテナで定義したJNDIリソースを探す必要があります。これを

persistence-jndi.properties

キーに格納します(他のプロパティもあります)。

jdbc.url=java:comp/env/jdbc/BaeldungDatabase


jdbc.urlプロパティ

では、検索するルート名を定義しています。

java:comp/env/

(これはデフォルトで、コンポーネントと環境に対応します)、そして

server.xml

で使用したのと同じ名前:


jdbc/BaeldungDatabase


3.2. JPA構成 – モデル、DAO、およびサービス

生成された

id



name

を持つ

@ Entity

アノテーションを持つ単純なモデルを使用します。

@Entity
public class Foo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

   //default getters and setters
}

簡単なリポジトリを定義しましょう。

@Repository
public class FooDao {

    @PersistenceContext
    private EntityManager entityManager;

    public List<Foo> findAll() {
        return entityManager
          .createQuery("from " + Foo.class.getName()).getResultList();
    }
}

そして最後に、簡単なサービスを作成しましょう。

@Service
@Transactional
public class FooService {

    @Autowired
    private FooDao dao;

    public List<Foo> findAll() {
        return dao.findAll();
    }
}

これで、SpringアプリケーションでJNDIデータソースを使用するために必要なものがすべて揃いました。


4結論

この記事では、JNDIデータソースと連携するJPA Hibernate設定を使用して、Springアプリケーションの例を作成しました。

最も重要な部分は、アプリケーションコンテナ内のリソースの定義と設定上のJNDIリソースの検索です。

そしていつものように、完全なプロジェクトはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-jpa[GitHubに載っています]