TITLE: -- tomcat6013+myeclispe55m1+jsf12+spring2+proxool+jtds 的开发实现!!
先前,我们已经配置了好了用tomcat6013+myeclispe55m1+jsf12的开发环境!!
地址:
http://fangbiao23.iteye.com/admin/show/98458
接下来我们就要与数据库打交道了!!
该节我们将应用开源连接池proxool-090RC3与开源JDBC驱动器jtds12作为我们应用程序与数据库打交道,
我们应用使用的数据库是sqlserver2000,有点老了,不过你也可以尝试使用sqlserver2005
在此,我不推蒋使用官方的jdbc驱动SQLServerDriver,因为他与连接池proxool所联合的137错误令我闷了半天!
接下来,让我们到sourceforge网上去下载我们所需要的库:
proxool-0.9.0RC3.jar 和 jtds-1.2.jar
把他们加入到我们先前的lib中
一、配置proxool
偶在web-inf下创建一个datasource.xml(数据源配置)
详情如下:
xml 代码
- <!---->xml version="1.0" encoding="UTF-8"?>
- <!---->
- "http://www.springframework.org/dtd/spring-beans.dtd">
-
- <beans>
-
- <bean id="placeholderConfig"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-
- <property name="location">
- <value>/WEB-INF/mssqlJdbc.propertiesvalue>
- property>
- bean>
- <bean id="mssql_dataSource"
- class="org.logicalcobwebs.proxool.ProxoolDataSource">
- <property name="driver">
- <value>${proxool.driverName}value>
- property>
- <property name="driverUrl">
- <value>${proxool.url}value>
- property>
- <property name="user">
- <value>${proxool.userName}value>
- property>
- <property name="password">
- <value>${proxool.password}value>
- property>
- <property name="houseKeepingTestSql">
- <value>${proxool.houseKeepingTestSql}value>
- property>
- <property name="prototypeCount">
- <value>${proxool.prototypeCount}value>
- property>
- <property name="houseKeepingSleepTime">
- <value>${proxool.hourseKeepingSleepTime}value>
- property>
- <property name="maximumConnectionCount">
- <value>${proxool.maximumConnectionCount}value>
- property>
- <property name="minimumConnectionCount">
- <value>${proxool.minimumConnectionCount}value>
- property>
- bean>
- beans>
创建WEB-INF/mssqlJdbc.properties文件,用于与mssql_dataSource下参数相映射
#数据库名称
proxool.datasource = jsfDemo
#数据库驱动名称
#proxool.driverName = com.microsoft.jdbc.sqlserver.SQLServerDriver
proxool.driverName =net.sourceforge.jtds.jdbc.Driver
#连接的url{可能是proxool的Bug,只能把用户名和密码写在url上(具体你可以参考proxoolDataSource这个类[关于各参数据加载次序])}
proxool.url =jdbc:jtds:sqlserver://localhost:1433/${proxool.datasource};user=sa;password=1234
#用户名称
proxool.userName =sa
#密码
proxool.password =1234
#数据源别名
#proxool.alias = myProxool
#侦察时间间隔
proxool.hourseKeepingSleepTime = 60000
#最小空闲数
proxool.prototypeCount = 2
#最大连接数
proxool.maximumConnectionCount = 50
#最小连接数
proxool.minimumConnectionCount = 2
#执行语句是否要记录
#proxool.trace = false
#记录执行的详细信息
#proxool.verbose = false
#测试的SQL执行语句
proxool.houseKeepingTestSql = select getDate()
#最大活动时间(超过此时间线程将被kill,默认为5分钟)
proxool.maximumActiveTime = 300000
#连接最长时间(默认为4个小时)
proxool.maximumConnectionLifetime = 3060000000
此外,我们可以在web.xml中装载一个proxool提供的Servlet,以便我们可以随时查看连接池的连接情况,该处可选
xml 代码
- <servlet>
- <servlet-name>adminservlet-name>
- <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServletservlet-class>
- servlet>
-
-
- <servlet-mapping>
- <servlet-name>adminservlet-name>
- <url-pattern>/adminurl-pattern>
- servlet-mapping>
当应用部署成功并开始运作后,我们可以输入http://localhost:8080/项目名/admin
你就可以查询相关的数据库连接池情况
由于开发的跟风和软件本身的性能,我选择了spring作业我的业务操层,持久层将使用Ibatis,但此实例偶将不涉及ibatis,偶
将利用spring的JdbcTemplate来进行数据库CRUD操作
NOW,选择项目,右击>>选择Myeclipse>>add Spring Capli...
选择spring2-->core library && aop library && web library ,单击finish ,OK
打开Web.xml,在里面进行相关的设置,偶给出其配置成功的web.xml
xml 代码
- <!---->xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
- <context-param>
- <param-name>javax.faces.CONFIG_FILESparam-name>
- <param-value>/WEB-INF/faces-config.xmlparam-value>
- context-param>
-
- <context-param>
- <param-name>log4jConfigLocationparam-name>
- <param-value>/WEB-INF/log4j.propertiesparam-value>
- context-param>
-
- <context-param>
- <param-name>contextConfigLocationparam-name>
- <param-value>/WEB-INF/datasource.xml /WEB-INF/applicationContext.xmlparam-value>
- context-param>
-
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>
- listener>
- <listener>
- <listener-class> org.springframework.web.context.ContextLoaderListenerlistener-class>
- listener>
- <listener>
- <listener-class>com.sun.faces.config.ConfigureListenerlistener-class>
- listener>
-
- <servlet>
- <servlet-name>fServletservlet-name>
- <servlet-class>javax.faces.webapp.FacesServletservlet-class>
- <load-on-startup>0load-on-startup>
- servlet>
-
- <servlet>
- <servlet-name>adminservlet-name>
- <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServletservlet-class>
- servlet>
-
- <servlet-mapping>
- <servlet-name>fServletservlet-name>
- <url-pattern>*.jsfurl-pattern>
- servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>adminservlet-name>
- <url-pattern>/adminurl-pattern>
- servlet-mapping>
- web-app>
现在,我们的应用中已经有了jsf/spring/proxool/jtds
如何把他们的关系相互的整合起来呢
首先,利用简单的配置整合JSF ^ SPRING
该配置将在faces-config.xml中进行设置,具体如下:
xml 代码
- <application>
-
- <message-bundle>mes.messagesmessage-bundle>
- <locale-config>
- <default-locale>zh_CNdefault-locale>
- <supported-locale>ensupported-locale>
- locale-config>
-
- <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolvervariable-resolver>
- application>
那么下面,将是我们的spring与数据库之间的搭桥啦
记得先前我们创建的mssql_dataSource吗!!我们将利用spring的JdbcDaoSupport和JdbcTemplate来进行交接
我们创建一个类来实现,如下所示:
java 代码
- package com.fangbiao.spring;
- import java.util.List;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.support.JdbcDaoSupport;
-
-
-
-
-
- public class UserDaoImpl extends JdbcDaoSupport implements IUserDao{
-
-
- public List findByUserId() {
-
-
-
- JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
- return jdbcTemplate.queryForList(FIND_BY_USERID);
- }
-
-
-
- }
在这个类中我没有把他独立出来,所以当你要创建一个真实的项目时,请不要这么做,这样你会重复写很多次类似的代码,如JdbcTemplate
现在,来说说我们这节的目标 ,我们将通过用户web请求,从一个数据库中取出所有用户的数据信息
一、创建数据库和相应的数据表信息
sql 代码
- create database jsfDemo
- go
- use jsfDemo
- go
- drop table myJsfUser
- go
- create table myJsfUser
- (
- userId decimal identity(1,1) constraint pk_userId primary key,
- userName varchar(25) not null,
- userPsw varchar(18) not null,
- userAge int not null,
- userAddress varchar(100)
- )
-
- go
- insert into myJsfUser select 'fangbiao', 'fangbiao', 24, 'zhongguo guangzhou'
- insert into myJsfUser select '小郑', 'fangbiao', 24, 'zhongguo guangzhou'
- insert into myJsfUser select 'mikey', 'fangbiao', 24, 'zhongguo shanghai'
- insert into myJsfUser select 'duck', 'fangbiao', 24, 'zhongguo guangzhou tianhe'
- go
- select * from myJsfUser
二、创建Jsf与Spring上下文环境交接的助手类对象
java 代码
- package com.fangbiao.jsf.util;
- import org.springframework.context.ApplicationContext;
- import org.springframework.web.context.support.WebApplicationContextUtils;
- import javax.faces.context.FacesContext;
- import javax.servlet.ServletContext;
-
-
-
-
- public class SpringFacesUtil {
-
-
-
-
-
- public static Object findBean(String beanName){
- ServletContext context = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
- ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
- return ctx.getBean(beanName);
- }
- }
三、创建我们的业务对象,目的是查找所有的用户数据
(1)、首先,定义一个业务对象接口(把关系定义在接口中是JAVA编程来实现重用的最大优点)。
java 代码
- package com.fangbiao.spring;
- import java.util.List;
-
-
-
-
-
- public interface IUserBusinessService {
-
-
-
- public List getUserWithdUserId();
- }
(2)、定义一个业务对象的实现类对象,该对象将具体的实现赋予DAO去实现。
java 代码
- package com.fangbiao.spring;
-
- import java.util.List;
-
-
-
-
-
-
- public class UserBusinessImpl implements IUserBusinessService {
-
- IUserDao userDao;
-
-
-
-
- public List getUserWithdUserId() {
-
- return userDao.findByUserId();
- }
-
- public void setUserDao(IUserDao iud){
- this.userDao = iud;
- }
- }
(3)定义一个UserDao的接口,声明相应的dao实现
java 代码
- package com.fangbiao.spring;
- import java.util.List;
-
-
-
-
-
- public interface IUserDao {
-
- public final String FIND_BY_USERID = "SELECT userName,userPsw,userAge,userAddress FROM myJsfUser WHERE userId <> 0";
-
- public List findByUserId();
- }
(4)实现UserDao接口的具体类对角,该类是最基础的DAO底层操作实现,该对象引用了spring中JDBC实现的JdbcTemplate对象,以便完
成较为低级的JDBC实现
java 代码
- package com.fangbiao.spring;
- import java.util.List;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.support.JdbcDaoSupport;
-
-
-
-
-
- public class UserDaoImpl extends JdbcDaoSupport implements IUserDao{
-
- public List findByUserId() {
-
- JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
- return jdbcTemplate.queryForList(FIND_BY_USERID);
- }
- }
(5)、定义的一个简单的包装类对象,以便不暴露我们的相关的业务操作对象
java 代码
- package com.fangbiao.spring;
-
- import java.util.List;
-
-
- import com.fangbiao.jsf.util.SpringFacesUtil;
- import com.fangbiao.spring.IUserBusinessService;
-
-
-
-
- public class SpringTest
- {
-
- public List doSpringTest(){
-
- IUserBusinessService iubs = (IUserBusinessService)SpringFacesUtil.findBean("user_business");
- return iubs.getUserWithdUserId();
- }
- }
四、以上完成了我们的Spring业务实现和DAO实现,现在来看看我们的交互层实现
(1)、现在就来写我们的View对角,以便把查找的结果显现出来
java 代码
- package com.fangbiao.jsf;
- import java.util.List;
-
- import com.fangbiao.jsf.util.SpringFacesUtil;
- import com.fangbiao.spring.SpringTest;
-
-
-
-
- public class UserList {
-
- private List allUserMsg;
- public List getAllUserMsg(){
-
- allUserMsg = ((SpringTest)SpringFacesUtil.findBean("spring_test")).doSpringTest();
- return allUserMsg;
- }
- }