隨筆-86  評論-33  文章-0  trackbacks-0

                   ===============Spring+Hibernate+Struts配置===============
          spring加載log4j
             web.xml

             < context - param >
              
          < param - name > log4jConfigLocation </ param - name >
              
          < param - value >/ WEB - INF / classes / log4j.properties </ param - value >
            
          </ context - param >
            
          < listener >
              
          < listener - class > org.springframework.web.util.Log4jConfigListener </ listener - class >
            
          </ listener >


          一.spring+struts
          1.加載springContext
                通過struts-config.xml中增加plug-in插件來加載springContext
             <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
               <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
             </plug-in>
            
          applicationContext.xml為spring的配置文件

          2.將strutsAction交給Spring容器進行管理
                修改struts-config.xml中的action屬性,action的type值不指定具體的實現類,統一修改成代理類

            
            <action input="/login.jsp"
                   name="loginActionForm"
                   path="/loginAction" 
                   scope="request"   
                   type="org.springframework.web.struts.DelegatingActionProxy"
                   validate="false">
                <forward name="success" path="/success.jsp" />
                <forward name="failure" path="/failure.jsp" />
              </action>

          3.在applicationContext.xml中的bean name值設定與struts-config.xml中action path值相對應,以使代理類DelegatingActionProxy能夠根據傳入的path在springContext中找到相應的bean,并將實例返回給struts.
          <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
            <property name="login">
              <ref bean="loginBOProxy" />
            </property>
          </bean>

          二.spring+hibernate
            
          1.dateSource
                在springContext中設置dateSource Bean
               <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                  <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
                  <property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
                  <property name="username" value="it"></property>
                  <property name="password" value="it"></property>
               </bean>
               2.sessionFactory
                 在springContext中設置sessionFactory Bean
            <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
              <property name="dataSource" ref="dataSource"></property>
              <property name="mappingResources">
                  <list>
                    <value>hbm\OvertimeRecord.hbm.xml</value><!--hbm映射文件-->
                    <value>hbm\OvertimePermit.hbm.xml</value>
                  </list>
              </property>
              <property name="hibernateProperties">
                  <props>
                     <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
                     <prop key="hibernate.show_sql">true</prop>
                     <prop key="hibernate.jdbc.fetch_size">50</prop>
                     <prop key="hibernate.jdbc.batch_size">20</prop>
                  </props>
              </property>
            </bean>
           
           
          3.transactionManager
             在springContext中設置transactionManager Bean
           
            <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
               <property name="sessionFactory">
                 <ref local="sessionFactory" />
               </property>
             </bean>

            
          4.DAO bean
                <bean id="Ilogin" class="com.derek.business.Login">
                    <property name="sessionFactory">
                        <ref local="sessionFactory"/>
                    </property>
                </bean>
                public class Login extends HibernateDaoSupport implements LoginInterface
                DAO 繼承HibernateDaoSupport
                HibernateSupport實現了HibernateTemplate和SessionFactory實例的關聯, HibernateTemplate對Hibernate Session操作進行了封裝,HibernateTemplate.execute方法則是一封裝機制的核心. 借助HibernateTemplate我們可以脫離每次數據操作必須首先獲得Session實例、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作.
                  Spring中的事務管理實際上是基于動態AOP機制實現,為了實現動態AOP,Spring在默認情況下會使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的對象必須實現一個接口,該接口定義了準備進行代理的方法。而對于沒有實現任何接口的Java Class,需要采用其他方式,Spring通過CGLib實現這一功能。


             5.DAOProxy 代理bean
                  通過代理,將上面的DAO bean 納入到spring容器的事務管理中,并在其中設置對哪些方法進行事務管理
               <bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                     <property name="transactionManager">
                          <ref bean="transactionManager" />
                     </property>
                     <property name="target">
                          <ref local="Ilogin" /> <!--所代理的bean-->
                     </property>
                     <property name="transactionAttributes">
                          <props>
                               <prop key="insert*">PROPAGATION_REQUIRED</prop> <!--以insert開頭的方法加入事務管理-->
                               <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <!--以get開頭的方法只讀-->
                          </props>
                     </property>
                </bean>

              
              6.action bean
                <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
                   <property name="login">
                      <ref bean="loginBOProxy" /> <!--要將其使用的DAO bean加入事務管理,就必須ref他的代理bean,且在LoginAction中該屬性須由其接口強制類型轉換-->
                   </property>
                </bean>

          示例代碼:
            struts-conifg.xml

          <? xml version = " 1.0 "  encoding = " UTF-8 " ?>
          <! DOCTYPE struts - config PUBLIC  " -//Apache Software Foundation//DTD Struts Configuration 1.1//EN "   " http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd " >
          < struts - config >

            
          < form - beans >
              
          < form - bean name = " loginActionForm "  type = " com.derek.form.LoginActionForm "   />
            
          </ form - beans >
            
          < action - mappings >
              
          < action input = " /login.jsp "  name = " loginActionForm "  path = " /loginAction "  scope = " request "  type = " org.springframework.web.struts.DelegatingActionProxy "  validate = " false " >
                
          < forward name = " success "  path = " /success.jsp "   />
                
          < forward name = " failure "  path = " /failure.jsp "   />
              
          </ action >
            
          </ action - mappings >
            
          < plug - in className = " org.springframework.web.struts.ContextLoaderPlugIn " >
              
          < set - property property = " contextConfigLocation "  value = " /WEB-INF/applicationContext.xml "   />
            
          </ plug - in >
          </ struts - config >

            applicationContext.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans SYSTEM "D:\JAVA\MyWork\SpringDemo\SpringWeb\WEB-INF\spring-beans.dtd">
          <!--DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"-->

          <!--
            
          - Root application context for the Countries application.
            
          - Web-specific beans are defined in "countries-servlet.xml".
            
          -->
          <beans>

          <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           
          <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
           
          <property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
           
          <property name="username" value="it"></property>
           
          <property name="password" value="itservice"></property>
          </bean>

          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
           
          <property name="dataSource" ref="dataSource"></property>
           
          <property name="mappingResources">
            
          <list>
              
          <value>hbm\OvertimeRecord.hbm.xml</value>
              
          <value>hbm\OvertimePermit.hbm.xml</value>
            
          </list>
           
          </property>
           
          <property name="hibernateProperties">
            
          <props>
               
          <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
               
          <prop key="hibernate.show_sql">true</prop>
               
          <prop key="hibernate.jdbc.fetch_size">50</prop>
               
          <prop key="hibernate.jdbc.batch_size">20</prop>
            
          </props>
           
          </property>
          </bean>

          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
             
          <property name="sessionFactory">
                 
          <ref local="sessionFactory" />
             
          </property>
          </bean>


          <!---------------使用JNDI數據源----------------
          bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
          <property name="jndiName">
            <value>jdbc/cqccms</value>
          </property>
          <property name="jndiEnvironment">
               <props>
                  <prop key="java.naming.factory.initial">
                    weblogic.jndi.WLInitialContextFactory
                  </prop>
                  <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
                  <prop key="java.naming.security.principal">weblogic</prop>
                  <prop key="java.naming.security.credentials">weblogic</prop>
               </props>   
             </property> 
          </bean>

          <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"
            lazy-init="default" autowire="default" dependency-check="default">
            <property name="environment">
               <props>
                  <prop key="java.naming.factory.initial">
                    weblogic.jndi.WLInitialContextFactory
                  </prop>
                  <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
                  <prop key="java.naming.security.principal">weblogic</prop>
                  <prop key="java.naming.security.credentials">weblogic</prop>
               </props>   
             </property>
          </bean>

          <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"
            lazy-init="default" autowire="default" dependency-check="default">
            <property name="jndiTemplate">
             <ref local="jndiTemplate" />
            </property>
            <property name="userTransactionName">
             <value>weblogic/transaction/UserTransaction</value>
            </property>
          </bean>

          --------------------------------->



          <bean id="RecordDao" class="com.derek.business.RecordDao">
            
          <property name="sessionFactory">
              
          <ref local="sessionFactory"/>
            
          </property>
          </bean>

          <bean id="RecordDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            
          <property name="transactionManager">
              
          <ref bean="transactionManager" />
            
          </property>
            
          <property name="target">
              
          <ref local="RecordDao" />
            
          </property>
            
          <property name="transactionAttributes">
              
          <props>
                
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
                
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
              
          </props>
            
          </property>
          </bean>

          <bean id="Ilogin" class="com.derek.business.Login">
            
          <property name="sessionFactory">
              
          <ref local="sessionFactory"/>
            
          </property>
          </bean>

          <bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            
          <property name="transactionManager">
              
          <ref bean="transactionManager" />
            
          </property>
            
          <property name="target">
              
          <ref local="Ilogin" />
            
          </property>
            
          <property name="transactionAttributes">
              
          <props>
                
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
                
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
              
          </props>
            
          </property>
          </bean>

          <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
            
          <property name="login">
              
          <ref bean="loginBOProxy" />
            
          </property>
          </bean>
          </beans>

          LoginInterface
          package com.derek.myinterface;

          public interface LoginInterface {
              
          public boolean check(String name,String pwd);
          }

          Login
          package com.derek.business;

          import com.derek.myinterface.LoginInterface;
          import org.hibernate.SessionFactory;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
          import java.util.List;

          public class Login extends HibernateDaoSupport implements LoginInterface{
              
          private SessionFactory sessionFactory;
              
          private String hsql = "from OvertimePermit where account=? and password=?";
              
          public Login() {}
              
          public boolean check(String name,String pwd){
                  String condition[] 
          = {name, pwd};//查詢條件
                  /**
                   * 借助HibernateTemplate我們可以脫離每次數據操作必須首先
                   * 獲得Session實例 、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作
                   
          */       
                  List l 
          = this.getHibernateTemplate().find(hsql, condition);
                  
                  
          if (l.size() > 0return true;
                    
          else return false;
              }
          }

          RecordDaoInterface
          package com.derek.myinterface;

          import java.util.List;
          import hbm.OvertimeRecord;

          public interface IRecordDao {
              
          public List findAll(String hsql);
              
          public void insert(OvertimeRecord or);
          }

          RecordDao
          package com.derek.business;

          import com.derek.myinterface.IRecordDao;
          import java.util.List;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
          import org.hibernate.SessionFactory;
          import hbm.OvertimeRecord;

          public class RecordDao extends HibernateDaoSupport implements IRecordDao{
              
          private SessionFactory sessionFactory;
              
          public RecordDao() {
              }

              
          public List findAll(String hsql) {
                 
          return this.getHibernateTemplate().find(hsql);
              }

              
          public void insert(OvertimeRecord or) {
                  
          this.getHibernateTemplate().saveOrUpdate(or);
              }
          }

          LoginAction通過容器注入的Login實例完成業務操作(必須由接口強制類型轉化)
          package com.derek.action;

          import javax.servlet.http.*;
          import com.derek.form.*;
          import org.apache.struts.action.*;
          import org.apache.log4j.Logger;
          import com.derek.myinterface.LoginInterface;

          public class LoginAction extends Action {
              
          private LoginInterface login;
              
          public ActionForward execute(ActionMapping actionMapping,
                                           ActionForm actionForm,
                                           HttpServletRequest servletRequest,
                                           HttpServletResponse servletResponse) {
                  Logger log 
          = Logger.getLogger(this.getClass().getName());
                  LoginActionForm loginActionForm 
          = (LoginActionForm) actionForm;
                  String name 
          = loginActionForm.getName();
                  String pwd 
          = loginActionForm.getPwd();
                  
          boolean TF = login.check(name,pwd);
                  
          if(TF){ log.warn("LoginSuccess------------");;return actionMapping.findForward("success");}
                    
          else{ log.warn("LoginFailure------------");;return actionMapping.findForward("failure");}
              }
              
          public void setLogin(LoginInterface Ilogin) {this.login = Ilogin;}
              
          public LoginInterface getLogin() {return login;}
          }

          類中直接通過Context獲得bean實例(必須通過代理類獲得實例且由其接口強制類型轉化)

          package com.derek.pub;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.FileSystemXmlApplicationContext;
          import com.derek.myinterface.IRecordDao;
          import java.util.List;
          import hbm.OvertimeRecord;

          public class Untitled1 {
              
          public Untitled1() {
              ApplicationContext ctx 
          = new FileSystemXmlApplicationContext("applicationContext.xml");
              IRecordDao recordDao 
          = (IRecordDao)ctx.getBean("RecordDaoProxy");
              OvertimeRecord newor 
          = new OvertimeRecord("004104","dada","100120","it","2006/04/02","2006/04/02","001145","david","001145","david","00","00","1","1","1","1");
              newor.setMark(
          "0");
              recordDao.insert(newor);
              List l 
          = recordDao.findAll("from OvertimeRecord");
              
          for(int i=0;i<l.size();i++){
              OvertimeRecord or 
          = (OvertimeRecord)l.get(i);
              System.out.println(or.getId());
              }
              }
              
          public static void main(String[] a){
              Untitled1 u 
          = new Untitled1();
              }
          }

                一個Spring application context的定義能夠被很多種不同的上下文實現所讀取, 比如FileSystemXmlApplicationContextClassPathXmlApplicationContext以及XmlWebApplicationContext。 默認的情況下,一個web應用程序會從”WEB-INF/applicationContext.xml”中得到root context。 在所有的Spring應用中,XML文件中定義的application context會把所有相關的application beans連接起來, 包括Hibernate session factory以及數據訪問和業務對象(就像上面定義的那些bean)。 它們中的大部分都不會意識到被Spring容器所管理,甚至在同其他bean合作的時候, 因為它們僅僅遵循JavaBeans的規范。一個bean屬性及可以表示值參數,也可以是其他的合作bean。 下面的bean定義能夠作為Spring web MVC context的一部分,在最基礎的 application context中訪問business beans。

          ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
          ProductService productService 
          = (ProductService) context.getBean("myProductService");
          ApplicationContext context 
          =
              
          new FileSystemXmlApplicationContext("C:/myContext.xml");
          ProductService productService 
          =
              (ProductService) context.getBean(
          "myProductService");
          ApplicationContext context 
          =
              
          new ClassPathXmlApplicationContext("myContext.xml");
          ProductService productService 
          =
              (ProductService) context.getBean(
          "myProductService");
          posted on 2006-05-10 14:22 Derek.Guo 閱讀(6625) 評論(13)  編輯  收藏 所屬分類: Java

          評論:
          # re: Spring+Hibernate+Struts 2006-07-24 21:56 | han
          你好!
          我在調試過程中遇到下面的問題,請指教
            回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-07-24 21:57 | han
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/appcontext.xml]: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: org.dom4j.DocumentException: null Nested exception: null
          org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:403)
          org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
          org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
          org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
          org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
          org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
          org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
          org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
          org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83)
          javax.servlet.GenericServlet.init(GenericServlet.java:211)
          org.apache.catalina.startup.Catalina.start(Catalina.java:556)
          sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          java.lang.reflect.Method.invoke(Method.java:324)
          org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
          org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

            回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-07-24 22:01 | han
          web.xml


          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/appcontext.xml</param-value>
          </context-param>
          <context-param>
          <param-name>log4jConfigLocation</param-name>
          <param-value>/WEB-INF/log4j.properties</param-value>
          </context-param>

          <servlet>
          <servlet-name>SpringContextServlet</servlet-name>
          <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet>
          <servlet-name>action</servlet-name>
          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
          <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
          </init-param>
          <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
          </init-param>
          <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
          <servlet-name>action</servlet-name>
          <url-pattern>*.do</url-pattern>
          </servlet-mapping>

          </web-app>

            回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-07-24 22:01 | han

          appcontext.xml


          <?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="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
          <property name="driverClassName">
          <value>com.mysql.jdbc.Driver</value>
          </property>
          <property name="url">
          <value>jdbc:mysql://localhost:3306/test</value>
          </property>
          <property name="username">
          <value>root</value>
          </property>
          <property name="password">
          <value>1</value>
          </property>
          </bean>
          <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
          <property name="dataSource">
          <ref local="dataSource"/>
          </property>
          <property name="mappingResources">
          <list>
          <value>person/Info.hbm.xml</value>

          </list>
          </property>
          <property name="hibernateProperties">
          <props>
          <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
          <prop key="hibernate.show_sql">true</prop>
          </props>
          </property>
          </bean>

          <bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
          <property name="sessionFactory">
          <ref local="sessionFactory"/>
          </property>
          </bean>
          <bean id="personService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          <property name="transactionManager">
          <ref local="myTransactionManager"/>
          </property>
          <property name="target">
          <ref local="personServiceImp"/>
          </property>
          <property name="transactionAttributes">
          <props>
          <prop key="get*">PROPAGATION_REQUIRED</prop>
          <prop key="save*">PROPAGATION_REQUIRED</prop>
          <prop key="update">PROPAGATION_REQUIRED</prop>
          <prop key="delete">PROPAGATION_REQUIRED</prop>
          </props>
          </property>
          </bean>



          <bean id="personDao" class="org.springframework.aop.framework.ProxyFactoryBean">
          <property name="proxyInterfaces">
          <value>person.PersonDao</value>
          </property>
          <property name="interceptorNames">
          <list>
          <value>hibernateInterceptor</value>
          <value>personDaoTarget</value>
          </list>
          </property>
          </bean>

          <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
          <property name="sessionFactory">
          <ref bean="sessionFactory"/>
          </property>
          </bean>



          <bean id="personServiceImp" class="person.PersonServiceImp">
          <property name="person">
          <ref local="personDao"/>
          </property>
          </bean>
          <bean id="personDaoTarget" class="person.PersonDaoImp">
          <property name="sessionFactory">
          <ref local="sessionFactory"/>
          </property>
          </bean>

          </beans>
            回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-07-24 22:03 | han
          Info.hbm.xml

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

          <hibernate-mapping package="person">
          <class
          name="Person"
          table="info"
          >
          <meta attribute="sync-DAO">false</meta>
          <id
          name="Id"
          type="string"
          column="name"
          >
          <generator class="sequence"/>
          </id>



          </class>
          </hibernate-mapping>

          hibernate.cfg.xml:


          <hibernate-configuration>
          <session-factory name="mySessionFacory">
          <!-- local connection properties -->
          <property name="hibernate.connection.url">
          jdbc:mysql://localhost:3306/test
          </property>
          <property name="hibernate.connection.driver_class">
          com.mysql.jdbc.Driver
          </property>
          <property name="hibernate.connection.username">root</property>
          <property name="hibernate.connection.password">1</property>
          <!-- property name="hibernate.connection.pool_size"></property -->
          <!-- dialect for MySQL -->
          <property name="dialect">
          org.hibernate.dialect.MySQLDialect
          </property>
          <property name="hibernate.show_sql">true</property>
          <property name="hibernate.transaction.factory_class">
          org.hibernate.transaction.HibernateTransactionFactory
          </property>
          <mapping resource="person/Info.hbm.xml" />
          </session-factory>
          </hibernate-configuration>
            回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-07-24 22:05 | han
          package person.action;

          import javax.servlet.ServletContext;
          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionServlet;
          import org.springframework.web.context.WebApplicationContext;
          import org.springframework.web.context.support.WebApplicationContextUtils;

          import person.PersonService;
          public class BaseAction extends Action {


          private PersonService personService;

          public void setServlet(ActionServlet actionServlet) {

          super.setServlet(actionServlet);
          ServletContext servletContext = actionServlet.getServletContext();
          WebApplicationContext wac = null;
          wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
          this.personService = (PersonService) wac.getBean("personServiceImp");
          }
          protected PersonService getPersonService() {
          return this.personService;
          }

          }
          當我調試時,在wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 處出現異常,我想知道為什么會這樣,應該怎樣解決,請高手指教,謝謝!  回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-07-25 09:15 | Derek.G
          你用的是hibernate3.0吧! 但你的spring配置文件中不是
          <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

          應該是:
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          你試試!  回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-07-25 09:22 | Derek.G
          在spring配置文件中配置一下action 如:
          <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
          <property name="login">
          <ref bean="loginBOProxy" />
          </property>
          </bean>

          和在struts-config配置文件中聲明loginAction的
          type = "org.springframework.web.struts.DelegatingActionProxy "

          那么在action中有set,get方法, spring 會幫你注入你定義的bean,無須你再自己用WebApplicationContextUtils去獲得bean實例  回復  更多評論
            
          # re: Spring+Hibernate+Struts 2006-10-20 17:33 | 王 均
          Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
          是因為TOMCAT少拉Jar包
          靠。
          找拉半天都沒有找到   回復  更多評論
            
          # re: Spring+Hibernate+Struts 2007-03-07 11:50 | kingking
          你好 你能把整個例子打包發給我嗎? 我調試的時候 出現了很多問題
          jinjin@catsic.com
            回復  更多評論
            
          # re: Spring+Hibernate+Struts 2007-03-09 13:32 | 張文弟
          可以整個例子也打個包發給我嗎?我老是調不通

          我的email 是 zhangwendi_java@163.com  回復  更多評論
            
          # re: Spring+Hibernate+Struts 2007-05-19 11:51 | leaderbird
          11:16:02,156 ERROR [ContextLoader] Context initialization failed
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/spring-context/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: jdbc not bound
          Caused by:
          javax.naming.NameNotFoundException: jdbc not bound
          at org.jnp.server.NamingServer.getBinding(NamingServer.java:491)
          at org.jnp.server.NamingServer.getBinding(NamingServer.java:499)
          at org.jnp.server.NamingServer.getObject(NamingServer.java:505)
          各位:能幫我說一下這個是什么問題嗎?
          我的datasource:
          <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
          <property name="jndiName">
          <value>java:comp/env/jdbc/game</value>
          </property>
          </bean>  回復  更多評論
            
          # re: Spring+Hibernate+Struts 2009-09-03 08:43 | zhaos
          能把整個例子打包也發給我嗎,我試了很久都不行啊。 zhaos@sunward.com.cn  回復  更多評論
            
          MSN:envoydada@hotmail.com QQ:34935442
          主站蜘蛛池模板: 将乐县| 泗水县| 电白县| 海南省| 胶南市| 平南县| 玛沁县| 托里县| 乌鲁木齐县| 天长市| 白城市| 山东| 贵港市| 怀宁县| 合作市| 安溪县| 庄浪县| 集安市| 潼南县| 乌拉特后旗| 汉源县| 巨鹿县| 鸡东县| 西峡县| 澎湖县| 南漳县| 元谋县| 格尔木市| 法库县| 海盐县| 凤阳县| 吴江市| 醴陵市| 望谟县| 湘潭县| 泰来县| 无为县| 新平| 凤庆县| 武陟县| 泸州市|