JSTL详解(二)

     摘要: 9.2.3  EL 表达式的操作符 ...  阅读全文

posted @ 2007-01-18 10:02 nbt 阅读(5853) | 评论 (3)编辑 收藏

JSTL详解(一)

     摘要: 概述 ...  阅读全文

posted @ 2007-01-18 09:57 nbt 阅读(4255) | 评论 (1)编辑 收藏

jBPM3.12用户指南中文翻译----第五章 部署

 这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照,只翻译部分我认为重要的,不翻译简单的英文,以免浪费你我的时间。 同时,对于其中的部分内容,我会在翻译中做出解释和写上我的理解。

Chapter 5. Deployment部署

jBPM is an embeddable BPM engine, which means that you can take jBPM and embed it into your own java project, rather then installing a separate product and integrate with it. One of the key aspects that make this possible is minimizing the dependencies. This chapter discusses the jbpm libraries and their dependencies.

   jBPM是一个嵌入式的BPM(业务程序管理)引擎。本章讨论jbpm库和它的依赖库。

5.1. Java runtime environment

jBPM 3 requires J2SE 1.4.2+

5.2. jBPM libraries

jbpm-[version].jar is the library with the core jbpm functionality.jbpm的核心功能库。

jbpm-identity-[version].jar is the (optional) library containing an identity component as described in Section 11.11, “The identity component”.

可选的,这个库包含了身份验证组件。用于流程的参与者的管理。

5.3. Third party libraries第三方库

In a minimal deployment, you can create and run processes with jBPM by putting only the commons-logging and dom4j library in your classpath. Beware that persisting processes to a database is not supported. The dom4j library can be removed if you don't use the process xml parsing, but instead build your object graph programatically.

最小的jbpm部署,只需要核心jbpm库和commons-logging库,以及dom4j库到你的classpath中。此时,不支持持久化业务程序到数据库。

Table 5.1. 

Library

Usage用途

Description描述

Directory目录

commons-logging.jar

logging in jbpm and hibernate

The jBPM code logs to commons logging. The commons logging library can be configured to dispatch the logs to e.g. java 1.4 logging, log4j, ... See the apache commons user guide for more information on how to configure commons logging. if you're used to log4j, the easiest way is to put the log4j lib and a log4j.properties in the classpath. commons logging will automatically detect this and use that configuration.

lib/jboss (from jboss 4.0.3)

dom4j-1.6.1.jar

process definitions and hibernate persistence

xml parsing

lib/dom4j

A typical deployment for jBPM will include persistent storage of process definitions and process executions. In that case, jBPM does not have any dependencies outside hibernate and its dependent libraries.

典型的jBPM部署包括持久化业务程序定义和执行的功能。 需要Hibernate

Of course, hibernate's required libraries depend on the environment and what features you use. For details refer to the hibernate documentation. The next table gives an indication for a plain standalone POJO development environment.

下面的表给出了简单的标准POJO部署环境需要的第三方库。

jBPM is distributed with hibernate 3.1 final. But it can also work with 3.0.x. In that case, you might have to update a few hibernate queries in the hibernate.queries.hbm.xml configuration file. For more info about customizing queries, see Section 7.6, “Customizing queries”

Table 5.2. 

Library

Usage

Description

Directory

hibernate3.jar

hibernate persistence

the best O/R mapper

lib/hibernate (hibernate 3.1 final)

antlr-2.7.5H3.jar

used in query parsing by hibernate persistence

parser library

lib/jboss (from jboss 4.0.3)

cglib-2.1_2jboss.jar

hibernate persistence

reflection library used for hibernate proxies

lib/jboss (from jboss 4.0.3)

commons-collections.jar

hibernate persistence

 

lib/jboss (from jboss 4.0.3)

ehcache-1.1.jar

hibernate persistence (in the default configuration)

second level cache implementation.二级缓存实现。

When configuring a different cache provider for hibernate, this library is not required.

lib/hibernate

jaxen-1.1-beta-4.jar

process definitions and hibernate persistence

XPath library (used by dom4j)

lib/hibernate

jdbc2_0-stdext.jar

hibernate persistence

 

lib/hibernate

asm.jar

hibernate persistence

asm byte code library

二进制代码修改库

lib/hibernate

asm-attrs.jar

hibernate persistence

asm byte code library

lib/hibernate

The beanshell library is optional. If you don't include it, you won't be able to use the beanshell integration in the jbpm process language and you you'll get a log message saying that jbpm couldn't load the Script class and hence, the script element won't be available.

Beanshell库是可选的。

Table 5.3. 

Library

Usage

Description

Directory

bsh-1.3.0.jar

beanshell script interpreter

Only used in the script's and decision's. When you don't use these process elements, the beanshell lib can be removed, but then you have to comment out the Script.hbm.xml mapping line in the hibernate.cfg.xml

lib/jboss

posted @ 2006-10-08 18:25 nbt 阅读(1255) | 评论 (0)编辑 收藏

jBPM3.12用户指南中文翻译----第四章 面向图表编程

     摘要: 这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照,只翻译部分我认为重要的,不翻译简单的英文,以免浪费你我的时间。 同时,对于其中的部分内容,我会在翻译中做出解释和写上我的理解。   Chapter 4. Graph Oriented Programming面向图表编程4.1. Introduction介绍This chapter can be conside...  阅读全文

posted @ 2006-10-08 18:22 nbt 阅读(1836) | 评论 (0)编辑 收藏

jBPM3.12用户指南中文翻译----第三章 指南

     摘要: 这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照,只翻译部分我认为重要的,不翻译简单的英文,以免浪费你我的时间。       同时,对于其中的部分内容,我会在翻译中做出解释和写上我的理解。Chapter 3. Tutorial指南This tutorial will show you basic process constructs 过程建造in jpdl an...  阅读全文

posted @ 2006-10-08 18:19 nbt 阅读(1466) | 评论 (0)编辑 收藏

jBPM3.12用户指南中文翻译----第二章 起步

  这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照,只翻译部分我认为重要的,不翻译简单的英文,以免浪费你我的时间。
       同时,对于其中的部分内容,我会在翻译中做出解释和写上我的理解。


Chapter 2. Getting started起步

This chapter takes you through the first steps of getting JBoss jBPM and provides the initial pointers to get up and running in no time.

初始化JBpm3.12

2.1. Downloadables Overview

Listed below are the different jBPM packages that are available today. Each of these packages contains one or more downloadable files. Along with each of these files goes a description of its contents and a pointer to any relevant installation instructions if they are available.

All downloads described below can be found on the sourceforge jbpm downloads page.

2.1.1. jBPM 3

Download JBoss jBPM 3 at sourceforge.net. This is the main distribution package containing the core engine and a number of additional modules that you may need to work with jBPM. 包括JBpm核心和其他包。

  • The Starters Kit (jbpm-starters-kit-<version>.zip): If you want to get started with jBPM quickly, this is the file you want to download. It contains all the other modules of this package plus the graphical designer in one single download. Extract the zipped archive into a folder of your choice and read the file named 'readme.html' for more info and further installation instructions. With this starters kit you can immediately get started with the Chapter 3, Tutorial.

包含了包括图形化设计器在内的所有模块,能够帮助你快速启动。

  • Core Engine and Identity Component (jbpm-<version>.zip): The download contains the jBPM core engine as well as the identity component for actor and group management. To start working with it, extract the archive into a folder of your choice. You will find pointers to the User's Guide and other important information resources in the 'readme.html' file in the 'jbpm-<version>' folder.

核心,包括核心引擎和身份组建,内有用户指南文档。

  • Database Extensions (jbpm-db-<version>.zip):数据库扩展 The database extension pack contains the jBPM core engine as well as the identity component for actor and group management. To start working with it, extract the archive into a folder of your choice. You will find pointers to the User's Guide and other important information resources in the 'readme.html' file in the 'jbpm-<version>' folder.

2.1.2. jBPM Process Designer

jBPM过程设计器

Download JBoss jBPM Process Designer at sourceforge.net. The designer is an eclipse plugin and enables you to author 创作your process definitions过程定义 and to easily deploy them. The plug-in is available for download either as a zipped Eclipse feature or as a zipped Eclipse update site. There is no difference in content, the only difference is in the way you have to do the installation.

  • Eclipse Update Site (jbpm-gpd-site-<version>.zip): If you want to be absolutely sure that the designer installation goes smoothly, we recommend to use the update site mechanism together with a new Eclipse installation. Of cource the Eclipse version should match the downloaded update site archive. To get started with the designer plugin, follow the instructions in the 'readme.html' file included in the archives root folder to succesfully install the GPD.

使用本地站点更新方式部署。

  • Eclipse Feature (jbpm-gpd-feature-<version>.zip): If you are tired of each time having to do a fresh Eclipse installation and you are willing to cope with some possible issues, you can try the feature download. In this case installation is as easy as extracting the archive into your Eclipse installation (make sure the included 'plugins' and 'features' folders end up in the same location of your Eclipse installation) overwriting the files and folders with the same name that are possibly already present. This installation is very easy, but you could run into incompatibility issues when you overwrite plugins already present in your installation because of other features that you did install. Though they have the same name it could happen that the versions of these colliding plugins are not equal, hence the possible incompatibilities. The installation instructions are repeated in the 'readme.html' file.

这个是手工部署。

2.1.3. jBPM BPEL extension

Download JBoss jBPM BPEL extension at sourceforge.net. It contains only one file : jbpm-bpel-<version>.zip. To get started with the BPEL extensions, look in the User's Guide in the 'doc' subfolder of the toplevel folder.

jbpm-bpel:含有JBoss jBPMBPEL扩展件方面的信息。

BPEL是一个规范的SOA组件。因为与JBoss jBPM使用的许可证不同,所以被独立了出来。

2.2. The JBoss jBPM project directory

  • professional support: JBoss is the company that backs this project with professional support, training and consultancy services.
  • user guide: is the document you're reading and serves as the main entry point into the project.
  • forums: get in contact with the community, ask questions and discuss jBPM   论坛,社区。
  • wiki: extra information, mostly provided by the community
  • issue tracker: for submitting bugs and feature requests
  • downloads: sourceforge download page for jBPM
  • mailing lists: mailing lists are used for announcements
  • javadocs: part of the download in the doc/javadoc directory.

2.3. CVS access

2.3.1. Anonymous CVS access

Alternatively, you can get JBoss jBPM from cvs with the following information:

  • Connection type: pserver
  • User: anonymous
  • Host: anoncvs.forge.jboss.com
  • Port: 2401 (which is the default)
  • Repository path: /cvsroot/jbpm
  • Label: :pserver:anonymous@anoncvs.forge.jboss.com:/cvsroot/jbpm

2.3.2. Developer CVS access

To get cvs developer access, you must sign contributors agreement and you need an ssh key. More information on both can be found on the JBoss cvs repository wiki page

  • Connection type: ext over ssh (extssh in eclipse)
  • User: sf.net username or jboss username
  • Host: cvs.forge.jboss.com
  • Port: 2401 (which is the default)
  • Repository path: /cvsroot/jbpm
  • Label: :pserver:anonymous@cvs.forge.jboss.com:/cvsroot/jbpm

posted @ 2006-10-08 18:16 nbt 阅读(2479) | 评论 (0)编辑 收藏

基于JBPM的工作流应用的开发

利用JBPM开发一个工作流应用,相对于使用shark是比较简单直观的。我们之前提到过,一个工作流管理系统最基本的组件包括流程定义组件,流程执行组件和流程客户端组件。下面从这三个方面看一下JBPM对开发工组流应用的支持。

1.   流程的定义

JBPM 没有采用WfMC提出的流程定义语言XPDL,而是自己开发了一种称为JPDL的语言来定义流程。因此,在开发一个应用时我们最终需要生成一个符合该XML schema的文件processdefinition.xml来表示定义好的流程。它可以manually获得,也可以使用可视化的定义工具自动生成。

JBPM 专门提供了一个开发流程的环境,称为process development environment(pde)。可以 jbpm 根目录下执行命令 ant create.pde 来生成 pde 工作目录 。生成的包结构如下所示:


         Build.xml
文件用于配置一个流程,即利 ant 工具解析 processdefinition.xml 文件,并将运行流程时所需的相关信息存储到数据库中。

Lib 存放了开发和配置流程所需的全部库文件,包括数据库的 jdbc 驱动。

Src 包括开发和配置流程的全部源文件和所需资源。

Src/config 只有两个文件, jbpm.properties log4j.properties 。其中, jbpm.propertie 文件包含了数据库的配置信息。因此,更换数据库或数据库的 jdbc 驱动都需要修改这里。

Scr/java 存放 java 源文件。

Src/process 存放工作流定义文件 (processdefinition.xml) 和相关的资源文件,如图片和 form 文件。

Src/test 存放测试代码。

Target/classes src/java 中源码的输出目录,存放编译后的 class 文件。

Target/par 存放用命令 ant build.process.archives 生成的 par 包。 Par 包实际上就是把 src/process 中的流程定义及相关文件打包成 zip 形式存储。

Target/test-classes 存放测试程序的编译结果。

Target/test-report 存放测试报告。

2.   流程的执行

JBPM 把负责执行流程的类库打包成jbpm.core.jar,它也是JBPM工作流引擎的核心。在开发一个工作流应用时,只需将该jar文件放到相应的lib目录下面。而开发人员就可以专注于开发一个流程模型,完成对流程的定义,而无需过多考虑流程执行的细节。

3.   流程的客户端

客户端组件的开发,需要一个应用服务器作为servlet container,我们这里选择了tomcatJBPM将开发一个webapp所需的类打包成jbpm.web.jar,包括自定义的tagStruts用到的类等等。开发应用时,将该jar放到WEB-INF\lib下面就可以了。

一个基于工作流的webapp应用的开发和普通webapp的开发方式很相似。包结构也保持一贯作风:

      
所以,我们需要做的主要工作是完成客户端应用所需的 jsp 页面的开发,可以选用 Struts 来进行开发。需要注意的是,我们要对 lib 目录下的 jbpm.properties 文件进行配置,主要是对数据库 jdbc 驱动的配置。

4.    系统数据库的创建

JBPM 可以支持多种数据库系统,包括MSSQL,MysqlOraclehdbsql等。它提供了很灵活的配置方式,只需要修改jbpm.properties文件,同时将相应的JDBC Driver拷贝到lib目录就可以了。利用antgenerate.ddl命令,JBPM还支持自动生成用于创建系统表的sql脚本,而且可以生成对应于各种数据库系统的脚本,非常便于数据库系统的更换和系统数据库的创建。

5.   开发过程

环境配置如下:

JBPM 2.0

Ant 1.6.2

Tomcat 5.0.27

SQL Server 2000

SQL Server 2000 Driver for JDBC

仍以之前演示过的request a payraise为例(见下图),介绍一下利用JBPM开发一个工作流应用需要完成的工作。

1)       首先,我们需要完成流程的定义。这不仅包括定义processdefinition.xml,还要对流程执行时使用到的其他资源进行定义。比如,在web应用中用到的图片,form等。还需要配置form.xml,该文件确定了流程中不同状态和form的关系,如request a payraise状态下,需要如下图所示的form

 

补充Processdefinition.xml
示例:

 

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

<!DOCTYPE process-definition PUBLIC "-//jBpm/jBpm Mapping DTD 2.0//EN" "http://jbpm.org/dtd/processdefinition-2.0.dtd">

<process-definition name="pay raise process">

<!-- SWIMLANES -->
<swimlane name="requester" />

    <swimlane name="boss">
    <delegation class="org.jbpm.delegation.assignment.ActorAssignmentHandler">cg</delegation>
</swimlane>

    <swimlane name="erp operator">
    <delegation class="org.jbpm.delegation.assignment.ActorAssignmentHandler">pf</delegation>
</swimlane>

<!-- START-STATE -->
  <start-state name="request a payraise" swimlane="requester">
    <transition to="evaluating"/>
  </start-state>

<!-- NODES -->
  <state name="evaluating">
    <assignment swimlane="boss" />
    <transition name="approve"     to="fork"/>
    <transition name="disapprove"  to="done"/>
  </state>
 
  <fork name="fork">
   <transition to="updating erp asynchronously" />
   <transition to="treating collegues on cake and pie" />
  </fork>

      <state name="updating erp asynchronously">
    <assignment swimlane="erp operator" />
    <transition to="join" />
  </state>

      <state name="treating collegues on cake and pie">
    <assignment swimlane="requester" />
    <transition to="join" />
  </state>
 
  <join name="join">
   <transition to="done" />
  </join>

<!-- END-STATE -->
  <end-state name="done" />

</process-definition>


 

2)       有了processdefinition.xml文件,我们就可以配置流程。即使用ant命令,解析这个文件并且将执行时需要的信息存储在数据库中。如下图:

3)       我们无需关心流程将怎么执行,完全交给jbpm.core.jar就好。

4)       剩下的另外一项比较繁重的工作就是开发一个用于该流程的客户端应用。前面已经提到过, 我们需要做的主要工作是完成客户端应用所需的 jsp 页面的开发。包括登录页面,查看自己的 tasklist 页面,执行 task 的页面等。除此之外,还可以通过日志来完成流程的监控和管理界面。这些都由应用的需求来决定。

posted @ 2006-10-08 18:14 nbt 阅读(1311) | 评论 (1)编辑 收藏

jBPM3.12用户指南中文翻译----第一章 绪论

       这是Jboss 的jBPM3.12框架的用户指南的中文翻译。其中第一章的译文,是我在网上找到的。其他几章都是我自己做的翻译。我的翻译是中英文对照,只翻译部分我认为重要的,不翻译简单的英文,以免浪费你我的时间。
       同时,对于其中的部分内容,我会在翻译中做出解释。
下面是从网络上找到的第一章,这是jBPM3.0的用户指南的译文。但是第一章,3.0和3.1内容相差不大,我就不做翻译了。直接使用这一篇。

目录

第一章绪论

 JBoss jBPM 是一个灵活的,易扩展的工作流管理系统。JBoss jBPM有一套直观的流程建模语言,这套语言能用任务(task),异步通信的等待状态(wait state ),定时器(timer),自动化的动作(automated action)等来图形化的表示业务流程。为了把这些操作集成在一

起,JBoss jBPM拥有强大的,易扩展的控制流程机制。

JBoss jBPM对外依赖程度很小,你完全可以像用java的类库一样用它。并且它也可以被部署在高性能的J2EE集群应用服务器上。

JBoss jBPM能配置在任何数据库上,并且能被部署在任何的应用服务器上。

1.1 总览

 工作流和业务流程处理功能的核心部分被打包成一个简单的java类库。这个类库包括了这样一个服务:流程信息的存储,更新,和从数据库中重新取回。

   

1.1JBoss jBPM组成模块的概略图

1.2 JBoss jBPM starter kit

starter kit是一个包含jbpm所有模块的下载包。这个下载包中包括以下模块:

·                                 jbpm-server, 一个预选配置好的jboss应用服务器。

·                                 jbpm-designer, 图形化定制流程的eclipse插件。

·                                 jbpm-db, jBPM的数据库兼容包 (见后边论述)

·                                 jbpm, jbpm的核心模块,其中包括libs文件夹和这个用户说明。

·                                 jbpm-bpel, JBoss jBPMBPEL扩展的一些参考资料

预先配置好的JBoss应用服务器具有如下组成部分:

jBPM核心模块,被打包成一个用于提供服务的存档文件

带有jbpm表的集成数据:默认的hypersonic数据库拥有jbpm表,并且这个表已经拥有一个流程了。

Jbpmweb控制台,它既可以被Jbpm管理员用也可以被流程的参与者使用。

执行定时器的Jbpm的调度程序,这个调度程序在starter kit里边被配置成一个servlet。这个servlet会产生一个新的线程来监视和执行定时器。

一个具体流程的例子,它已经被部署在jbpm数据库中了。

1.3 JBoss jBPM 流程图形定制器

JBoss jBPM还拥有一套图形化的设计工具。这个设计器是一个图形化的业务流程定制工具。

JBoss jBPM流程图形定制器是eclipse的一个插件。单独安装这个定制器非常简单。

这个图形设计器最重要的特性是:业务分析人员也能像技术开发人员一样用它来完成任务。这使得业务流程建模能平滑的转换到具体技术实现。

这个插件可以利用eclipse的一般升级机制通过一个升级站点得到安装(zip文件格式)。也可以通过解压一个特定的包到eclipse的安装目录来安装此插件。

1.4 JBoss jBPM的核心模块

JBoss jBPM的核心模块是一个用来管理流程定义和流程实例的执行环境的普通java程序。

JBoss jBPM是一个java类库。所以它可以被用在任何java环境中,比如:web应用程序,swing应用程序,EJBweb service……。JBPM类库还可以被打包并被当成无状态会话EJBstateless session EJB)使用。这样可使它被部署在集群上并且适应高性能应用。这些无状态会话EJB必须符合J2EE1.3规范这样才能使它可以被部署在任何应用服务器上。

JBoss jBPM的核心模块被打包成一个简单的java库文件。依你功能的需要,jbpm-3.0.jar这个库文件对一些第三方的类库比如hibernate, dom4j有所依赖。这些依赖在第五章(部署)中作了详细的说明。

至于持久化,JBPM在内部用了hibernate。除了传统的O/R映射功能,hibernate还解决了不同数据SQL dialect差异的问题,这使得JBPM能适应现在所有的数据库。

JBoss jBPM API可以被你工程中任何的java代码调用,比如,你的web应用程序,EJBweb service 模块,消息驱动bean或其它任何java模块。

1.5 JBoss jBPM web应用程序的控制台

jBPM web应用程序的控制台提供两种服务。首先,它被用来当作一个用来和流程执行过程中产生的任务进行交互的主要用户接口,其次,它还是一个用来检查和操作运行实例的管理和监控平台。

1.6 JBoss jBPM人员组织模块

JBoss jBPM可以和任何包括人员和其他组织信息的公司结构集成在一起。但是对那些组织结构信息模块很难获取的项目,JBoss jBPM提供了这个模块。这个模块使用的模型要比传统的servlet, ejb,portlet模型丰富的多。

更多信息,请参照第九章第九节人员组织模块

1.7 JBoss jBPM调度程序

JBoss jBPM调度程序是一个用来监测和执行在流程执行过程中设置的定时器的模块。

定时器模块被打包在jbpm的核心包中,但是它必须被部署在以下环境中:或者你必须订制一个调度servlet,它来产生一个监测线程,或者你必须启动一个单独的JVM来执行调度程序。

1.8 JBoss jBPM 数据库兼容包

JBoss jBPM 数据库兼容包是一个下载包,它包括所有的资料,driversscripts,用这些你可以使jbpm运行在你选择的数据库上。

1.9 JBoss jBPM BPE的扩展

JBoss jBPM BPE的扩展是一个为了支持BPEL独立的扩展包。BPEL的本质就是一组用来参照别的web serviceweb servicexml脚本语言。

posted @ 2006-10-08 18:11 nbt 阅读(1629) | 评论 (0)编辑 收藏

log4j的用法

一、前言:
     log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现,     当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中实际使用最多的还是log4j,     人们遗忘了sun的日志工具类。     它的一个独有特性包括在类别中继承的概念。通过使用类别层次结构,这样就减少了日志记录输出量,并将日志记录的开销降到最低。
  
     它允许开发者控制以任意间隔输出哪些日志语句。通过使用外部配置文件,完全可以在运行时进行配置。几乎每个大的应用程序都包括其自己的日志记录或跟踪 API。经验表明日志记录是开发周期中的重要组成部分。同样,日志记录提供一些优点。首先,它可以提供运行应用程序的确切 上下文。一旦插入到代码中,生成日志记录输出就不需要人为干涉。其次,日志输出可以保存到永久媒体中以便以后研究。最后,除了在开发阶段中使用,十分丰富的日志记录包还可以用作审计工具。

    依照该规则,在 1996 年初,EU SEMPER(欧洲安全电子市场)项目就决定编写自己的跟踪 API。 在无数次改进、几次具体化和许多工作之后,该 API 已经演变成 log4j,一种流行的 Java 日志记录包。  这个包按 IBM 公共许可证分发,由开放源码权威机构认证。

    日志记录有其自己的缺点。它会降低应用程序的速度。如果太详细,它可能会使屏幕滚动变得看不见。  为了减低这些影响,log4j 被设计成快速且灵活的。由于应用程序很少将日志记录当作是主要功能,  log4j API 力争易于了解和使用。
     log4j,它可以控制以任意间隔输出哪些日志语句。

二、主要组件

1、根类别(在类别层次结构的顶部,即全局性的日志级别)
 
配置根Logger,其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, ...

level 是日志记录的类别
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

类别level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先级。
og4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG
配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
如果为log4j.rootLogger=WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉。

举例:log4j.rootCategory=INFO,stdout,Runlog,Errorlog
根日志类别为INFO,DEBUG将被屏蔽,其他的将被输出。 stdout,Runlog,Errorlog分别为3个输出目的地。

 2、常用输出格式

 -X号:X信息输出时左对齐;
 %p:日志信息级别
 %d{}:日志信息产生时间
 %c:日志信息所在地(类名)
 %m:产生的日志具体信息
 %n:输出日志信息换行
 举例:
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n

3、布局
使用的输出布局,其中log4j提供4种布局:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

举例:
输出格式为HTML表格
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout

输出格式为可以灵活地指定布局模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

输出格式为包含日志信息的级别和信息字符串
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

输出格式为包含日志产生的时间、线程、类别等等信息
log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout


4、目的地

配置日志信息输出目的地Appender,其语法为


log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

log4j支持的输出目的地:
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
org.apache.log4j.net.SMTPAppender 邮件
org.apache.log4j.jdbc.JDBCAppender 数据库
其他如:GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等

举例:


输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender(指定输出到控制台)
log4j.appender.Threshold=DEBUG(指定输出类别)
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout(指定输出布局)
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出格式)

输出到文件

   log4j.appender.FILE=org.apache.log4j.FileAppender(指定输出到文件)
   log4j.appender.FILE.File=file.log(指定输出的路径及文件名)
   log4j.appender.FILE.Append=false
   log4j.appender.FILE.layout=org.apache.log4j.PatternLayout(指定输出的布局)
   log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出的格式)

输出到文件(轮换"日志文件",当日志文件达到指定大小时,该文件就被关闭并备份,然后创建一个新的日志文件)

  log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender(指定输出到文件)
  log4j.appender.ROLLING_FILE.Threshold=ERROR(指定输出类别)
  log4j.appender.ROLLING_FILE.File=rolling.log(指定输出的路径及文件名)
  log4j.appender.ROLLING_FILE.Append=true
  log4j.appender.ROLLING_FILE.MaxFileSize=10KB(指定输出到文件的大小)
  log4j.appender.ROLLING_FILE.MaxBackupIndex=1
  log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout(指定采用输出布局)
  log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定采用输出格式)

输出到Socket
 log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender(指定输出到Socket)
 log4j.appender.SOCKET.RemoteHost=localhost(远程主机)
 log4j.appender.SOCKET.Port=5001(远程主机端口)
 log4j.appender.SOCKET.LocationInfo=true
 log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout(布局)
 log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n(输出格式)

输出到邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender(指定输出到邮件)
 log4j.appender.MAIL.Threshold=FATAL
 log4j.appender.MAIL.BufferSize=10
 log4j.appender.MAIL.From=chenyl@hollycrm.com(发件人)
 log4j.appender.MAIL.SMTPHost=mail.hollycrm.com(SMTP服务器)
 log4j.appender.MAIL.Subject=Log4J Message
 log4j.appender.MAIL.To=chenyl@hollycrm.com(收件人)
 log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout(布局)
 log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)

 

输出到数据库
 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender(指定输出到数据库)
 log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test(指定数据库URL)
 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver(指定数据库driver)
 log4j.appender.DATABASE.user=root(指定数据库用户)
 log4j.appender.DATABASE.password=root(指定数据库用户密码)
 log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')(组织SQL语句)
 log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout(布局)
 log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)

5、日志类别补充
有时我们需要对某个特定的部分指定有别于根类别的日志类别,可以指定某个包的优先级
如:
  log4j.category.com.neusoft.mbip.dm.util=ERROR ,其中com.neusoft.mbip.dm.util为我们需要特别指定日志类别的部分。
 
  或者可以指定输出文件的优先级
  log4j.appender.Errorlog.Threshold=ERROR
 
 
 三、 常用log4j配置 

常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子:

1、log4j.properties

### 设置org.zblog域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1,A2 ##
log4j.category.org.zblog=ERROR,A1
log4j.category.org.zblog=INFO,A2

log4j.appender.A1=org.apache.log4j.ConsoleAppender
### 设置输出地A1,为ConsoleAppender(控制台) ##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
### 设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### 配置日志输出的格式##

log4j.appender.A2=org.apache.log4j.RollingFileAppender
### 设置输出地A2到文件(文件大小到达指定尺寸的时候产生一个新的文件)##
log4j.appender.A2.File=E:/study/log4j/zhuwei.html
### 文件位置##
log4j.appender.A2.MaxFileSize=500KB
### 文件大小##
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
##指定采用html方式输出

2、log4j.xml

<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender">
<!-- 设置通道ID:org.zblog.all和输出方式:org.apache.log4j.RollingFileAppender -->
    <param name="File" value="E:/study/log4j/all.output.log" /><!-- 设置File参数:日志输出文件名 -->
    <param name="Append" value="false" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 设置输出文件项目和格式 -->
    </layout>
</appender>

<appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="E:/study/log4j/zhuwei.output.log" />
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="10240" /> <!-- 设置文件大小 -->
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
    </layout>
</appender>

<logger name="zcw.log"> <!-- 设置域名限制,即zcw.log域及以下的日志均输出到下面对应的通道中 -->
    <level value="debug" /><!-- 设置级别 -->
    <appender-ref ref="org.zblog.zcw" /><!-- 与前面的通道id相对应 -->
</logger>

<root> <!-- 设置接收所有输出的通道 -->
    <appender-ref ref="org.zblog.all" /><!-- 与前面的通道id相对应 -->
</root>

</log4j:configuration>


3、配置文件加载方法:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

public class Log4jApp {
    public static void main(String[] args) {
        DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件
        //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件

        Logger log=Logger.getLogger("org.zblog.test");
        log.info("测试");
    }
}

4、项目使用log4j
在web应用中,可以将配置文件的加载放在一个单独的servlet中,并在web.xml中配置该servlet在应用启动时候加载。
对于在多人项目中,可以给每一个人设置一个输出通道,这样在每个人在构建Logger时,用自己的域名称,让调试信
息输出到自己的log文件中。

四、log4j配置举例(properties)

#log4j.rootLogger = [ level ] , appenderName, appenderName,
#类别level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先级
#Log4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG

#stdout为控制台 ,Errorlog为错误记录日志 ,
log4j.rootCategory=INFO,stdout,Runlog,Errorlog


#输出的appender的格式为
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#log4j.appender.appenderName.option1 = value1
#log4j.appender.appenderName.option = valueN
#Log4j中appender支持的输出
#org.apache.log4j.ConsoleAppender 控制台
#org.apache.log4j.FileAppender 文件
#org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
#org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
#org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
#org.apache.log4j.net.SMTPAppender 邮件
#org.apache.log4j.jdbc.JDBCAppender 数据库

#定义输出的形式
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Runlog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Errorlog=org.apache.log4j.DailyRollingFileAppender


#可以指定输出文件的优先级
log4j.appender.Errorlog.Threshold=ERROR

#指定输出的文件
log4j.appender.Runlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\runlog\\runlog.log
log4j.appender.Errorlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\errorlog\\errorlog.log


#Log4j的layout布局
#org.apache.log4j.HTMLLayout 以HTML表格形式布局
#org.apache.log4j.PatternLayout 可以灵活地指定布局模式
#org.apache.log4j.SimpleLayout  包含日志信息的级别和信息字符串
#org.apache.log4j.TTCCLayout    包含日志产生的时间、线程、类别等等信息

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Runlog.layout=org.apache.log4j.PatternLayout
log4j.appender.Errorlog.layout=org.apache.log4j.PatternLayout

#输出格式,log4j javadoc org.apache.log4j.PatternLayout
#-X号:X信息输出时左对齐;
#%p:日志信息级别
# %d{}:日志信息产生时间
# %c:日志信息所在地(类名)
# %m:产生的日志具体信息
# %n:%n:输出日志信息换行
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n

#指定某个包的优先级
log4j.category.com.neusoft.mbip.dm.util=ERROR


#示例
###################
# Console Appender
###################
#log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#log4j.appender.Threshold=DEBUG
#log4j.appender.CONSOLE.Target=System.out
#log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n


#####################
# File Appender
#####################
#log4j.appender.FILE=org.apache.log4j.FileAppender
#log4j.appender.FILE.File=file.log
#log4j.appender.FILE.Append=false
#log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis

########################
# Rolling File????? RollingFileAppender??????????????????
########################
#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLING_FILE.Threshold=ERROR
# 文件位置
#log4j.appender.ROLLING_FILE.File=rolling.log
#log4j.appender.ROLLING_FILE.Append=true
#文件大小
#log4j.appender.ROLLING_FILE.MaxFileSize=10KB
#指定采用输出布局和输出格式
#log4j.appender.ROLLING_FILE.MaxBackupIndex=1
#log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

####################
# Socket Appender
####################
#log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
#log4j.appender.SOCKET.RemoteHost=localhost
#log4j.appender.SOCKET.Port=5001
#log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
#log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
#log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

########################
# SMTP Appender
#######################
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#log4j.appender.MAIL.Threshold=FATAL
#log4j.appender.MAIL.BufferSize=10
#log4j.appender.MAIL.From=chenyl@hollycrm.com
#log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
#log4j.appender.MAIL.Subject=Log4J Message
#log4j.appender.MAIL.To=chenyl@hollycrm.com
#log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
#log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

########################
# JDBC Appender
#######################
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

########################
# Log Factor 5 Appender
########################
#log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
#log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

###################
#自定义Appender
###################
#log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
#log4j.appender.im.host = mail.cybercorlin.net
#log4j.appender.im.username = username
#log4j.appender.im.password = password
#log4j.appender.im.recipient = corlin@cybercorlin.net
#log4j.appender.im.layout=org.apache.log4j.PatternLayout
#log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

posted @ 2006-10-07 13:53 nbt 阅读(717) | 评论 (0)编辑 收藏

C#导出Excel

     摘要: 网上反应比较强烈。本人也因为工作需要的原因,将其封装了成了ExcelManager。企业当中,做报表的数据来源肯定就是数据库了。该ExcelManager目前只提供Ms Sql Server的支持,因为我们公司使用的就是ms sql server 2000 了。封装后的ExcelManager,你只需传入你的报表表头(一级表头、二级表头。大部分有两级也就够了。如果你有多个,可自行修改该类.),并将...  阅读全文

posted @ 2006-10-07 13:41 nbt 阅读(884) | 评论 (0)编辑 收藏

仅列出标题
共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

Java技术网站

友情链接

国内一些开源网站

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜