posts - 32, comments - 153, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          使用Hessian開發C/S模式的小系統

          Posted on 2007-07-28 10:48 Zou Ang 閱讀(3854) 評論(4)  編輯  收藏 所屬分類:
          使用Hessian開發C/S模式的小系統
          之所以叫小系統,主要是因為Hessian不支持Hibernate的延遲加載,所以需要在DAO層使用Hibernate的同學請注意了。

          Hessian其實是一種RMI技術,已經被集成在Spring Framework中了,這樣就很方便了。

          首先看客戶端

          第一步:
          先定義Client與Server交互的接口。
          比如:
          package edu.zsu.zouang.pos.service;

          import edu.zsu.zouang.pos.pojo.User;
          /**
           * Please Contact <a href="mailto:richardeee@gmail.com">Zou Ang</a>
           * 
          @author Zou Ang
           *
           
          */
          public interface ILoginService extends Service{
              
          public User login(String loginName, String password);
              
              
          public boolean logout(String loginName);
          }
          然后定義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="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                  
          <property name="location">
                      
          <value>config.properties</value>
                  
          </property>
              
          </bean>

              
          <bean id="urlMapping"
                  class
          ="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
              
          </bean>
              
              
          <bean id="loginClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
                  
          <property name="serviceUrl">
                      
          <value>http://${serverName}:${port}/${contextPath}/login.do</value>
                  
          </property>
                  
          <property name="serviceInterface">
                      
          <value>edu.zsu.zouang.pos.service.ILoginService</value>
                  
          </property>
              
          </bean>
          </beans>
          其中config.properties文件的內容如下:
          #在此配置服務器端信息

          #服務器地址
          serverName=172.18.17.111

          #服務器端端口號
          port=8080

          #服務器端上下文
          contextPath=pos
          這樣,在得到loginClient對象以后,就可以直接使用login(username,pwd)來登錄了。Hessian會自動把請求發送給服務器端。

          客戶端的代碼基本就這么多,主要應該關注的是對用戶的表現,至于業務邏輯,就讓服務器端去實現好了。

          再看服務器端的配置:
          接口跟上面的ILoginService一樣
          在我的程序中,使用了Spring MVC進行URL Mapping。
          web.xml內容如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
              
          <display-name>pos</display-name>
              
          <welcome-file-list>
                  
          <welcome-file>index.html</welcome-file>
                  
          <welcome-file>index.htm</welcome-file>
                  
          <welcome-file>index.jsp</welcome-file>
                  
          <welcome-file>default.html</welcome-file>
                  
          <welcome-file>default.htm</welcome-file>
                  
          <welcome-file>default.jsp</welcome-file>
              
          </welcome-file-list>
              
          <context-param>
              
          <param-name>webAppRootKey</param-name>
              
          <param-value>pos.root</param-value>
            
          </context-param>
              
          <listener>
                  
          <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
              
          </listener>
              
          <context-param>
                  
          <param-name>log4jConfigLocation</param-name>
                  
          <param-value>WEB-INF/log4j.properties</param-value>
              
          </context-param>
              
          <listener>
                  
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
              
          </listener>
              
          <context-param>
                  
          <param-name>contextConfigLocation</param-name>
                  
          <param-value>
                      WEB-INF/springctx-common.xml
                      WEB-INF/springctx-login.xml
                      WEB-INF/applicationContext.xml
                      WEB-INF/DispatcherServlet-servlet.xml
                  
          </param-value>
              
          </context-param>
              
          <filter>
                  
          <filter-name>hibernateFilter</filter-name>
                  
          <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
              
          </filter>

              
          <filter-mapping>
                  
          <filter-name>hibernateFilter</filter-name>
                  
          <url-pattern>*.do</url-pattern>
              
          </filter-mapping>
              
              
          <servlet>
                  
          <servlet-name>DispatcherServlet</servlet-name>
                  
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                  
          <load-on-startup>1</load-on-startup>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>DispatcherServlet</servlet-name>
                  
          <url-pattern>*.do</url-pattern>
              
          </servlet-mapping>
              
          <servlet>
                
          <servlet-name>dwr-invoker</servlet-name>
                
          <display-name>DWR Servlet</display-name>
                
          <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
                
          <init-param>
                    
          <param-name>debug</param-name>
                    
          <param-value>true</param-value>
                
          </init-param>
            
          </servlet>
            
          <servlet-mapping>
                
          <servlet-name>dwr-invoker</servlet-name>
                
          <url-pattern>/dwr/*</url-pattern>
            
          </servlet-mapping>
          </web-app>
          其中DispatcherServlet-servlet.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 name="/login.do" class="org.springframework.remoting.caucho.HessianServiceExporter">
                  
          <property name="service">
                      
          <ref bean="loginService" />
                  
          </property>
                  
          <property name="serviceInterface">
                      
          <value>edu.zsu.zouang.pos.service.ILoginService</value>
                  
          </property>
              
          </bean><!--
              
              <bean name="/inventory.do" class="org.springframework.remoting.caucho.HessianServiceExporter">
                  <property name="service">
                      <ref bean="posGoodsService" />
                  </property>
                  <property name="serviceInterface">
                      <value>edu.zsu.zouang.pos.service.IPosGoodsService</value>
                  </property>
              </bean>
              
          --></beans>

          在配置文件中的loginService就是服務器端時間處理登錄的對象,它要實現ILoginService接口
          在spring-common.xml中定義了數據源和一些基本的類,比如sessionFactory和transactionManager,dataSource使用了C3P0
          <?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="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                  
          <property name="location">
                      
          <value>WEB-INF/connection.properties</value>
                  
          </property>
              
          </bean>
              
          <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
                  
          <property name="driverClass" value="${jdbc.driverClassName}" />
                  
          <property name="jdbcUrl" value="${jdbc.url}" />
                  
          <property name="user" value="${jdbc.username}" />
                  
          <property name="password" value="${jdbc.password}" />
                  
          <property name="minPoolSize" value="${jdbc.minPoolSize}" />
                  
          <property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
                  
          <property name="maxIdleTime" value="${jdbc.maxIdleTime}" />
                  
          <property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
                  
          <property name="maxStatements" value="${jdbc.maxStatements}" />
                  
          <property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
                  
          <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" />
                  
          <property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}" />
                  
          <property name="breakAfterAcquireFailure" value="${jdbc.breakAfterAcquireFailure}" />
                  
          <property name="testConnectionOnCheckout" value="${jdbc.testConnectionOnCheckout}" />
              
          </bean>
              
              
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                  
          <property name="mappingResources">
                      
          <list>
                          
          <value>edu/zsu/zouang/pos/pojo/Goods.hbm.xml</value>
                          
          <value>edu/zsu/zouang/pos/pojo/GoodsType.hbm.xml</value>
                          
          <value>edu/zsu/zouang/pos/pojo/User.hbm.xml</value>
                          
          <value>edu/zsu/zouang/pos/pojo/Role.hbm.xml</value>
                          
          <value>edu/zsu/zouang/pos/pojo/UserRole.hbm.xml</value>
                      
          </list>
                  
          </property>
                  
          <property name="hibernateProperties">
                      
          <props>
                          
          <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                          
          <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                      
          </props>
                  
          </property>
                  
          <property name="dataSource" ref="c3p0DataSource"/>
              
          </bean>
              
              
          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                  
          <property name="sessionFactory"><ref local="sessionFactory"/></property>
              
          </bean>
          </beans>
          在applicationContext.xml中配置了Spring MVC所需要的類
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
          <beans>
              
          <!--Definition of View Resolver -->
              
          <bean id="viewResolver"
                  class
          ="org.springframework.web.servlet.view.InternalResourceViewResolver">
                  
          <property name="viewClass"
                      value
          ="org.springframework.web.servlet.view.JstlView" />
                  
          <property name="prefix" value="/WEB-INF/jsp/" />
                  
          <property name="suffix" value=".jsp" />
              
          </bean>


              
          <!--Request Mapping -->
              
          <bean id="urlMapping"
                  class
          ="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
              
          </bean>

          </beans>
          經過上面的配置,就實現了最基礎的Hessian功能了。這個程序很小,但是可以幫助我們熟悉一下Hessian,等于是個入門吧


          評論

          # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

          2007-07-30 16:07 by CowNew開源團隊
          《J2EE開發全程實錄》中給出了一個在分布式系統中使用Hibernate而免于考慮延遲加載的解決方案,可以參考一下,:)

          # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

          2007-08-01 23:30 by 橙子
          mmmm,,,,,,

          果然開始更新了

          有鉆研就有新發現

          技術牛人=zouang

          # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

          2009-03-19 19:22 by manlge
          多簡單的功能讓你整這么復雜,這就是Spring垃圾框架帶來的結果

          # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

          2012-04-25 06:44 by
          太謝謝啦,終于明白了 加載spring的順序哦
          主站蜘蛛池模板: 遂溪县| 儋州市| 洛川县| 柳河县| 成都市| 西和县| 清水县| 乳山市| 那坡县| 京山县| 宜阳县| 房产| 甘谷县| 浦江县| 会东县| 东山县| 碌曲县| 石狮市| 宁陕县| 交口县| 安福县| 达日县| 东丽区| 无为县| 崇左市| 贵定县| 会东县| 宽城| 博野县| 包头市| 望都县| 临洮县| 尖扎县| 普定县| 汤阴县| 潜山县| 高邑县| 琼海市| 湖北省| 南宫市| 班戈县|