一.Timer与TimerTask组合起来用于实现定时执行任务的功能
1.TimerTask:定义要执行的任务,你需要自己定义一个继承自该类的子类,并把要执行的任务实现在run接口中,如下所示:
import java.util.*;
public class MyTask extends TimerTask
{
public void run()
{
//你的任务
System.out.println( "Running the task" );
}
}.
实际上TimerTask实现了java.lang.Runnable 接口
2.Timer:通过schedule方法定时调用TimerTask设定的任务
包含方法:
(1).Timer()
以常规方式运行task
(2).Timer(boolean)
true时表示使用后台线程。只要剩下的程序继续运行,后台线程就会执行。
(3).public void cancel()
终止Timer的功能执行,但不会对正在执行的任务有影响。当执行cancel方法后将不能再用其分配任务。
(4).public void schedule(TimerTask task,Date time)
task被安排在time指定的时间执行,如果时间为过去时则任务立刻执行。
(5).public void schedule(TimerTask task, Date firstTime, long period)
task被安排在time指定的时间执行,执行后将每隔period(毫秒)反复执行。
(6).public void schedule(TimerTask task, long delay)
task被安排在delay(毫秒)指定的时间后执行。
(7).public void schedule(TimerTask task,long delay, long period)
task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。 (8).public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)
task被安排在firstTime指定的时间执行。执行后将每隔period(毫秒)反复执行。根据该任务第一次执行的时间来指定反复执行时延长的时间段。如果一个任务被延时了,被安排在后面执行的任务就被相应的缩短等待时间以“接上”被延时的任务
(9).public void scheduleAtFixedRate(TimerTask task,long delay,long period)
task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。同上。
注意每个 Timer 对象在同一时间只能执行一个任务
以下是一个例子:
import java.util.*;
import java.io.*;
public class doTask extends TimerTask {
String index;
Timer myTimer = new Timer();
public doTask(String index) {
this.index = index;
}
public void run() {
System.out.println(index);
}
public static void main(String args[]) {
doTask myTask1 = new doTask("First task");
myTask1.start(0,3);
doTask myTask2 = new doTask("Second task");
myTask2.start(0,1);
try{
Thread.sleep(6000);
}
catch(InterruptedException e){
}
myTask1.end();
myTask2.end();//程序结束时用cancel()结束Timer
}
public void start(int delay, int internal) {
myTimer.schedule(this, delay * 1000, internal * 1000); //利用Timer.schedule方法
}
public void end(){
myTimer.cancel();
}
}
输出:
First task
Second task
Second task
Second task
First task
Second task
Second task
Second task
二.要使该class能在weblogic启动后自动执行,需要一个实现T3StartupDef接口的class
import java.util.Hashtable;
import weblogic.common.T3StartupDef;
import weblogic.common.T3ServicesDef;
public class startuptest implements T3StartupDef {
public void setServices(T3ServicesDef services) {}
public String startup(String name, Hashtable args) throws Exception {
doTask.main();
return "Startup completed successfully";
}
}
在weblogic中添加该任务以便在weblogic启动后自动执行,启动weblogic,在Console 左边的mydomain—> Deployment—>Startup & Shutdown里点击“Configure a new Startup Class...”
Name随便填,ClassName填PackageName.ClassName(该class必须实现startup接口)
Deployment Order:指定Startup class的启动顺序,当存在多个Startup class时Order小的先执行
Create就可以了,如果运行时提示class找不到,那需要在commEnv.cmd文件的WEBLOGIC_CLASSPATH中追加该class的路径
DB2存储过程编译环境设置
DB2自带Stored Procedure Builder编译工具可以进行存储过程的开发,但由于DB2没有自带编译工具生成时需要使用另外的编译器,一般常用的是VC编译器,配置步骤如下:
1. 在DB2服务端安装vc6
2. 运行一下Stored Procedure Builder,你会发现在C:Program FilesSQLLIBfunction下新生成了一个目录:routine,修改下面的文件sr_cpath.bat,在里面增加以下内容:
set VCV6_DRIVE=C:Program FilesMicrosoft Visual Studio
set include=%include%;%VCV6_DRIVE%VC98atlinclude;%VCV6_DRIVE%VC98mfcinclude;%VCV6_DRIVE%VC98include
set lib=%lib%;%VCV6_DRIVE%VC98mfclib;%VCV6_DRIVE%VC98lib
set path=%path%;%VCV6_DRIVE%CommonToolsWinNT;%VCV6_DRIVE%CommonMSDev98Bin;%VCV6_DRIVE%CommonTools;%VCV6_DRIVE%VC98bin;%VCV6_DRIVE%VC98mfclib;%VCV6_DRIVE%VC98lib
实际就是将原来的第一段注释解开,注意要根据vc实际的安装路径修改VCV6_DRIVE
3. 在DB2的命令窗口中运行以下命令:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="cl -Od -W2 /TC -D_X86_=1 -Ic:progra~1sqllibinclude SQLROUTINE_FILENAME.c /link -dll -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll c:progra~1sqlliblibdb2api.lib"
db2set DB2_SQLROUTINE_COMPILER_PATH="c:progra~1sqllibfunctionroutinesr_cpath.bat"
同样要注意按照DB2的安装路径修改
4. 重新启动DB2
就可以了。在客户端不用做什么设置
# posted by HEXIN_2000 @ 2005-07-15 17:46 评论(0)
WebService SOAP的监听和encoding修改
2005-7-6 星期三(Wednesday) 小雨
1。在 Web Service SOAP 发送消息中附加 XML(javax.xml.transform.Source 对象)时,可以在 XML 头中指定任何编码。
方式有三种
a)在客户端 HTTP 请求中指定“Accept-Charset”参数。
b)在 web-service.xml 部署描述符中指定字符集特性
...
c)在startWebLogic.cmd中加入-Dweblogic.webservice.i18n.charset=GB2312注意有两处
但是,收到的XML消息头编码将为 UTF-8,不能修改。
2。在webservice中监听客户端传送的soap文件内容
使用MssoapT用于监听SOAP请求
使用方法如下:
1.选择”File”->formatted trace,
2.其中local port指本地的接收端口,我们现在设为8080:
Destination(第一个)指要监听的主机IP,我们现在设为192.1.7.111:
Destination(第二个)指要监听的主机端口,我们现在设为7001:
上述设置的含义如下::
所有从本机8080端口发出的消息,都将被发送到192.1.7.111:7001下:
我主机ip为192.1.7.102:
所以当我在ie中运行:
http://192.1.7.102:8080/safe/SummaryListWebService.jws?.EXPLORE=.TEST:
等价于:
http://192.1.7.111:7001/safe/SummaryListWebService.jws?.EXPLORE=.TEST:
注意: 在ie中运行时必须为本地机的IP,不能为localhost或者127.0.0.1
WebLogic下db2连接池的配置
1. 创建一个WebLogic的configuration
1)启动Configuration Wizard,选择”creat a new WebLogic configuration”点击下一步
2)选择第3项进入下一页面”choose Express or Custom Configuration”,直接继续
3)输入登录用户名和密码,next
4)一路继续下去直到结束.
5)按”done”第一步就算完成了.
2. 在建好的configuration上加装”work shop”
1)启动Configuration Wizard,选择下面一项”Extend an existing WebLogic configuration”下一步
2)选定刚才新建的domains-“mydomain”下一步
3)选中WebLogic Workshop Extension,然后继续继续,直到结束,就完成了configuration的生成
你可以试一下新建的configuration
运行C:beauser_projectsdomainsmydomainstartWebLogic.cmd,看看后台有无错误,如果没有任何错误,那是
非常正常的现象.
启动http://127.0.0.1:7001/console输入刚才的用户名和密码,你应该看到控制台画面
把刚才的服务关了吧,我们下面配置Workshop
3. 建立一个Workshop应用
1)打开WebLogic Workshop 8.1,选择fiel->new->application出现以下画面选择”empty application”,路径和
name我这里设置为路径:d:test,name:test.server要选上面新建的 ,我这里是”
C:beauser_projectsdomainsmydomain”然后选择create
2)Create后application部分是下面这个样子:
Test
->modules
->libraries
->security roles
3)在你的application路径下建立文件夹” test”,上source safe,Get所有文件到刚才新建的test目录下,打开
WebLogic Workshop 8.1,Import 这个项目:选择”web service project”;路径为d:testtest;Name为test,点
击Import,这里要注意,引入的project必须在建立的application的下一级目录上,否则会出错
4)Build一下该项目,把有问题的文件都删了,
Build成功后选择一个jws文件运行一下
如果出现”workshop test browser”画面,恭喜你web service已经建好,可以进行下一步了
4. 建立JDBC
1. 将C:Program FilesSQLLIBjava db2java.zip改名为.jar文件,COPY到C:beaweblogic81
serverlib下,这一步是将db2的jdbc驱动放在weblogic下
2. 修改C:beaweblogic81commonbincommEnv.cmd在
set WEBLOGIC_CLASSPATH=后加入%WL_HOME%serverlibdb2java.jar;
3. 修改C:beaweblogic81serverbinstartWLS.cmd在
set CLASSPATH=后加入%WL_HOME%serverlibdb2java.jar;
以上两步是设置jdbc驱动的路径,以让weblogic可以识别
4. 启动C:beauser_projectsdomainsmydomainstartWebLogic.cmd
5. 登录http://127.0.0.1:7001/console进去
6. 新建一个connection pool
7. 按照画面填写,database type为db2;database driver为other,”continue”
8. NAME 随便起,我这里为testidbc connection pool
DriverClassname: COM.ibm.db2.jdbc.net.DB2Driver
URL: jdbc:db2://192.1.7.150/50000:SAFE
Database user name 为admin
PASSWORD:1234
9. 测试连接,成功后应该有connection successful的画面
不成功时,一般有以下几种原因
A) 找不到路径,可能是上面1,2,3部设置不对,weblogic找不到驱动
B) db2java.jar,应该是2。0的版本
C) 套接字错误,一般是db2的端口有问题,在DB2命令窗口下运行db2jstrt 50000命令就可以了
D) 服务器不响应,看看数据库实例是否启动
10. 点 create and deploy
5. 建立DATASOURCE
填写name和jndi name 点“继续”,pool name要选择上面新建的那个,继续,再继续。就配置完成了。
这里要注意: Honor Global Transactions选项必须去掉,该选项的作用是将
transaction的类型设为distributed transaction,如果选中该选项,显示的调用commit时将会出错,这里多说一句
,建连接池时带XA的驱动最好都不要用
Transaction Type Autocommit Default Change Default? Result
Local transaction true yes 将其设为false可以提高性能
Distributed transaction false no 不能修改缺省值,如果将其设
为true,将抛出SQLException
注:local transaction一般指的是单数据源参与的事务. distributed transaction指的多数据源(db)参与的事务
6. 配置其它properties文件(非必须)
1. DBAccess和AppConfig
修改 C:beauser_projectsdomainsmydomainstartWebLogic.cmd这个文件,
在if "%WLS_REDIRECT_LOG%"=="" (前添加如下2句语句:
set DBACCESS=D:safesafeWEB-INFconfigureDBAccessConfig.properties
set AppConfig=D:safesafeWEB-INFconfigureConfig.properties
查找字符串 -Dweblogic.Name=%SERVER_NAME%(注意:有两处) ,在其前面添加如下内容,然后重新启动
workshop
-DDBCONFIGFILE=%DBACCESS% -DAppConfigFile=%AppConfig%
2. 修改Config.properties将路径都指向你当前的路径
3. 修改DBAccessConfig.properties
#数据库系统类型
DBType=db2
#数据库连接用户
DBUserName=ADMIN
#数据库连接用户密码
DBPassword=1234
#数据库连接池中连接使用比例(如一定时间内小于此值,连接数量将会被削减。)
InUsePercentage=0.5
#连接池实现方式(当前有两种:implementation,proxy)
#PoolImpl=implementation
#使用weblogic DataSource 配置
PoolImpl=proxy
datasource_jndiname=TESTJNDI
context_url=t3://localhost:7001
initial_context=weblogic.jndi.WLInitialContextFactory
oracle.path=./DBAccess/sql/oracle
#oracle.driver=oracle.jdbc.driver.OracleDriver
#oracle.url=jdbc:oracle:oci8:@ora31
oracle.driver=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@192.168.100.31:1521:PRO
oracle.sqlCacheMode=10002
oracle.poolinit=4
oracle.poolmax=10
oracle.poolmin=4
oracle.poolincr=1
oracle.poolidletime=10
#SQL Command存放路径(可为相对工作路径或绝对路径。)
mssql.path=C:/bea/weblogic81/samples/workshop/SamplesApp/safe/WEB-INF/configure/sql/sqlserver
#数据库系统对应JDBC驱动
mssql.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#JDBC URL
mssql.url=jdbc:microsoft:sqlserver://192.1.7.150:1433;DatabaseName=SAFEDB;SelectMethod=cursor
#SQL Command缓存模式(可取值10001或10002,分别对应初始化时缓存所有SQL Command或执行时缓存。)
mssql.sqlCacheMode=10002
#连接池初始大小
mssql.poolinit=4
#连接池最大连接数
mssql.poolmax=10
#连接池最小连接数
mssql.poolmin=4
#连接池连接递增数量级
mssql.poolincr=1
#连接池休眠时间(秒)
mssql.poolidletime=60
mssql.quick.url=jdbc:microsoft:sqlserver://192.1.7.150:1433;DatabaseName=SAFE;encoding=GBK
mssql.quick.poolinit=1
mssql.quick.poolmax=4
mssql.quick.poolmin=1
mssql.quick.poolincr=1
#SQL Command存放路径(可为相对工作路径或绝对路径。)
db2.path=D:/safe/safe/WEB-INF/configure/sql/db2
#数据库系统对应JDBC驱动
db2.driver=COM.ibm.db2.jdbc.net.DB2Driver
#JDBC URL
db2.url=jdbc:db2://192.1.7.150/50000:SAFE
#SQL Command缓存模式(可取值10001或10002,分别对应初始化时缓存所有SQL Command或执行时缓存。)
db2.sqlCacheMode=10002
#连接池初始大小
db2.poolinit=4
#连接池最大连接数
db2.poolmax=10
#连接池最小连接数
db2.poolmin=4
#连接池连接递增数量级
db2.poolincr=1
#连接池休眠时间(秒)
db2.poolidletime=60
db2.quick.url=jdbc:db2://192.1.7.150/50000:SAFE
db2.quick.poolinit=1
db2.quick.poolm
# posted by hexin_2000 @ 2005-07-06 16:03 评论(0)
分页查询的数据库处理
2005-6-13 星期一(Monday) 多云
1.在DB2和ORACLE中可以使用分析函数row_number() over ( partition by col1 order by col2 )
例:
比如想取出100-150条记录,按照tname排序
select tname,tabtype from (
select tname,tabtype,row_number() over ( order by tname ) rn from tab
)
where rn between 100 and 150;
2.也可以在ORACLE中直接使用rownum 虚列
select tname,tabtype from (
select tname,tabtype,rownum rn from tab where rownum <= 150
)
where rn >= 100;