Tapestry + Spring + Hibernate
- ライブラリのインストール
以下のサイトよりダウンロード
http://www.springframework.org/
# cd /usr/local/arch # wget http://voxel.dl.sourceforge.net/.../spring-framework-1.1.3-with-dependencies.zip # cd ../src # jar xvf ../arch/spring-framework-1.1.3-with-dependencies.zip # cd spring-framework-1.1.3/dist # cp /home/test/WEB-INF/lib # cd ../lib/aopalliance # cp aopalliance.jar /home/test/WEB-INF/lib
- 各種設定
# cd /home/test/WEB-INF # vi web.xml
<web-app>ディレクティブに追加
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener># vi applicationContext.xml
<?xml version="1.0"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="messageSource" class=
"org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename"><value>messages</value></property>
</bean>
<bean id="sessionFactory" class=
"org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="configLocation"><value>
/WEB-INF/classes/hibernate.cfg.xml
</value></property>
</bean>
<bean id="transactionManager" class=
"org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="testServiceTarget" class="com.domain.test.TestServiceImpl">
<property name="testDataDao"><ref local="testDataDao"/></property>
</bean>
<bean id="testService" class=
"org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="testServiceTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="store*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="testDataDao" class="com.domain.dao.TestDataDaoImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
</beans>- サンプルDAOの作成
# cd /home/test/src/com/domain/dao # vi TestDataDaoImpl.java
package com.domain.dao;
import java.util.List;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import com.domain.dao.TestDataDao;
import com.domain.pojo.TestData;
public class TestDataDaoImpl extends HibernateDaoSupport implements TestDataDao{
public TestDataDaoImpl(){}
public TestData[] getAllTestData(){
List list=getHibernateTemplate().find("from TestData");
TestData[] testDatas=new TestData[list.size()];
list.toArray(testDatas);
return testDatas;
}
}# vi TestDataDao.java
package com.domain.dao;
import java.io.Serializable;
import com.domain.pojo.TestData;
public interface TestDataDao extends Serializable{
public TestData[] getAllTestData();
}- サービスの作成
# mkdir /home/test/src/com/domain/util # cd /home/test/src/com/domain/util # vi CommonConst.java
package com.domain.util;
public interface CommonConst{
public static final String applicationContextKey="appContext";
}# mkdir ../test # cd ../test # vi TestServiceImpl.java
package com.domain.test;
import com.domain.pojo.TestData;
import com.domain.dao.TestDataDao;
public class TestServiceImpl implements TestService{
private TestDataDao testDataDao;
public TestData[] getAllTestData(){return getTestDataDao().getAllTestData();}
public TestDataDao getTestDataDao(){return this.testDataDao;}
public void setTestDataDao(TestDataDao testDataDao){this.testDataDao=testDataDao;}
}# vi TestService.java
package com.domain.test;
import java.util.Date;
import com.domain.pojo.TestData;
import com.domain.dao.TestDataDao;
public interface TestService{
public TestData[] getAllTestData();
public TestDataDao getTestDataDao();
public void setTestDataDao(TestDataDao testDataDao);
}# vi TestEngine.java
import java.util.Map;
import org.apache.tapestry.engine.BaseEngine;
import org.apache.tapestry.request.RequestContext;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.domain.util.CommonConst;
public class TestEngine extends BaseEngine implements CommonConst{
protected void setupForRequest(RequestContext context){
super.setupForRequest(context);
Map global=(Map)getGlobal();
ApplicationContext ac=(ApplicationContext)global.get(applicationContextKey);
ac=WebApplicationContextUtils.getWebApplicationContext(context.getServlet().getServletContext());
global.put(applicationContextKey,ac);
}
}- ページの作成
# mkdir ../page # cd ../page # vi LoopPage.java
package com.domain.page;
import org.apache.tapestry.html.BasePage;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.event.PageRenderListener;
import com.domain.pojo.TestData;
import com.domain.test.TestService;
public abstract class LoopPage extends BasePage implements PageRenderListener{
public abstract TestService getTestService();
public void pageBeginRender(PageEvent event){
setTestDataList(getTestService().getAllTestData());
}
public abstract TestData[] getTestDataList();
public abstract void setTestDataList(TestData[] value);
public abstract TestData getTestData();
public abstract void setTestData(TestData value);
}# cd /home/test/WEB-INF # vi Loop.page
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page-specification
PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
<page-specification class="com.domain.page.LoopPage">
<property-specification name="testDataList" type="com.domain.pojo.TestData[]"/>
<property-specification name="testData" type="com.domain.pojo.TestData"/>
<property-specification name="testService" type="com.domain.test.TestService">
global.appContext.getBean("testService")
</property-specification>
</page-specification># vi Loop.html
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Date</th>
</tr>
<tr jwcid="@Foreach" source="ognl:testDataList" value="ognl:testData" element="tr">
<td><span jwcid="@Insert" value="ognl:testData.testId"/></td>
<td><span jwcid="@Insert" value="ognl:testData.testName"/></td>
<td><span jwcid="@Insert" value="ognl:testData.regDate"/></td>
</tr>
</table># vi Home.page
<page-specification>ディレクティブに追加
<component id="linkToLoop" type="PageLink"> <static-binding name="page">Loop</static-binding> </component>
# vi Home.html
<body>ディレクティブに追加
<br><a jwcid="linkToLoop">LoopPage</a></br>
以下のURLにアクセスするとLoopPage
へのリンクがある。
http://www.domain.com/test/app
Counter: 587,
today: 1,
yesterday: 0
最終更新: 2008-11-26 (水) 02:09:09 (JST) (1272d) by aqua
