Tomcat Sunucuda JNDI ile Hibernate konfigürasyonu

Tomcat uygulama sunucusunda context.xml conf. dosyasından DataSource bilgilerini JNDI pattern bilgisi ile alıp EntityManager nasıl oluştururuz?

Şöyle ki;

Tomcat altındaki context.xml içerisine resource tanımlamamız gerekiyor.

<Context>
<Resource auth=”Container”      driverClassName=”oracle.jdbc.driver.OracleDriver”
initialSize=”20″ maxActive=”100″ maxIdle=”30″ maxWait=”10000″
name=”jdbc/jndiName” validationQuery=”select 1 from dual”
password=”password” type=”javax.sql.DataSource”
factory=”org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory”
url=”your DB connection url” username=”username”/>
</Context>

Bu resource bilgileri içerisinde bağlantı bilgilerinin (url, kul. adı, şifre vs.) haricinde hangi kütüphanenin DataSource sınıfından yararlanacağımızıda belirtmemiz gerekiyor. “name” özelliği ise bizim JNDI patern bilgisini yazdığımız kısım.

Projemizin web.xml dosyası içerisine;

<resource-ref>
<description>Oracle DB Connection</description>
<res-ref-name>jdbc/jndiName</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

eklememiz gerekiyor. Bu ayarları yaptıktan sonra javax.naming kütüphanesini kullanarak bilgileri çekeceğiz:

InitialContext initialContext = new InitialContext();
BasicDataSource  envCtx = (BasicDataSource) initialContext.lookup(“java:comp/env/jdbc/jndiName”);

envCtx.getDriverClassName();
envCtx.getUrl();
envCtx.getUsername();

..

şeklinde gereken bilgileri aldıktan sonra bir map yardımıyla EntityManagerFactory oluşturuyoruz. Buradaki BasicDataSource sınıfı org.apache.tomcat.dbcp.dbcp kütüphanesini ait.

HashMap<String, String> map = new HashMap<String, String>();
map.put(Environment.DRIVER, driver);
map.put(Environment.URL, url);
map.put(Environment.USER, user);
……
EntitiyManagerFactory factory = Persistence.createEntityManagerFactory(yourPersistanceUnitName, map);

EntityManager em = factory.createEntityManager();

Environment sınıfı  org.hibernate.cfg kütüphanesine ait.