STEP3.ビジネス層INDEX1.サービスクラスのインターフェイスを作成プレゼンテーション層に公開するインターフェイスを定義します。このサンプルでは、DAOと同じ内容になっています。
package com.powerdee.service;
import java.util.List;
import com.powerdee.entity.BookInfo;
public interface IBookInfoService {
public BookInfo getBookInfo(String isbn) throws Exception;
public String saveBookInfo(BookInfo bookInfo) throws Exception;
public void deleteBookInfo(String isbn) throws Exception;
public List selectAllBookInfo() throws Exception;
}
2.トランザクション管理の実装サービスクラスでは、Springのトランザクション管理を利用します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/database.properties</value>
</list>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${database.connection.driver_class}</value>
</property>
<property name="url">
<value>${database.connection.url}</value>
</property>
<property name="username">
<value>${database.connection.username}</value>
</property>
<property name="password">
<value>${database.connection.password}</value>
</property>
</bean>
*** ここから追加部分 ***
<!-- Transaction -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="txProxyTemplate" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="bookInfoService" parent="txProxyTemplate">
<property name="target">
<bean class="com.powerdee.service.BookInfoServiceImpl">
<property name="bookInfoDao">
<ref bean="bookInfoDao"/>
</property>
</bean>
</property>
</bean>
*** ここまで ***
</beans>
3.サービスクラスの実装DAOのメソッドを呼び出すだけのシンプルな実装です。DIによってDAOクラスとは疎結合になっているのが確認できると思います。
package com.powerdee.service;
import java.util.List;
import com.powerdee.dao.IBookInfoDao;
import com.powerdee.entity.BookInfo;
public class BookInfoServiceImpl implements IBookInfoService {
private IBookInfoDao bookInfoDao;
public void setBookInfoDao(IBookInfoDao bookInfoDao) {
this.bookInfoDao = bookInfoDao;
}
public BookInfo getBookInfo(String isbn) throws Exception {
return bookInfoDao.getBookInfo(isbn);
}
public String saveBookInfo(BookInfo bookInfo) throws Exception {
return bookInfoDao.saveBookInfo(bookInfo);
}
public void deleteBookInfo(String isbn) throws Exception {
bookInfoDao.deleteBookInfo(isbn);
}
public List selectAllBookInfo() throws Exception {
return bookInfoDao.selectAllBookInfo();
}
}
おすすめ書籍
|