mashiguang

          小馬快跑

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 60 評論 :: 0 Trackbacks

          2008年7月14日 #

          spring2.5-reference.pdf
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=d9d1668c0b162f26d115a49e0b308e4f


          deerjet src.zip
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c859c9a30c5f19e2732255e81a4f0c36

          jQueryAPI-100214.chm
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c64a572a16f169ac6db829a3122c4279

          hibernate_annotations.pdf
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=88bd4e31848fda5ca2e65b6fc19df73f

          hibernate_reference.pdf
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=603986150b7056ce617289370197ea9a

          HQL與Criteria對照.pdf
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c2805f9d49171f6165baa528a29774c7

          oracle編程藝術.pdf
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=0c39f09f81f674ef67016482a224a025

          精通oracle10g pl_sql編程.pdf
          http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=455bb7bbfeff510ee66acafe6c8f035b
          posted @ 2011-08-11 23:05 mashiguang| 編輯 收藏

          public PageModel<CrmWarning> query(PageModel<CrmWarning> pageModel)
                      
          throws Exception {
                  Assert.notNull(pageModel);
                  
                  DetachedCriteria dc 
          = DetachedCriteria.forClass(CrmWarning.class);
                  
                  
          /*
                   * 添加查詢條件
                   * 如:dc.add(Restrictions.like("key", "%"+pageModel.getCondition("key")+"%"));
                   * 
                   * 
          */
                  
          if (null != pageModel.getCondition("warnLevel")) {
                      dc.add(Restrictions.eq(
          "warnLevel", pageModel.getCondition("warnLevel")));
                  }
                  
          if (StringUtils.isNotBlank((String)pageModel.getCondition("detail"))) {
                      dc.add(Restrictions.like(
          "detail""%"+pageModel.getCondition("detail")+"%"));
                  }
                  
          if (StringUtils.isNotBlank((String)pageModel.getCondition("warnDate"))) {
                      
          /*
                       * warnDate格式是yyyy-MM-dd,這里改成查詢這一天的預警
                       * Restrictions.sqlRestriction()允許寫原生sql的方式完成特殊需求,如下
                       * 
          */
                      dc.add(Restrictions.sqlRestriction(
          "to_char(time_start,'yyyy-MM-dd') = '" + pageModel.getCondition("warnDate"+ "'"));
                  }
                  
          if (null != pageModel.getCondition("templateId")) {
                      
          /*
                       * 這里的templateId是模板的主鍵id,查詢時應該轉換成模板對象
                       * 
          */
                      CrmWarnTemplate warnTemplate 
          = new CrmWarnTemplate();
                      warnTemplate.setTemplateId((Long)pageModel.getCondition(
          "templateId"));
                      dc.add(Restrictions.eq(
          "crmWarnTemplate", warnTemplate));
                  }
                  
                  dc.addOrder(Order.asc(
          "crmWarnTemplate"));
                  dc.addOrder(Order.desc(
          "timeStart"));
                  
                  pageModel.setDateList(warningDao.query(dc, pageModel.getFirstNote(), pageModel.getNumInPage()));
                  pageModel.setTotal(warningDao.count(dc));
                  
                  
          return pageModel;
              }
          posted @ 2011-08-11 22:50 mashiguang| 編輯 收藏

          package com.jl.dao.bookplatform.impl;

          import java.util.List;

          import org.hibernate.Hibernate;
          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.hibernate.transform.Transformers;
          import org.springframework.dao.DataAccessException;

          import com.jl.dao.baseDao.GenericDao;
          import com.jl.dao.bookplatform.ProductItemDao;
          import com.jl.entity.bookplatform.CrmProduct;
          import com.jl.entity.bookplatform.CrmProductItem;
          import com.jl.entity.bookplatform.ProductItemConfig;

          public class ProductItemDaoImpl extends GenericDao<CrmProductItem, Long> implements ProductItemDao {

              
              
          public List<ProductItemConfig> getProductItemConfigs(Long productId, Long planetypeId) throws DataAccessException{
                  String sql 
          = "select chi.charge_item_id \"chargeItemId\"," +
                          
          " chi.charge_item \"chargeItem\"," +
                          
          " chi.charge_unit \"chargeUnit\"," +
                          
          " cpi.product_id \"productId\"," +
                          
          " cpi.product_item_id \"productItemId\"," +
                          
          " cpi.sale_planetype_id \"salePlanetypeId\"," +
                          
          " cpi.inland_price \"inlandPrice\"," +
                          
          " cpi.outland_price \"outlandPrice\"" +
                          
          " from (select * from crm_charge_item chi2 where chi2.if_regular = 1) chi left join crm_product_item cpi" +
                          
          " on cpi.charge_item_id = chi.charge_item_id " +
                          
          " and cpi.product_id = ?" +
                          
          " and cpi.sale_planetype_id = ?" +
                          
          " order by chi.charge_item_id";
                  
                  Session session 
          = getSession();
                  Query query 
          = session.createSQLQuery(sql)
                      .addScalar(
          "chargeItemId", Hibernate.LONG)
                      .addScalar(
          "chargeItem",Hibernate.STRING)
                      .addScalar(
          "chargeUnit",Hibernate.STRING)
                      .addScalar(
          "productId",Hibernate.LONG)
                      .addScalar(
          "productItemId",Hibernate.LONG)
                      .addScalar(
          "salePlanetypeId",Hibernate.LONG)
                      .addScalar(
          "inlandPrice",Hibernate.DOUBLE)
                      .addScalar(
          "outlandPrice",Hibernate.DOUBLE)
                      .setResultTransformer(Transformers.aliasToBean(ProductItemConfig.
          class))
                      .setParameter(
          0, productId)
                      .setParameter(
          1, planetypeId);
                  
                  List
          <ProductItemConfig> configs = query.list();
                  
                  
          return configs;
              }

              
          public List<CrmProductItem> getProductItem(CrmProduct product) throws DataAccessException {
                  
                  String hql 
          = "from CrmProductItem cpi where cpi.crmProduct = ?";
                  Session session 
          = getSession();
                  Query query 
          = session.createSQLQuery(hql).setParameter(0, product);
                  
                  List
          <CrmProductItem> items = query.list();
                  
          return items;
              }
              
              
          public void copy(Long productId_dest,Long productId_orig,String createMan) throws DataAccessException {
                  String sql 
          = "insert into crm_product_item " +
                          
          " select hibernate_sequence.nextval," +
                          
          " ?," +
                          
          " cpi.charge_item_id," +
                          
          " cpi.sale_planetype_id," +
                          
          " cpi.inland_price," +
                          
          " cpi.outland_price," +
                          
          " ?," +
                          
          " sysdate" +
                          
          " from crm_product_item cpi" +
                          
          " where cpi.product_id = ?";
                  
                  Session session 
          = getSession();
                  Query sqlQuery 
          = session.createSQLQuery(sql)
                                  .setParameter(
          0, productId_dest)
                                  .setParameter(
          1, createMan)
                                  .setParameter(
          2, productId_orig);
                  sqlQuery.executeUpdate();
              }
              
              
          }
          posted @ 2011-08-11 22:25 mashiguang| 編輯 收藏

          1,配置tomcat啟動參數
          直接在%tomcat_home%\bin下建立tomcat_debug.bat文件,內容如下:

          cd %CATALINE_HOME%/bin
          set JPDA_ADDRESS=8787
          set JPDA_TRANSPORT=dt_socket
          set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
          startup

          需要遠程調試時從tomcat_debug.bat啟動。

          2,eclipse調試
          選擇菜單"Run>Debug...",彈出窗口里右鍵點擊"Remote Java Application",選擇"New",如圖:


          點擊"Debug"按鈕,開始遠程調試,當程序運行到斷點時,Eclipse會捕獲到。


          有關普通java app的遠程調試可以參考http://blog.chenlb.com/2010/07/eclipse-remoting-debug-java-app.html
          posted @ 2011-02-26 17:39 mashiguang 閱讀(454) | 評論 (2)編輯 收藏

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML>
           
          <HEAD>
            
          <TITLE> New Document </TITLE>
            
          <META NAME="Generator" CONTENT="EditPlus">
            
          <META NAME="Author" CONTENT="">
            
          <META NAME="Keywords" CONTENT="">
            
          <META NAME="Description" CONTENT="">
            
          <script type="text/javascript" src="jquery-1.4.2.js"></script>
            
          <script type="text/javascript" src="jquery.validate.js"></script>
            
          <SCRIPT LANGUAGE="JavaScript">
            
          <!--
              jQuery(
          function(){        
                  jQuery.validator.methods.compareDate 
          = function(value, element, param) {
                      
          //var startDate = jQuery(param).val() + ":00";補全yyyy-MM-dd HH:mm:ss格式
                      //value = value + ":00";
                      
                      
          var startDate = jQuery(param).val();
                      
                      
          var date1 = new Date(Date.parse(startDate.replace("-""/")));
                      
          var date2 = new Date(Date.parse(value.replace("-""/")));
                      
          return date1 < date2;
                  };
                  
                  jQuery(
          "#form1").validate({
                      focusInvalid:
          false,
                      rules:{
                          
          "timeStart":{
                              required: 
          true
                          },
                          
          "timeEnd": {
                              required: 
          true,
                              compareDate: 
          "#timeStart"
                          }
                      },
                      messages:{
                          
          "timeStart":{
                              required: 
          "開始時間不能為空"
                          },
                          
          "timeEnd":{
                              required: 
          "結束時間不能為空",
                              compareDate: 
          "結束日期必須大于開始日期!"
                          }
                      }
                  });
              });
            
          //-->
            </SCRIPT>
           
          </HEAD>

           
          <BODY>
           
          <form id="form1" name="form1" method="post" action="demo.html">
             
          <p>timeStart:
               
          <input name="timeStart" type="text" id="timeStart" value="2011-02-17 10:00:00"> yyyy-MM-dd HH:mm:ss
             
          </p>
             
          <p>timeEnd:
               
          <input name="timeEnd" type="text" id="timeEnd" value="2011-02-17 9:00:00"> yyyy-MM-dd HH:mm:ss
             
          </p>
             
          <p>
               
          <input type="submit" name="Submit" value="提交">
             
          </p>
           
          </form>
            
           
          </BODY>
          </HTML>
          posted @ 2011-02-17 10:34 mashiguang 閱讀(11934) | 評論 (9)編輯 收藏

          在Oracle定義變量時,常有VARCHAR2 (3 Char)或者VARCHAR2 (10 Byte)的數據類型,那么3char或者10Byte到底代表幾個漢字,幾個字符呢,上次外公司一同事討論這個問題,一下沒給解釋清楚,所以下來以后整理如下:

          總結:
          當NLS_CHARACTERSET=AL32UTF8時()
          NLS_LENGTH_SEMANTICS=BYTE時,一個漢字代表三個字節
          NLS_LENGTH_SEMANTICS=CHAR時,一個漢字代表一個字節
          當NLS_CHARACTERSET=US7ASCII時(字符集為單字節)
          NLS_LENGTH_SEMANTICS=BYTE時,一個漢字代表兩個字節
          NLS_LENGTH_SEMANTICS=CHAR時,一個漢字代表兩個字節

          現象:
          select * from nls_database_parameters;
          ….      …………..
          NLS_CHARACTERSET        AL32UTF8

          …..

          NLS_LENGTH_SEMANTICS BYTE

          ….

          NLS_NCHAR_CHARACTERSET      AL16UTF16

          NLS_RDBMS_VERSION      10.2.0.4.0
           

          SQL> alter session set nls_length_semantics='BYTE';

          SQL> create table nls_byte(c1 varchar2(7));

          SQL> insert into nls_byte values('測試機');

           insert into nls_byte values('測試機')

           ORA-12899: 列 "SYS"."NLS_BYTE"."C1" 的值太大 (實際值: 9, 最大值: 7)

          SQL> insert into nls_byte values('測試a');

           1 row inserted
           
          SQL> select table_name,column_name,t.DATA_TYPE,t.DATA_LENGTH,t.CHAR_USED from user_tab_columns t where table_name='NLS_BYTE';

           TABLE_NAME COLU DATA_TYP DATA_LENGTH CHAR_USED

          ---------- ---- -------- ----------- ---------

          NLS_BYTE   C1   VARCHAR2           7 B
            
          NLS_LENGTH_SEMANTICS allows you to specify the length of a column datatype in terms of CHARacters rather than in terms of BYTEs. Typically this is when using an AL32UTF8 or other varying width NLS_CHARACTERSET database where one character is not always one byte. While using CHAR semantics has as such no added value in a 7/8 bit characterset it's fully supported so any application code / table setup using CHAR can also be used in a 7/8bit characterset like US7ASCII/WE8MSWIN1252.
          This parameter is a 9i (and up) feature and is not available in older releases

          翻譯過來就是:這個參數允許將列的數據單位設為字符而不是byte.這個問題會在字符集設為UTF8的時候出現. 此參數在9i以上版本有效.

          NLS_LENGTH_SEMANTICS 設置.

          1.      NLS_DATABASE_PARAMETERS中的值是在數據庫創建的時候確定的,一般都為BYTE

          2.     此參數可以以 “ALTER SYSTEM SET NLS_LENGTH_SEMANTICS=CHAR scope=both”方式修改,但是需要重啟數據庫才能生效.

          3.     也可用” ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR”使對當前session生效.

          4.     此參數可以在10G以上版本中,在環境變量或注冊表中設置(注意需要大寫),設定后從當前客戶端啟動的所有會話都采用新的取值.

          5.     修改后只對新建的列生效,對于已有的列沒有作用

          6.     新建或升級DB時用BYTE,否則XDB或dba_tables會出現問題.

          7.     NLS_LENGTH_SEMANTICS對sys用戶下的對象無效.

          8.     如果對于7/8bit的字符集,設為byte/char意義不大,因為無論是char和byte都對應一個byte.

          測試:

          一.在當前session中修改此參數

           SQL> alter session set nls_length_semantics='char';

           Session altered

           SQL> create table nls_char(c1 varchar2(7),c2 varchar2(7));

           Table created

           SQL> desc nls_char

          Name Type        Nullable Default Comments

          ---- ----------- -------- ------- --------

          C1   VARCHAR2(7) Y                      

          C2   VARCHAR2(7) Y                      

           SQL> insert into nls_char values('測試機','測試測試測試');

           1 row inserted 

          如果對于alter system,效果是一樣的

          二.對于已經存在的表,

           SQL> desc nls_byte

          Name Type             Nullable Default Comments

          ---- ---------------- -------- ------- --------

          C1   VARCHAR2(7 BYTE) Y                      

          SQL> alter table nls_byte modify c1 varchar2(7 char);

           Table altered

           SQL> desc nls_byte

          Name Type        Nullable Default Comments

          ---- ----------- -------- ------- --------

          C1   VARCHAR2(7) Y                      

           SQL> insert into nls_byte values('測試機');

           1 row inserted
           
          1.      exp/imp : 不能直接導入,因為會采用source table的建表方式在target db里建表,即使目標庫設的值為char.

          *可以預先在目標庫中以char方式建表

          *然后導入,指定參數ignore=y

            2. Alter table

               alter table "<owner>"."<table>" modify "<column>" char (10 char);

                創建腳本,修改列設定.

           注:

          Bug-3611750, ora-01450 online rebuild of index fails, 可以在重建索引前指定byte, 10.2.0.5以上已經修復

          Bug 1488174 UNICODE: ALTER SYSTEM SET NLS_LENGTH_SEMANTICS DOESN'T
          TAKE EFFECT, 用此語句修改后,實際上不起作用,需要重啟才能生效, 但是如果用alter session方式即時生效,不用重啟.

          進一步測試,在另一個字符集設為us7ascii的DB設置此參數

          SQL> select * from nls_database_parameters

          6          NLS_CHARACTERSET  US7ASCII

          SQL> alter session set nls_length_semantics=byte;

          Session altered.

          SQL> create table nls_byte(c1 varchar2(7));

          Table created.

          SQL> insert into  nls_byte values('測試測試');

          insert into  nls_byte values('測試測試')

          ERROR at line 1:

          ORA-12899: value too large for column "TEA"."NLS_BYTE"."C1" (actual: 8,

          maximum: 7)

          SQL> desc nls_byte

           Name                        Null?    Type

           -------------------------------

           C1                                   VARCHAR2(7)

          SQL> alter session set nls_length_semantics=char;

          Session altered.

          SQL> create table nls_char(c1 varchar2(7));

          Table created.

          SQL> insert into  nls_char values('測試測試');

          insert into  nls_char values('測試測試')

          ERROR at line 1:

          ORA-12899: value too large for column "TEA"."NLS_CHAR"."C1" (actual: 8,

          maximum: 7)

          SQL> desc nls_char

           Name                        Null?    Type

           ----------------------------------------- -------- -------------------

          C1                                  VARCHAR2(7)
           
           可以看出,在字符集為單字節的情況下,無論取何值,漢字都是以二個字節的方式存在的.

           


          本文轉自http://www.wudeyao.com/post-69.html
          posted @ 2011-01-21 12:49 mashiguang 閱讀(1414) | 評論 (0)編輯 收藏

          在foreach調用remove可能會引發ConcurrentModificationException。
          如:
          for(Object obj : list){
              .remove(obj);
          }

          最好像下面這樣寫:
          for (Iterator it = list.iterator(); it.hasNext();) {
          ......
          it.remove();
          }

          (添加20160420)
          如果foreach的同時需要add element,就不能使用iterator了,最好重新啟用一個新的list暫存新的集合元素。
          posted @ 2010-12-08 09:47 mashiguang 閱讀(430) | 評論 (0)編輯 收藏

               摘要: 這個是ie6的bug,并非boxy的問題。在ie6下,select元素的zindex最大,select元素會透過boxy的彈出層顯示在其上面。 這里用一個iframe擋住boxy彈出層下的select,使用時只要將useIframe置為true即可,源碼如下: (jquery.boxy.js并不好用,很多jquery的彈出層插件都解決了ie6的這個問題) /**  *&n...  閱讀全文
          posted @ 2010-09-14 17:30 mashiguang 閱讀(4434) | 評論 (17)編輯 收藏

           

          使用cassso helloword

          因為工作需要接觸到sso,據知目前多數sso使用耶魯的cas實現,且發現使用cas真的是很簡單就可以做出一個單點登錄系統來,cas還提供豐富的擴展功能,對于擴展功能日后再細細研究,這里只使用cas做一個hello world來記錄本人的學習過程,如有幸被高人看到,還望指出弊病,不吝賜教。

          在使用cas之前最好對數字證書有所了解,不了解也沒有關系,跟著我的步驟也一樣可以跑的通。

          準備工作

          需要的文件:

          ü         Jdk6

          ü         Tomcat

          ü         cas-server-3.3.2

          ü         cas-client-3.1.9

          證書

          下面是keytool命令的一些常用方法,先在這里認識一下它們,一會兒會用的到。

          使用keytool命令生成密鑰庫

          keytool -genkey -alias tomcat -keyalg RSA -dname "CN=pcma, OU=vanceinfo, O=vanceinfo, L=haidian, S=beijing, C=CN" -keystore c:"keystore5.jks

          CN:主機名

          OU:組織單位

          O:組織

          L:地區

          S:城市

          C:國家

          如果需要指定密鑰有效期,添加-validity 365即可,單位是天,如:
          keytool -genkey -alias tomcat -keyalg RSA -dname "xxxxx" -keystore xxxxx -validity 365

          導出證書

          keytool -export -file c:/server5.crt -alias tomcat -keystore c:"keystore5.jks

          將證書導入到客戶端jdk

          keytool -import -keystore "D:"Java"jdk1.6.0_14"jre"lib"security"cacerts" -file c:/server5.crt -alias tomcat

          從密鑰庫中刪除指定別名的證書

          keytool -delete -noprompt -alias tomcat -keystore E:"apache-tomcat-6.0.20_2"conf"keystore2.jks

          查看密鑰庫中的證書

          keytool -list -v -keystore c:"keystore5.jks

          配置tomcat

          使用keytool命令生成密鑰庫。

          配置%tomcat_home%/conf/server.xml使tomcat支持SSL協議,并指定密鑰庫。

          <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

                         maxThreads="150" scheme="https" secure="true"

                         clientAuth="false" sslProtocol="TLS" keystorePass="mashiguang"

                                  keystoreFile="${catalina.home}/conf/keystore5.jks"/>

          部署cas server

          解壓縮cas-server-3.3.2-release.zip文件,在modules目錄里找到cas-server-webapp-3.3.2.war文件,這就是一個做好了的cas服務端,我們做的sso helloword可以直接使用,只需把cas-server-webapp-3.3.2.war改了個簡單點的名字,如cas.war,然后部署到tomcat即可。

          瀏覽器訪問https://pcma:8443/cas,如果打開顯示的是cas默認的登錄頁面,則表示服務端已部署完畢。

          客戶端使用cas client

          新建兩個web工程,用于模擬單點登錄系統中的客戶端,并將cas-client-3.1.9"modules里的jar包放到web工程lib目錄下,是主要的是cas-client-core-3.1.9.jar文件,把spring2.5也放到lib目錄下。

          Web.xml文件

          <?xml version="1.0" encoding="UTF-8"?>

          <web-app 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">

                 <context-param> 

                  <param-name>contextConfigLocation</param-name> 

                  <param-value> 

                      /WEB-INF/config/casContext.xml  

                  </param-value> 

              </context-param> 

              <listener> 

                  <listener-class> 

                      org.springframework.web.context.ContextLoaderListener  

                  </listener-class> 

              </listener> 

              <!-- 負責用戶認證 --> 

              <filter> 

                  <filter-name>CAS Authentication Filter</filter-name> 

                  <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> 

                  <!-- CAS login 服務地址--> 

                  <init-param> 

                      <param-name>casServerLoginUrl</param-name> 

                      <param-value>https://pcma:8443/cas/login</param-value> 

                  </init-param> 

                  <init-param> 

                      <param-name>renew</param-name> 

                      <param-value>false</param-value> 

                  </init-param> 

                  <init-param> 

                      <param-name>gateway</param-name> 

                      <param-value>false</param-value> 

                  </init-param> 

                  <!-- 客戶端應用服務地址--> 

                  <init-param> 

                      <param-name>serverName</param-name> 

                      <param-value>http://pcma:8081</param-value> 

                  </init-param> 

              </filter> 

              <!--負責Ticket校驗--> 

              <filter> 

                  <filter-name>CAS Validation Filter</filter-name> 

                  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 

                  <init-param> 

                      <param-name>targetBeanName</param-name> 

                      <param-value>cas.validationfilter</param-value> 

                  </init-param> 

              </filter> 

              <filter-mapping> 

                  <filter-name>CAS Authentication Filter</filter-name> 

                  <url-pattern>/*</url-pattern> 

              </filter-mapping> 

              <filter-mapping> 

                  <filter-name>CAS Validation Filter</filter-name> 

                  <url-pattern>/*</url-pattern> 

              </filter-mapping> 

          </web-app>

          casContext.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="cas.validationfilter" class="org.jasig.cas.client.validation.Cas10TicketValidationFilter"> 

                  <property name="ticketValidator"> 

                      <ref bean="cas10TicketValidator"/> 

                  </property> 

                  <property name="useSession"> 

                      <value>true</value> 

                  </property> 

                  <!-- 客戶端應用服務地址--> 

                  <property name="serverName"> 

                      <value>http://pcma:8081</value> 

                  </property> 

                  <property name="redirectAfterValidation"> 

                      <value>true</value> 

                  </property> 

              </bean> 

              <bean id="cas10TicketValidator" class="org.jasig.cas.client.validation.Cas10TicketValidator"> 

              <!-- 這里參數是cas服務器的地址--> 

                  <constructor-arg index="0" value="https://pcma:8443/cas" /> 

              </bean> 

          </beans> 

          新建index.jsp文件

           <body>

             hello sso<br>

             <a >sso2</a>這個地址是另外一臺機器上的sso客戶端

           </body>

          上面的web.xmlcasContext.xmlindex.jsp是兩個客戶端中的一個,另一個要根據實際情況修改。

          最后不要忘記客戶端的jdk要使用keytool命令導入證書文件。

          測試

          啟動tomcat,測試器訪問http://pcma:8081/sso,出現cas登錄頁面,輸入相同的用戶名和密碼即可登錄,登錄成功后頁面自動跳轉回http://pcma:8081/sso,這時點擊頁面上的sso2鏈接,就可以自動登錄并跳轉到sso2應用。

          如果輸入用戶名密碼后提示下面的異常,是因為部署客戶端的jdk沒有導入證書文件的原因。

          javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


          源碼

          http://www.aygfsteel.com/Files/mashiguang/sso.zip

          posted @ 2009-12-07 09:50 mashiguang 閱讀(1863) | 評論 (4)編輯 收藏

           

          最近公司客戶反映有些頁面運行速度太慢,通過對系統代碼的分析,發現排行榜功能是罪魁禍首,因為數據量太大,每次刷新頁面都計算一次排行榜,的確耗時費力。

          其實可以讓數據庫自己計算排行榜,并把計算結果保存到一個單獨的表里去,這個表只用來保存排行榜的數據,數據量很小,然后所有的排行榜查詢都去select這個表。

          計算排行榜的功能我們可以寫成一個存儲過程,但是排行榜的數據不是一成不變的,還需要不時的調用這個存儲過程才行,oracle為我們提供了dbms_jobs

          oracel dbms_jobs包可以提交作業到作業隊列中,這個包中還提供其它一些函數管理以前提交的作業,如對作業進行修改、禁止或刪除等操作。

          常用函數:

          submit(),提交作業到作業隊列。

          isumbit()

          remove(),從作業隊列中刪除作業。

          change(),改變已有作業的參數。

          what(),改變作業要執行的代碼。

          next_date(),改變作業下一次執行時間。

          interval(),改變作業執行的時間間隔。

          broken(),暫停執行作業。

          run(),強制執行作業。

          最常用的submit()函數:

          dbms_jobs.submit(

                 job out binary_integer,

                 what in varchar2,

                 next_date in date default sysdate,

                 interval in varchar default null,

                 no_parse in boolean default false,

                 instance in binary_integer default any_instance,

                 force in boolean default false

          );

          submit函數參數:

          job,作業的作業號,是個輸出參數,所以調用submit函數時,這個參數要指定一個已存在的變量。

          what,作業要執行的代碼,一般是存儲過程。

          next_date,下一次作業運行的日期。

          interval作業執行的間隔時間,這個參數默認值是null也就是what指定的代碼只在next_date這一時間執行一次。

          no_parse,默認值是false,當參數值是false,提交作業時就對what指定的代碼進行語法分析;當參數值是true,第一次運行what指定代碼時才進行語法分析。

          instance,指明運行作業的數據庫實例。

          force,如果是true,instance可以是任何正數;如果是falseinstance指定的實例必須正在運行。

          示例:

          var jobno number;

          begin

          dbms_job.submit(:jobno,'p_xxx_taxis;',trunc(sysdate)+(18/24),'trunc(sysdate+1,''hh'')');--每天18點執行

          commit;

          end;

          上面這段話要在 命令窗口 下運行,如在pl/sql developer里面的-->新鍵-->命令窗口

          這樣就會在每天的18點執行存儲過程p_xxx_taxis。在我這里p_xxx_taxis執行的是計算排行榜的任務。

          posted @ 2008-07-14 16:56 mashiguang 閱讀(4136) | 評論 (6)編輯 收藏


          調用ejb時,如果客戶端和ejb不在同一個jvm,就要設置InitialContext,不同的應用服務器InitialContext寫法也不同.
          Context.INITIAL_CONTEXT_FACTORY:指定到目錄服務的連接工廠
          Context.PROVIDER_URL:目錄服務提供者URL

          //jboss:
          Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"
          Context.URL_PKG_PREFIXES, "org.jboss.naming"
          Context.PROVIDER_URL, "localhost:1099"

          //weblogic:
          Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"
          Context.PROVIDER_URL, "t3://localhost:7001"

          //apusic(金蝶):
          Context.INITIAL_CONTEXT_FACTORY, "com.apusic.jndi.InitialContextFactory"
          Context.PROVIDER_URL, "rmi://localhost:6888"

          //WebSphere:
          Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"
          Context.PROVIDER_URL, "iiop://localhost:900"


          //J2EE  SDK(J2EE  RI):
          Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"
          Context.PROVIDER_URL, "iiop://127.0.0.1:1050"

          //SilverStream:
          Context.INITIAL_CONTEXT_FACTORY, "com.sssw.rt.jndi.AgInitCtxFactory"
          Context.PROVIDER_URL, "sssw://localhost:80"

          //OC4J:
          Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory"
          Context.PROVIDER_URL, "ormi://127.0.0.1/"

          //WAS5:
          Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"
          Context.PROVIDER_URL, "iiop://localhost:2809"

           

          常用JNDI服務提供者連接工廠:
          Filesystem:  Com.sun.jndi.fscontext.FSContextFactory或者com.sun.jndi.fscontext.RefFSContextFactory
          LDAPv3:    Com.sun.jndi.ldap.LdapCtxFactory
          NDS:     com.novell.naming.service.nds.NdsInitialContextFactory
          NIS:     com.sun.jndi.nis.NISCtxFactory
          RMI registry: com.sun.jndi.rmi.registry.RegistryContextFactory
          IBM LDAP服務提供者:   com.ibm.jndi.LDAPCtxFactory
          BEA 名字服務提供者:   weblogic.jndi.WLInitialContextFactory
          JBOSS名字服務提供者:  org.jnp.interfaces.NamingContextFactory

          posted @ 2008-07-14 16:35 mashiguang 閱讀(14803) | 評論 (2)編輯 收藏

          主站蜘蛛池模板: 肥西县| 深州市| 邛崃市| 耿马| 龙里县| 黑山县| 株洲县| 通渭县| 海安县| 宿迁市| 阜阳市| 铁力市| 富裕县| 浮山县| 英超| 阳朔县| 泸西县| 乐昌市| 中方县| 塔河县| 峨眉山市| 广安市| 农安县| 蒲城县| 清水河县| 陇西县| 阿荣旗| 彭山县| 大埔区| 广丰县| 兴安县| 阿勒泰市| 新安县| 华池县| 化隆| 清河县| 葵青区| 凉山| 长武县| 金沙县| 潼南县|