mashiguang

小马快跑

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 0 文章 :: 60 评论 :: 0 Trackbacks

2011年8月11日 #

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| 编辑 收藏

2011年2月26日 #

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 阅读(425) | 评论 (2)编辑 收藏

2011年2月17日 #

<!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 阅读(11883) | 评论 (9)编辑 收藏

2011年1月21日 #

在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 阅读(1388) | 评论 (0)编辑 收藏

2010年12月8日 #

在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 阅读(406) | 评论 (0)编辑 收藏

2010年9月14日 #

     摘要: 这个是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 阅读(4400) | 评论 (17)编辑 收藏

2009年12月7日 #

 

使用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 href="http://192.168.29.131:8080/sso2">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.blogjava.net/Files/mashiguang/sso.zip

posted @ 2009-12-07 09:50 mashiguang 阅读(1834) | 评论 (4)编辑 收藏

2008年7月14日 #

 

最近公司客户反映有些页面运行速度太慢,通过对系统代码的分析,发现排行榜功能是罪魁祸首,因为数据量太大,每次刷新页面都计算一次排行榜,的确耗时费力。

其实可以让数据库自己计算排行榜,并把计算结果保存到一个单独的表里去,这个表只用来保存排行榜的数据,数据量很小,然后所有的排行榜查询都去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 阅读(4098) | 评论 (6)编辑 收藏

仅列出标题  下一页