poniedziałek, 16 lipca 2012

JNDI / iBatis - konfiguracja połączenie do bazy danych

[Jboss, Oracle, iBatis]

Połączenie do bazy danych można skonfigurować w samej aplikacji podając odpowiednie parametry. Można również podpiąć się do połączenia skonfigurowanego na Jboss.

Drugi sposób wydaje się być lepszy z powodu większej elastyczności.
Poniższy przykład ma jedynie pokazywać jak wszystko spiąć - zdaję sobie sprawę iż zawiera pewne niedociągnięcia :)

Połączenie do Oracle skonfigurowane na Jboss:

Plik konfiguracyjny: JBoss\server\default\deploy\MyApp-ds.xml:
   <datasources>
   <local-tx-datasource>
   <jndi-name>MyAppDS</jndi-name>
   <connection-url>jdbc:oracle:thin:@localhost:1521:myapp</connection-url>
   <driver-class>oracle.jdbc.OracleDriver</driver-class>
   <user-name>myapp</user-name>
   <password>myapp</password>
   <min-pool-size>0</min-pool-size>
   <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
   </local-tx-datasource>
   </datasources>

Konfiguracja spring:
    <bean id="myAppDataBase" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName"><value>java:MyAppDS</value></property>
    </bean>

Połączenie do Oracle skonfigurowane wewnątrz aplikacji:

Konfiguracja spring:
     <bean id="myAppDataBase" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:myapp" />
        <property name="username" value="myapp" />
        <property name="password" value="myapp" />       
    </bean>

Część wspólna konfiguracji:

Konfiguracja spring: 
    <bean class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"
        id="myAppSqlClient">
        <property name="configLocation" value="classpath:/spring/ibatis/sqlMapConfigMyApp.xml" />
        <property name="dataSource" ref="myAppDataBase"/>
    </bean>

    <bean class="org.springframework.orm.ibatis.SqlMapClientTemplate"
        id="myAppSqlMapClientTemplate">
        <property name="sqlMapClient" ref="myAppSqlClient" />
    </bean>

    <bean class="com.blogger.programmingmt.myapp.dao.MyAppDAO"
        id="myappDAO">
        <property name="sqlMapClientTemplate" ref="myAppSqlMapClientTemplate" />
    </bean> 

sqlMapConfigMyApp.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    <sqlMap resource="spring/ibatis/sqlmaps/myApp.xml"/>
</sqlMapConfig>

myApp.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="MyApp">

    <resultMap class="com.blogger.programmingmt.myapp.dto.MyTestDTO"
        id="MyTestResultMap">
        <result column="ID" property="id" />
        <result column="IMIE" property="imie" />
        <result column="NAZWISKO" property="nazwisko" />
    </resultMap>

    <select id="findMyTestDTO" resultMap="MyTestResultMap">
    <![CDATA[
      select
          ID    as    ID
      ,    IMIE    as    IMIE
      ,    NAZWISKO    as    NAZWISKO
      from MyApp
    ]]>
    </select>
   
    <update id="updateMyTestDTO" parameterClass="com.blogger.programmingmt.myapp.dto.MyTestDTO">
    <![CDATA[
    update MyApp set
      IMIE = #imie#
    where
      ID = #id#
    ]]>
    </update>
</sqlMap>

Definicja DAO:
public class MyAppDAO extends SqlMapClientDaoSupport {
   
    @SuppressWarnings("unchecked")
    public List<MyTestDTO> findMyTestDTO() throws SQLException{
        return (List<MyTestDTO>) getSqlMapClient().queryForList("findMyTestDTO");
    }
   
    public int updateMyTestDTO(MyTestDTO toUpdate) throws SQLException{
        return getSqlMapClient().update("updateMyTestDTO",toUpdate);
    }

}

Brak komentarzy:

Prześlij komentarz