strtus2.3.6+guice4+jpa(hibernate4)的配置-第二篇

上一篇中只是简单列出了需要的jar包和配置文件,现在进入配置阶段。

1.配置strtus2

   我不用strtus很久了,因为用spring时直接使用了springmvc,感觉也很好用,而且又是spring本身支持的,不需要再配置其他mvc框架,减少了jar包冲突和缩短了学习时间。我目前的考虑是即使用spring也不再使用它的事务管理了,如果不用spring的情况下mvc框架当然要找个成熟并且功能强大的了。我还是选了struts2。如果对于struts2熟悉的人完全可以不看这段,其实也没啥特殊的,照官方文档设置一下也就可以了。废话说完了,开始配置:

  在web.xml中加入strtus2的filter

  <filter-name>struts2</filter-name>
  <filter-class>
  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  </filter-class>
  <init-param>
<param-name>loggerFactory</param-name>
<param-value>
com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory
</param-value>
</init-param>
 </filter>
  <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*.action</url-pattern>
  </filter-mapping>

 配置很普通,其中loggerFactory这个参数,我使用了conmmon-logging,log4j,所以这么配置了,如果你不用也可以使用其他的,我前一篇的文章里也包含此配置的jar包。

在src源代码目录下建立struts.xml,strtus配置就基本完成了。启动一下没有异常吧。

这里用myeclipse也能直接生成,不多说了。

 2.Guice配置

    我写这篇文章的主要目的是用struts与guice结合,所以这里才到关键的地方。说明一下,我这里的配置都是参考guice官方的文档来做的,只不过说的通俗一些。官方文档个人认为跟聊斋有一拼,惜墨如金啊。一句都不多说,没废话,我配置过程中经常漏掉一句话就导致执行不正常或者启动不了。

  首先修改web.xml,加入listener和filter

   <listener>
   <listener-class>com.xxx.ServletContextListener</listener-class>
</listener>


<filter>
   <filter-name>guiceFilter</filter-name>
   <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>guiceFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

  filter是guice提供的,直接写上就行了。ServletContextListener需要自己编写代码,用于进行注入或者模块的安装:

   

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.persist.PersistFilter;
import com.google.inject.persist.jpa.JpaPersistModule;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule;
import com.google.inject.struts2.Struts2GuicePluginModule;
//import com.ngworld.demo.servlet.HelloWorldServlet;


public class ServletContextListener extends GuiceServletContextListener {


@Override
protected Injector getInjector() {
//PersistService service;
Injector inj =  Guice.createInjector(new ServletModule() {
            protected void configureServlets() {
            install(new JpaPersistModule("unit1"));  // like we saw earlier.
           
                //serve("/helloworld").with(HelloWorldServlet.class);
                
                filter("/*").through(PersistFilter.class);
            }
        },new Struts2GuicePluginModule());



return inj;
}


}

install(new JpaPersistModule("unit1"));  这句,一般要写在第一个,也就是第一个模块要安装jpa持久化模块,unit1是在persistence.xml中配置的unit的名称,这两处需要写成一样的,否则加载会不成功。filter("/*").through(PersistFilter.class);是为程序增加持久化过滤器,这个是web程序必须的,也是不同于普通java程序的地方。

struts2和guice整合配置基本上就可以了。现在可以在action里面注入guice管理的bean了。

3.下面是persistence.xml的配置

  目前,guice(我用的4.0 beta2)只支持jpa,所以我就用jpa来做事务管理。

首先是persistence.xml的配置文件内容:

  <persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="unit1" transaction-type="RESOURCE_LOCAL">

<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.test.vo.Test</class>
<properties>
<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<!-- 最大连接数 -->
<property name="hibernate.c3p0.max_size" value="2"/>
<!-- 最小连接数 -->
<property name="hibernate.c3p0.min_size" value="1"/>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout" value="120"/>
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements" value="100"/>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<property name="hibernate.c3p0.idle_test_period" value="120"/>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment" value="1"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=gbk"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
</properties>
</persistence-unit>
</persistence>

  数据源使用了c3p0,库用的mysql5.5。在文件中<class>com.test.vo.Test</class>指定了唯一一个持久化类Test,对应mysql中一个test表。这是个标准的hibernate实体类。项目中如果用到其他实体类,可以增加多个class标记来指定。

    注意:persistence.xml文件的位置,必须是src下META-INF目录下。我放到webroot/META-INF下试过,结果找不到。

    persistence-unit name="unit1" 这个unit1就是单元的名称,与GuiceServletContextListener 代码中那个unit1是一样的,这两个必须保持一至。

最后,在struts.xml中增加:

<constant name="struts.objectFactory" value="guice" />

 到此,环境搭建完成了,下一篇说说基本的代码编写。


   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值