断点

每天进步一点点!
posts - 174, comments - 56, trackbacks - 0, articles - 21

2010年7月25日

1、http://www.jar114.com/site.html
该网站可以提供我们项目中经常需要的jar包,如果缺少包,就可以在这里查找。

posted @ 2010-10-07 11:54 断点 阅读(409) | 评论 (1)编辑 收藏

流程定义文件*.jpdl.xml中如果有中文乱码,肯定是task中有中文。

需要在eclipse安装软件下,即E:\eclipse\eclipse.ini增加
-Dfile.encoding=UTF-8
然后重启eclipse即可解决。

posted @ 2010-10-05 21:06 断点 阅读(795) | 评论 (0)编辑 收藏

配置jbpm4工程的运行环境:
1、添加依赖库。
E:\JBPM\jbpm-4.3\jbpm.jar
E:\JBPM\jbpm-4.3\lib下的jar包。

2、添加配置文件。
E:\JBPM\jbpm-4.3\examples\src下的配置文件拷贝到自己java工程的src下。

---------------------------------------------------------------
管理流程定义:发布流程定义、查看流程定义、删除流程定义。
RepositoryService repositoryService = processEngine.getRepositoryService();

String deploymentId = repositoryService.createDeployment().addResourceFromClasspath

("helloworld.jpdl.xml").deploy();
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();  
repositoryService.deleteDeploymentCascade(deploymentId);
---------------------------------------------------------------

管理流程实例:发起新流程、执行等待的流程、查看流程实例、终止流程实例、删除流程实例。
ExecutionService executionService = processEngine.getExecutionService();

ProcessInstance pi = executionService.startProcessInstanceByKey("helloworld");
ProcessInstance pi = executionService.signalExecutionById(pi.getId()); //执行等待的流程.
List<ProcessInstance> list = executionService.createProcessInstanceQuery().list();
executionService.endProcessInstance(pi.getId(), "cancel");
executionService.deleteProcessInstanceCascade(pi.getId());


TaskService taskService = processEngine.getTaskService();
taskService.completeTask(taskId, map);

控制流程的活动:Start、End、Decision、Fork、Join、Sub-process、State、task.
原子活动:java、script、sql、hql、email。

posted @ 2010-10-05 21:01 断点 阅读(438) | 评论 (0)编辑 收藏

配置开发环境:
1、jbpm4:http://sourceforge.net/projects/jbpm/files/ 下选择jbpm-4.3.zip  137.9M

2、eclipse3.5版本以上 : http://www.eclipse.org/downloads/ 下选择 Eclipse IDE for Java EE  190M

3、GPD (Graphical Process Designer)插件,路径:E:\jbpm-4.3\install\src\gpd\jbpm-gpd-site.zip。
通过Eclipse-->help-->Install New Software-->Add-->Archive到插件所在路径。

 

posted @ 2010-10-05 16:37 断点 阅读(696) | 评论 (1)编辑 收藏

java.lang.NullPointerException
 at jxl.read.biff.File.<init>(File.java:77)
 at jxl.Workbook.getWorkbook(Workbook.java:250)
 at jxl.Workbook.getWorkbook(Workbook.java:235)
 at org.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:76)
 at org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:89)
 at org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:68)
 at com.sample.DecisionTableTest.readDecisionTable(DecisionTableTest.java:59)
 at com.sample.DecisionTableTest.main(DecisionTableTest.java:36)

Drools调用readDecisionTable()方法里面一处为:
InputStream is = DecisionTableTest.class.getResourceAsStream("rules\\Sample.xls");
final String drl = converter.compile( is, InputType.XLS );  
     
需改为如下,取的class即错误解决。
InputStream is = DecisionTableTest.class.getClassLoader().getResourceAsStream("rules\\Sample.xls");
final String drl = converter.compile( is, InputType.XLS );

posted @ 2010-10-05 00:39 断点 阅读(684) | 评论 (0)编辑 收藏

org.mvel.CompileException: can not resolve identifier: 'declr'
 at org.mvel.ASTNode.getReducedValue(ASTNode.java:315)
 at org.mvel.ast.PropertyASTNode.getReducedValue(PropertyASTNode.java:29)
 at org.mvel.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:103)
 at org.mvel.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:51)
 at org.mvel.TemplateInterpreter.execute(TemplateInterpreter.java:428)
 at org.mvel.TemplateInterpreter.parse(TemplateInterpreter.java:320)
 at org.drools.rule.builder.dialect.java.AbstractJavaBuilder.generatTemplates(AbstractJavaBuilder.java:113)
 at org.drools.rule.builder.dialect.java.JavaConsequenceBuilder.build(JavaConsequenceBuilder.java:95)
 at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:67)
 at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:446)
 at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:304)
 at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:167)
 at com.sample.DecisionTableTest.readDecisionTable(DecisionTableTest.java:63)
 at com.sample.DecisionTableTest.main(DecisionTableTest.java:36)

替换mvel.jar为mvel14-1.2.10.jar后不再报错,好像是jar包的问题。
看了下jar包里面的org.mvel.ASTNode.getReducedValue方法已经注释掉了。

posted @ 2010-10-05 00:32 断点 阅读(702) | 评论 (0)编辑 收藏

WARNING: Wasn't able to correctly close stream for decision table. nulljava.lang.NullPointerException
 at jxl.read.biff.File.<init>(File.java:77)
 at jxl.Workbook.getWorkbook(Workbook.java:250)
 at jxl.Workbook.getWorkbook(Workbook.java:235)
 at org.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:76)
 at org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:89)
 at org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:68)
 at org.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:110)
 at com.sample.DecisionTableTest.readDecisionTable(DecisionTableTest.java:57)
 at com.sample.DecisionTableTest.main(DecisionTableTest.java:35)

在web项目中的原先的写法为:
final String drl = converter.compile( "rules\\Sample.xls", InputType.XLS );

参考了下别人的写法,改为下面的方式进行处理:  
InputStream is = DecisionTableTest.class.getClassLoader().getResourceAsStream("rules\\Sample.xls");
final String drl = converter.compile( is, InputType.XLS );

posted @ 2010-10-05 00:22 断点 阅读(602) | 评论 (0)编辑 收藏

由于drools有新版本了,所以与MyEclipse整合进行了解下。
整合步骤如下:
1、下载MyEclipse 8.5;
2、在http://www.jboss.org/drools/downloads.html下载Drools Eclipse 3.5 Workbench 5.1 插件;
3、在E:\MyEclipse8.5下新建2个文件:links、myplugins。
E:\MyEclipse 8.5\links:放drools.link配置文件,内容为path=E:\\MyEclipse 8.5\\myplugins\\drools\\
E:\MyEclipse 8.5\myplugins:放drools文件,该E:\MyEclipse 8.5\myplugins\drools\eclipse下放置从网上下载的drools插件的features和plugins。
4、重启MyEclipse 8.5即可看见drools图标。
5、安装Jboss:下载jboss-5.0.0.GA,解压即可。
打开MyEclipse->window->Preference->MyEclipse->Servers->JBoss->JBoss 5.x进行jre及相关配置。

posted @ 2010-10-04 12:00 断点 阅读(1045) | 评论 (0)编辑 收藏

在命令行下运行java程序,出现如上异常Exception in thread "main" java.lang.UnsupportedClassVersionError。

主要是jdk的版本被oracle给换成低版本了。
可以在命令行下输入:javac -version 查看版本,最后把%JAVA_HOME%\bin;添加到Oracle之前,再重开启电脑,编译,运行即可。

可以查考:http://hi.baidu.com/tianxingacer/blog/item/e628b947ffc54f016a63e5ac.html/cmtid/1fe1e9ae1dc5b9f6faed50d9

posted @ 2010-10-02 23:52 断点 阅读(1054) | 评论 (0)编辑 收藏

我的机器以前装的是offices2003自带的js调试工具,昨天按照上IE8后,js调试工具有时候是ie8的调试界面,有时是ie6的调试界面,经网上查找已找到原因。

主要是我把IE8的‘脚本’下的“启动调试”给关了,所以最后只出现ie6的调试界面。

解决方法:打开IE8后,点击"工具"->"开发人员工具",或者快捷键F12,会打开页面调试窗口。

posted @ 2010-08-23 15:34 断点 阅读(3373) | 评论 (0)编辑 收藏

    今天用反编译工具查看java源代码,发现反编译的java文件有错误,在网上了解了下,是原先开发人员对代码做了一下加密处理。下面介绍一下java的混淆器Proguard。
    ProGuard 是一个免费的 Java类文件的压缩,优化,混肴器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法 。eclipse已经把Proguard集成在一起了。

其他地方也有介绍,如下:http://blog.csdn.net/alex197963/archive/2008/07/07/2620603.aspx

posted @ 2010-08-10 11:40 断点 阅读(317) | 评论 (0)编辑 收藏

1、当处理多个访问相同数据的用户时,通常可能出现三种问题:
脏读
当应用程序使用了被另一个应用程序修改过的数据,而这个数据处于未提交状态时,就会发生脏读。第二个应用程序随后会请求回滚被其修改的数据。第一个事务使用的数据就会
被损坏,或者“变脏”。

不可重复的读
当一个事务获得了数据,而该数据随后被一个单独的事务所更改时,若第一个事务再次读取更改后的数据,就会发生不可重复的读。这样,第一个事务进行了一个不可重复的读。

虚读
当事务通过某种查询获取了数据,另一个事务修改了部分该数据,原来的事务第二次获取该数据时,就会发生虚读。第一个事务现在会有不同的结果集,它可能包含虚读。

 

2、Java.sql.Connection接口定义的隔离级别
TRANSACTION_NONE 说明不支持事务
TRANSACTION_READ_UNCOMMITTED 说明在提交前一个事务可以看到另一个事务的变化。这样脏读、不可重复的读和虚读都是允许的。
TRANSACTION_READ_COMMITTED 说明读取未提交的数据是不允许的。这个级别仍然允许不可重复的读和虚读产生。
TRANSACTION_REPEATABLE_READ 说明事务保证能够再次读取相同的数据而不会失败,但虚读仍然会出现。
TRANSACTION_SERIALIZABLE 是最高的事务级别,它防止脏读、不可重复的读和虚读。


3、事务的隔离级别
在J2EE中,通过java.sql.Connection接口设置事务隔离级别,这一接口为连接的隔离级别提供了getter()和setter()
Int getTransactionIsolation() throws SQLException
void setTransactionIsolation() throws SQLException
Connection对象负责事务,一旦收到事务请求,事务将自动提交,因为Connection对象已定义为自动提交方式,可通过setAutoCommit(false)禁用自动提交模式
另外java.sql.DatabaseMetaData接口为数据存储提供支持的隔离级别查找方法:getTransactionIsolation(),supportsTransactionIsolationLevel()
对多个库操作的分布式事务必须在所有库中执行同一个隔离级别,否则会出现意想不到的结果


4、事务提交和回滚
为了完成提交事务和回滚事务,JDBC API包括了两个方法作为 Connection 接口的一部分。若将 Connection 对象名称指定为 con,通过调用 con.commit(); 可以保存程序状态;

通过调用 con.rollback(); 可以返回到以前保存的状态。如果数据库实际运行操作时有错误发生,这两个方法都会抛出 SQLExceptions,所以您需要在 try ... catch 块中包装它们。


5、批处理和事务
缺省情况下,JDBC 驱动程序运行在被称为自动提交的模式下,可禁用自动提交模式
con.setAutoCommit(false);
批处理操作中通过在一次单独的操作(或批处理)中执行多个数据库更新操作
{con.setAutoCommit(false) ;
Statement stmt = connection.createStatement() ; stmt.addBatch("INSERT INTO people VALUES('Joe Jackson', 0.325, 25, 105) ; stmt.addBatch("INSERT INTO people

VALUES('Jim Jackson', 0.349, 18, 99) ; stmt.addBatch("INSERT INTO people VALUES('Jack Jackson', 0.295, 15, 84) ;
int[] updateCounts = stmt.executeBatch() ; con.commit() ;

posted @ 2010-07-25 21:18 断点 阅读(426) | 评论 (0)编辑 收藏

Initial Capacity:池的连接数量,在启动时创建
Maximun Capacity:这是池可以打开的连接的最大数量
Capacity Increment:成组地打开增量连接
Login Delay Seconds:池驱动程序在启动时打开每一个新的连接需要等待的时间
Refresh Period(刷新周期)
Supports Local Transaction:只用于XA连接池
Allow Shrinking and Shrink Period(允许收缩和收缩期):如果池的数量太大,超过了初始,且如果任何一个连接在收缩期内空闲,那么空闲的连接将在收缩期末关闭


监控JDBC连接池:
Waiters Hight字段指明了最多有多少客户等待数据库连接
Waiters字段告诉你当前有多少客户正在等待连接
Connections Hight字段给出最大的并发连接数。
Wait Seconds Hight字段显示了客户等待数据库连接的最长时间

posted @ 2010-07-25 21:16 断点 阅读(393) | 评论 (0)编辑 收藏

1、连接:
直接连接(direct connection)
池连接(pooled connection)
连接复用 ,避免了数据库连接频繁建立、关闭的开销 ;
对JDBC中的原始连接进行了封装 ,隔离了应用的本身的处理逻辑和具体数据库访问逻辑 。

2、什么是连接池?
连接池是在Weblogic启动时候预先建立的数据库连接,由Weblogic在运行时负责维护。
可以减少程序每次数据库请求都要新创建数据库物理连接的时间及资源。
对数据库属性的更改只需通过控制台进行,不需改动客户端代码

MultiPool
可以使用MultiPool为高用户访问量提供数据库负载均衡,它使用简单的循环算法将连接请求平衡分配MultiPool中的每一个池。

多池的作用:为防数据库连接失败提供冗余,备份或高有效池;为高用户访问量提供数据库负载均衡,负载均衡池。
备份池:一个备份池由一个有顺序的连接池列表组成。
负载均衡池:使用简单的循环算法将连接请求平衡地分到在列表中的每一个池。

3、DataSource

数据源对应一个数据库连接池。客户程序可以通过数据源绑定的JNDI名字得到该数据源的引用,并通过数据源对象得到数据库连接。

JDBC的API:
java.sql.DriverManager 
java.sql.Connection 
java.sql.ResultSet 
Javax.sql.RowSet:
javax.sql.Statement  
java.sql.PreparedStatement:用于执行预编译的SQL语句
java.sql.CallableStatement:用于执行在数据库中定义的存储过程   
Javax.sql.DataSource是java.sql.Connectioin对象的工厂并使用一个JNDI服务注册它.

posted @ 2010-07-25 21:13 断点 阅读(301) | 评论 (0)编辑 收藏

1、Type 1类型驱动,JDBC-ODBC桥
通常运行Windows平台,需要在客户端安装ODBC驱动,早期Java访问数据库的主要方式,效率较低。

适用于快速的原型系统,没有提供JDBC驱动的数据库如Access ,由于包含多个驱动程序层,其性能一般不适合生产系统
Java-->JDBC-ODBC Bridge---->JDBC-ODBC Library--->ODBC Driver-->Database
驱动程序的类名称是 sun.jdbc.odbc.JdbcOdbcDriver
JDBC URL 的形式为 jdbc:odbc:dsn(dsn 是使用 ODBC 管理员注册数据库的数据源名称)
不是100%JAVA程序,与ODBC之间的接口采用非JAVA方式调用,因此不能在APPLET中使用
{
String url = "jdbc:odbc:jdbc" ;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(url, "java", "sun");
}


2、Type 2类型驱动,需要在客户端安装数据库的本地驱动,JDBC请求会转换为对数据库本地API的调用。

利用开发商提供的本地库来直接与数据库通信。
Java-->JDBC-Driver-->DB Client Library-->Database
绕过了ODBC层,性能优于Type1
也称为部分 Java 驱动程序,因为它们直接将 JDBC API 翻译成具体数据库的API
使用第二种模型将开发者限制在数据库厂商的客户机库支持的客户机平台和操作系统
Oracle的OCI驱动就属于Type2

3、Type 3类型驱动,DBC请求通过网络服务器层实现,在网络服务器层可以实现负载均衡,连接池管理等。

第三种驱动程序是纯 Java 驱动程序,它将 JDBC API 转换成独立于数据库的协议。JDBC 驱动程序并没有直接和数据库进行通讯;它和一个中间件服务器通讯,然后这个中间件服务器和数据库进行通讯。这种额外的中间层次提供了灵活性:可以用相同的代码访问不同的数据库,因为中间件服务器隐藏了 Java 应用程序的细节。要转到不同的数据库,您只需在中间件服务器上改变参数。(有一点需要注意:中间件服务器必须支持您访问的数据库格式。)
第三种驱动程序的缺点是,额外的中间层次可能有损整体系统性能。另一方面,如果应用程序需要和不同的数据库格式进行交互,第三种驱动程序是个有效的方法,因为不管底层
的数据库是什么,都使用同样的 JDBC 驱动程序。另外,因为中间件服务器可以安装在专门的硬件平台上,可以利用总的结果进行一些优化。
Java--->Jdbc Driver(Type3 jdbc driver)----->java middleware--->JDBC Driver---->Database
Weblogic的Pool驱动程序就是一个Type3的JDBC驱动程序。


4、Type 4类型驱动,为纯Java实现,不需要任何客户端设置。
OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。

JDBC应用的两种架构
两层架构:客户程序直接对数据库发起JDBC请求,Type1、2、4支持两层架构。
多层架构:客户程序将JDBC请求发送到中间层,中间层再将请求发送到数据库。

posted @ 2010-07-25 21:11 断点 阅读(666) | 评论 (0)编辑 收藏

通常应用系统会根据用户数、并发数、用户的行为等等来确定具体的性能目标,如果确定应用程序不能满足性能目标,那么就需要优化、重构程序并调整JVM、应用服务器、数据库、OS 或者改变硬件配置等等。

影响Java 性能的主要因素:
硬件,如CPU、内存、体系结构等等
操作系统
数据库系统
JVM
应用服务器
数据库服务器
网络环境
应用架构及程序编写水平

性能调整的步骤:
1、 使用工具测试系统是否满足性能目标
2、 发现性能瓶颈
3、 假设瓶颈的原因
4、 测试你的假设
5、 如果假设成立,更改这一部分
6、 测试确定更改是否可以提高性能,衡量性能提高的程度
7、重复以上步骤,直到获得可以接受的性能。

J2EE性能不好时的现象,主要表现在对客户端的请求响应很慢:
一向很慢:应用的响应总是很慢,改变环境(如应用负载、数据库的连接池数量等等),对响应时间的
影响不大。

越来越慢:在相同的负载情况下,随着系统运行的时间的增长,系统越来越慢,这可能是系统已到达
极限或是系统死锁和错误引起的。

低于负载时会越来越慢(Slower and slower under load):.

偶尔的挂起或异常错误(Sporadic hangs or aberrant errors):有时这可能是由于负载的变化或其他
情况引起的可以预测的死锁(Foreseeable lock ups): 挂起或最初只有少量错误,但随着时间的推移整个系统都锁上了,典型地这可能是为的适应"management by restarts.“

突发性的混乱(Sudden chaos): 系统已运行了一段时间(如一个小时或可能是三、四天),性能稳定并
可以接受, 突然没有任何理由,开始出错或死锁了。


监控工具:
WebLogic Server的控制台
cpu
内存
JDBC
辅助的工具
Jprobe
Optimizit
Vtune
TowerJ Performance

posted @ 2010-07-25 17:02 断点 阅读(214) | 评论 (0)编辑 收藏

WebLogic Server 10的下载地址:
http://www.oracle.com/technology/software/products/ias/htdocs/wls_main.html

1、域(Domains)
域是管理的单元或边界;
作为一个单元来管理的,并相互关联的一组Weblogic 服务器资源被称为域;
域由单一的管理服务器来管理。

2、机器(Machines)
可以对应到服务器所在的物理硬件;
可以是Unix或non-Unix类型;
可以用来远程管理和监控;

3、服务器(Servers)
服务器是执行在单一Java虚拟机 (JVM)中weblogic.Server类的实例。
服务器:最多和一个WLS机器关联;占用一定数量的RAM ;是多线程的。

4、管理服务器(Administration server)
对整个域的集中控制
XML配置存储库的保存者
日志信息的集中保存

5、被管理服务器(Managed Server)
WebLogicServer的一个实例;
从管理服务器远程加载配置信息‘;
可以是也可以不是集群的一部分。

6、集群 (Clustering)
WebLogic集群技术指通过一组服务器共同 工作,在多台机器间复制应用表示层和应用逻辑层的能力,
实现关键业务系统的负载分布,消除个别故障点;集群用来实现负载均衡和容错。

posted @ 2010-07-25 16:03 断点 阅读(262) | 评论 (0)编辑 收藏

1、J2EE应用开发的核心组件。
Servlet: 处理HTTP请求,产生响应。
JSP:Java Server Pages ,同Servlet。其中包含了HTML和JSP标签、Java代码和其他信息。
EJB:EJB服务端组件模型简化了具有交互性、扩展性和移植性中间组件的开发。EJB一般用于实现系统的业务逻辑。

2、J2EE的相关技术
核心:Servlet 、JSP、EJB
数据库:JDBC
命名和目录服务:JNDI
消息服务:JMS( Java Message Service )
Email:Java Mail
分布式计算:RMI、RMI-IIOP
事务:JTA(Java Transaction API)
数据格式化:XML、HTML、XSL
协议:TCP/IP、HTTP(S)、IIOP、SSL
安全:JAAS

3、J2EE的4层结构
客户层(浏览器)
Web层(HTML、Servlet、JSP)
业务层(EJB)
EIS层(关系数据库)

4、J2EE的Application Server:

Tomcat
BEA Weblogic
IBM Websphere
Oracle Application Server
Sun Java System
Jboss
Borland AppServer
Sybase Application Server
HP Application Server
Apusic

5、集成开发工具:
Borland:JBuilder
Oracle :JDeveloper
Bea :WebLogic Workshop
IBM:Websphere Studio
Sun:NetBeans
MyEclipse

在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器Tomcat,该服务器支持全部JSP以及Servlet规范,但是目前还不支持EJB。

在Java相关的开发领域中,常用的是3种数据库:Oracle、DB2和MySQL。有时候也使用微软公司的SQL Server数据库服务器 。

posted @ 2010-07-25 15:50 断点 阅读(261) | 评论 (0)编辑 收藏

DateUtils.compareYear(regDate, base.getTInsrncBgnTm()) // 新旧车标志【保险起期 - 初登年月】 单位:年

posted @ 2010-07-25 11:02 断点 阅读(259) | 评论 (0)编辑 收藏