俊星的BLOG

2010年10月25日 #

实现变更统计

1、在本地数据库中创建如下表:
-- Create table
create table TMP_CR_PERSONS
(
  SPECIALTY     VARCHAR2(50),
  USER_GROUP    VARCHAR2(50),
  USER_NAME     VARCHAR2(50),
  USER_CATEGORY VARCHAR2(50)
)

2、创建DBLINK:
 
  create database link LK2PMS connect to XXX identified by XX
  using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.5.99)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oradb9)
    )
  )'

3、创建视图,查询变更清单:
CREATE OR REPLACE VIEW V_TMP_CR_LIST AS
SELECT D.CHANGE_REQUEST_CODE,
       D.PROJECT_NAME,
       D.PRODUCT_NAME,
       D.MODULE_NAME,
       D.TYPE,
       D.PRIVILEGE,
       D.PROPOSE_TIME,
       WF.TRANSACTOR,
       WF.TASKNAME,
       P.SPECIALTY,
       P.USER_GROUP,
       P.USER_CATEGORY
  FROM PMS_CHANGE@lk2pms D,
       (SELECT MAX(ID) ID
          FROM WFT_FLOWCONTROL@lk2pms WF
         WHERE WF.WORKFLOWID = 'ChangeRequest'
         GROUP BY WF.WORKID) MX,
       WFT_FLOWCONTROL@lk2pms WF,
       TMP_CR_PERSONS P
 WHERE WF.ID = MX.ID
   AND WF.WORKID = D.CHANGE_REQUEST_ID
   AND D.CHANGE_REQUEST_CODE LIKE 'CR%'
   AND WF.TRANSACTOR = P.USER_NAME
   AND D.STATE NOT IN ('结束','终止','拒绝');


4、创建统计视图:
CREATE VIEW V_TMP_CR_STAT AS
SELECT T.USER_GROUP, T.USER_NAME, COUNT(V.CHANGE_REQUEST_CODE) TOTAL
  FROM V_TMP_CR_LIST V, TMP_CR_PERSONS T
 WHERE V.TRANSACTOR(+) = T.USER_NAME
 GROUP BY CUBE(T.USER_GROUP, T.USER_NAME);

posted @ 2010-11-22 09:09 俊星 阅读(289) | 评论 (0)编辑 收藏

切换IE8中碰到的问题

1、当然是访问老系统中的,应该都采用兼容视图
2、在访问网公司系统的时候,出现内存不能写的错误提示,让后直接页面加载失败,解决办法是,找到用SOGOU浏览器加载页面后,发现需要安装JITDSign这个插件,所以手工找到JITDSign.cab,解压后直接运行“regsvr32  JITDSign.ocx”,再刷新页面,OK了。

3、其他问题暂未发现。

posted @ 2010-11-10 10:04 俊星 阅读(337) | 评论 (0)编辑 收藏

发布FWMS

1、利用命令“D:\FWMS\code\trunk\main\ear\ejb>dir /a:d /b”,列举出所有的EJB模块清单

2、结合上面的清单,结合正则“^(.*)$”,替换为“<ant antfile="${FWMS_code}/ear/ejb/$1/META-INF/build.xml" dir="${FWMS_code}/ear/ejb/$1/META-INF" target="ejbdoclet"/>”形式,并将得到的ant元素清单放置到工程下build.xml的“Generating_Code”target中。

3、基于如下正则,利用UE批量替换properties文件中的project.path:
查找:(project.path.*)
目标:project.path=../../../APP-INF/classes;../../../APP-INF/lib/activation.jar;../../../APP-INF/lib/ant.jar;../../../APP-INF/lib/apachepoi.jar;../../../APP-INF/lib/axis.jar;../../../APP-INF/lib/axis-ant.jar;../../../APP-INF/lib/bsh2.0.jar;../../../APP-INF/lib/classes12.zip;../../../APP-INF/lib/commons-
文件:build.properties
路径:D:\FWMS\code\trunk\main\ear\ejb\
(注意需要选中搜索子目录项)

4、上述完成之后,执行build_code.bat 即可完成EJB的编译

5、设置ct-config.xml中相关内容,最后是启动weblogic 并设置数据源,同时发布应用。

6、发布启动weblogic的时候,报“java.lang.OutOfMemoryError: PermGen space”异常,在C:\bea\weblogic92\common\bin的commEnv.cmd中,查看到其内存设置为“set MEM_ARGS=-Xms128m -Xmx256m”;在C:\bea\user_projects\domains\fwms_domain\bin下startWebLogic.cmd中,添加“set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=128m”,适当加大内存。

posted @ 2010-11-09 11:59 俊星 阅读(453) | 评论 (0)编辑 收藏

ActiveMQ初探

Apache ActiveMQ是一个高性能的消息代理,实现了JMS 1.1。
目前的最新版本是5.4.1
1、下载相关包,并将activemq-all-5.4.1.jar加入到工程中。

2、运行bin目录下的actionmq.bat文件,启动broker,在conf下是相关的配置文件,例如activemq.xml

3、可通过访问http://localhost:8161/admin/来查看启动情况,有可通过netstat -an|find "61616" 来查看端口,因为通过查看activemq.xml中即可发现传输连接器即配置的占用61616端口:
<transportConnectors>
        <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
 </transportConnectors>

4、编写消息接收类:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class JmsReceiver {
    
public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory 
= new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, 
"tcp://localhost:61616");
        Connection connection 
= connectionFactory.createConnection();
        connection.start();
        Session session 
= connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        
// 需要在activemq的控制台中创建queue:testqueue
        Destination destination = session.createQueue("testqueue");
        MessageConsumer consumer 
= session.createConsumer(destination);
        
        
while (true{
            TextMessage message 
= (TextMessage) consumer.receive(1000);
            
if (null != message)
                System.out.println(
"收到消息:" + message.getText());
            
else
                
break;
        }

        session.close();
        connection.close();
    }

}


5、编写消息产生类:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class JmsSender {
    
public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory 
= new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, 
"tcp://localhost:61616");
        Connection connection 
= connectionFactory.createConnection();
        connection.start();
        Session session 
= connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        Destination destination 
= session.createQueue("testqueue");
        MessageProducer producer 
= session.createProducer(destination);
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        sendMsg(session, producer);
        session.commit();
        connection.close();
    }


    
public static void sendMsg(Session session, MessageProducer producer) throws JMSException {
        
// 创建一条文本消息
        TextMessage message = session.createTextMessage("你好 ActiveMQ!");
        producer.send(message);
        System.out.println(
"");
    }

}


6、通过访问http://localhost:8161/admin/,在queue中创建testqueue,先执行消息发送类,后执行消息接收类,借看看到消息接收类的如下执行结果:
收到消息:你好 ActiveMQ!
收到消息:你好 ActiveMQ!

(执行多次消息发送类,则会接受到多条“你好 ActiveMQ!”消息)

posted @ 2010-10-28 17:53 俊星 阅读(2900) | 评论 (1)编辑 收藏

CAS初步配置

此处的CAS是指Central Authentication Service,也即统一认真服务,这里采用的是JASIG提供的相关服务端及客户端类库,结合TOMCAT进行测试。

1、下载相关的服务器端和客户端类库,官网是:http://www.jasig.org/cas/,目前我采用的是:
服务器端:cas-server-3.3.4-release.zip
客户端:cas-client-2.0.11.zip

2、配置TOMCAT的SSL,具体可见上一篇博文:
在%CATALINA_HOME%/conf/server.xml中,添加:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="F:\eclipse\workspace\httpc\tomcat3.keystore"
               keystorePass="123456"/>
配置OK后,可通过访问“https://localhost:8443/examples/servlets/servlet/HelloWorldExample”来进行验证

3、配置CAS服务器端:
将cas-server-3.3.4-release.zip中modules文件夹下的cas-server-webapp-3.3.4.war的解压到TOMCAT的webapps目录下。
重启TOMCAT后,可以通过访问“http://localhost:8080/cas/login”并输入相同的用户名密码来进行验证。
另:需要特别说明,cas应用中默认配置的是SimpleTestUsernamePasswordAuthenticationHandler,该处理类只要保持用户名、密码一直即可通过验证。

4、配置CAS客户端:
在webapps\examples\WEB-INF中,对web.xml添加如下内容:
<filter>
   <filter-name>CAS Filter</filter-name>
   <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
   <init-param>
     <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
     <param-value>https://localhost:8443/cas/login</param-value>
   </init-param>
   <init-param>
     <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
     <param-value>https://localhost:8443/cas/serviceValidate</param-value>
   </init-param>
   <init-param>
     <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
     <param-value>localhost:8080</param-value>
   </init-param>
  </filter>
  <filter-mapping>
   <filter-name>CAS Filter</filter-name>
   <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
  </filter-mapping>
同时,将cas-client-2.0.11.zip中的casclient.jar,拷贝到webapps\examples\WEB-INF\lib中,重启TOMCAT即可进行验证。

5、验证CAS:
a、在浏览器中访问“http://localhost:8080/examples/servlets/servlet/HelloWorldExample”
b、基于前面配置的过滤器,浏览器会定向CAS的认证页面“https://localhost:8443/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2Fexamples%2Fservlets%2Fservlet%2FHelloWorldExample”
c、在CAS的认证页面中输入相同的用户名密码test/test后,执行登录
d、浏览器提示安全警告,点击确定后即转入到“http://localhost:8080/examples/servlets/servlet/HelloWorldExample?ticket=ST-1-xWK9nwArDLbjCwYiXOqu-cas”,同时页面打出“Hello World”,配置成功。

posted @ 2010-10-26 14:36 俊星 阅读(733) | 评论 (0)编辑 收藏

HTTP Client及HTTPS初探

HTTP Client是一个客户端HTTP协议的类库
1、首先是下载APACHE HTTP CLIENT相关的JAR,目前我引入到工程中的相关文件时:
httpclient-4.0.3.jar
httpcore-4.0.1.jar
httpmime-4.0.3.jar
commons-codec-1.4.jar
commons-logging-1.1.1.jar

JAR包之前的引用关系在README等相关说明中已有。

2、下载并运行TOMCAT,我下载的是TOMCAT6(对应的是JDK5),主要注意的是需要配置CATALINA_HOME这个环境变量。

3、制作服务器端证书,下面是我一个示例:
C:\Documents and Settings\dingjunxing>keytool -genkey -alias tomcat3 -keystore F
:\eclipse\workspace\httpc\tomcat3.keystore
输入keystore密码:  
123456
您的名字与姓氏是什么?
  [Unknown]:  localhost
您的组织单位名称是什么?
  [Unknown]:  sz
您的组织名称是什么?
  [Unknown]:  sz
您所在的城市或区域名称是什么?
  [Unknown]:  shenzhen
您所在的州或省份名称是什么?
  [Unknown]:  guangdong
该单位的两字母国家代码是什么
  [Unknown]:  cn
CN
=localhost, OU=sz, O=sz, L=shenzhen, ST=guangdong, C=cn 正确吗?
  [否]:  y
输入
<tomcat3>的主密码
        (如果和 keystore 密码相同,按回车):  
123456

4、根据服务器证书导出客户端证书,有两种方式,一种为采用IE,下面提供一个利用KEY TOOL导出的方式:
keytool -export -file tomcat3.cert -alias tomcat3 -keystore F:\eclipse\workspace\httpc\tomcat3.keystore
注意:上面命令行必须进入到
%java_home%/jre/lib/security中。

5、将获取到的客户端证书导入:
C:\Program Files\Java\jdk1.5.0_15\jre\lib\security>keytool -import -keystore cac
erts 
-file F:\eclipse\workspace\httpc\tomcat3.cert
输入keystore密码:  
123456
Owner: CN
=localhost, OU=sz, O=sz, L=shenzhen, ST=guangdong, C=cn
发照者: CN
=localhost, OU=sz, O=sz, L=shenzhen, ST=guangdong, C=cn
序号: 4cc55438
有效期间: Mon Oct 
25 17:56:08 CST 2010 至: Sun Jan 23 17:56:08 CST 2011
认证指纹:
         MD5:  E4:2E:BE:AC:A1:5D:E0:
95:C7:95:93:BF:B3:F3:EE:5E
         SHA1: F8:9A:BB:FA:C8:C5:8A:D2:FA:
98:A1:95:64:65:42:9A:8F:0B:4A:7D
信任这个认证? [否]:  y
认证已添加至keystore中

6、TOMCAT中相关设置,主要是修改CATALINA_HOME下的conf/server.xml,在其中添加如下一个连接器:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               maxThreads
="150" scheme="https" secure="true"
               clientAuth
="false" sslProtocol="TLS" keystoreFile="F:\eclipse\workspace\httpc\tomcat3.keystore" keystorePass="123456"/>    

7、运行相关代码:
package org.apache.http.examples.client;

import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;

/**
 * This example demonstrates how to create secure connections with a custom SSL
 * context.
 
*/
public class ClientCustomSSL {

    
public static void main(String[] args) throws Exception {
        DefaultHttpClient httpclient 
= new DefaultHttpClient();

        KeyStore trustStore 
= KeyStore.getInstance(KeyStore.getDefaultType());
        FileInputStream instream 
= new FileInputStream(new File("tomcat3.keystore"));
        
try {
            trustStore.load(instream, 
"123456".toCharArray());
        } 
finally {
            instream.close();
        }

        SSLSocketFactory socketFactory 
= new SSLSocketFactory(trustStore);
        Scheme sch 
= new Scheme("https", socketFactory, 8443);
        httpclient.getConnectionManager().getSchemeRegistry().register(sch);

        HttpGet httpget 
= new HttpGet("https://localhost:8443/docs");

        System.out.println(
"executing request" + httpget.getRequestLine());

        HttpResponse response 
= httpclient.execute(httpget);
        HttpEntity entity 
= response.getEntity();

        System.out.println(
"----------------------------------------");
        System.out.println(response.getStatusLine());
        
if (entity != null) {
            System.out.println(
"Response content length: " + entity.getContentLength());
        }
        
if (entity != null) {
            entity.consumeContent();
        }

        
// When HttpClient instance is no longer needed,
        
// shut down the connection manager to ensure
        
// immediate deallocation of all system resources
        httpclient.getConnectionManager().shutdown();
    }

}
运行结果正常,当然也可以通过在浏览器中输入“https://localhost:8443/”的方式进行访问。

posted @ 2010-10-25 20:13 俊星 阅读(1985) | 评论 (2)编辑 收藏