Spring 、JPA 在此就不作詳細之介紹。
下載ThinWire 後將其Web、Spring、ThinWire相關的 jar library 放置/WEB-INF/lib 中後,該文章即將說明該如何整合Spring 和 ThinWire 且透過JPA來存取資料庫。這次整合的重點只有幾個檔案設定applicationContext.xml、web.xml 為這次主要的設定檔。
applicationContext.xml 主要設定如下:
<class="org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor"/>
宣告Spring support jpa 元件<bean id="personService" class="thinwrie.test.service.PersonServiceImpl"/>
程式主要實做
<bean id="entityManagerFactory" class="org.springframework.orm.jpa. LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="database" value="MYSQL" /> <property name="showSql" value="true" /> </bean> </property> </bean>
設定entityManagerFactory
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost/plain?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
設定資料庫
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
設定transactionManager
設定好之後,回想一下要如何取得Spring 的Service呢?對!就是透過Spring ApplicationContext
之前都會透過下列的敘述來取得我們所需要的Bean
WebApplicationContext appCtx = WebApplicationContextUtils.getWebApplicationContext( servletContext );
但是在
ThinWire 中並沒有提供可得到WebApplicationContext
的方法,所以透過ContextLoaderListener 這元件我們就可以辦到了
首先先建立繼承ContextLoaderListener 的Class
然後再建立另一各Class 來讀取Sping Bean 的 Method
這可以讓我們隨時可以用來取得Spring Bean.
接下來設定Web.xml
1. 設定所建立的
StaticContextLoaderListener Class
<
listener
>
<listener-class
>thinwrie.test.app.StaticContextLoaderListener
</listener-class
>
</listener
>2. 設定 ThinWire 所需要的設定
<servlet> <servlet-name>thinwire </servlet-name> <servlet-class>thinwire.render.web.WebServlet </servlet-class> <init-param> <param-name>mainClass </param-name> <param-value>thinwrie.ez.app.SayHi </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>thinwire </servlet-name> <url-pattern>/ </url-pattern> </servlet-mapping>
這麼一來所需要的佈署就準備好了,接下來就可以開始撰寫囉
1. 我們利用Spring 所支援的JPA來建立一各 Person 的Calss 如下圖所示
2.建立這Person 的 interface :
3.建立PersonService 的實做
4.最後我們利用ThinWire建立一各簡單的範例
public class SayHi { public static void main(String[] args)
{ // TODO Auto-generated method stub
final Dialog dialog = new Dialog("Simple ThinWire Application");
final GridBox gbx = new GridBox();
gbx.setBounds(25, 25, 300, 120);
gbx.setVisibleHeader(true);
GridBox.Column idcol = new GridBox.Column();
idcol.setName("ID");
idcol.setVisible(false);
GridBox.Column col1 = new GridBox.Column();
col1.setName("First Name");
col1.setVisible(true);
GridBox.Column col2 = new GridBox.Column();
col2.setName("Last Name");
col2.setVisible(true);
gbx.getColumns().add(idcol);
gbx.getColumns().add(col1);
gbx.getColumns().add(col2); PersonService fs = (PersonService) Spring.getBean("personService");
List personlist = fs.findAll();
for (int r = 0; r < personlist.size(); r++)
{
GridBox.Row row = new GridBox.Row();
Person ps = (Person)personlist.get(r);
String temp_first_name = ps.getFirst_name();
String temp_last_name = ps.getLast_name();
row.add(ps.getId());
row.add(temp_first_name); row.add(temp_last_name);
gbx.getRows().add(row);
}
dialog.getChildren().add(gbx);
dialog.setVisible(true);
}
}
然後將Tomcat 跑起來後 即會出現下圖所示之視窗
有人也許對我上面所舉的Person 的範例很眼熟,沒錯,我是利用Struts2官方網站所提供的範例,藉由這範例讓大家更能了解到核心技術採用好與否,更能選擇出更多更有彈性的UI,所以我將透過ThinWire也可以呈現模擬桌面化UI。
這是我第一篇的文章,有寫不好的地方請大家多多包含與指教。
沒有留言:
張貼留言