slf4j简介
准确的说,slf4j并不是一种具体的日志系统,而是一个用户日志系统的facade,允许用户在部署最终应用时方便的变更其日志系统。
关于jBPM
jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统。jBPM是公开源代码项目,它使用要遵循 Apache License。jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它 的名称也改成JBoss jBPM。随着jBPM加入JBoss组织,jBPM也将进入一个全新的发展时代,它的前景是十分光明的。
jBPM最大的特色就是它的商务逻辑定义没有采用目前的一些规范,如WfMC´s XPDL, BPML, ebXML, BPEL4WS等,而是采用了它自己定义的JBoss jBPM Process Definition Language (jPDL)。jPDL认为一个商务流程可以被看作是一个UML状态图。jPDL就是详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换 等。
jBPM的另一个特色是它使用Hibernate来管理它的数据库。Hibernate是目前Java领域最好的一种数据持久层解决方案。通过Hibernate,jBPM将数据的管理职能分离出去,自己专注于商务逻辑的处理。
关于jPDL
jPDL(JBoss jBPM Process Definition Language)是构建于jBPM框架上的流程语言之一。在jPDL中提供了任务(tasks)、待处理状态 (wait states)、计时器(timers)、自动处理(automated actions)…等术语,并通过图型化的流程定义,很直观地描述业务流程。
jPDL可以部署于Java语言的任何应用环境下,JavaSE Application(Swing/SWT)、JavaEE Application(Application Server) 。
jPDL分发包的组成
目前jPDL的最新版本是3.2.3,通过http://labs.jboss.com/jbossjbpm/jpdl_downloads/可以获得官方下载包。下载包分为两种,一种是标准包(jbpm-jpdl-3.2.3.zip);一种是套件包(jbpm-jpdl-suite-3.2.3.zip)。两者最大的区别是套装包自带一个已经配置好的jboss服务,下载解压缩后,可直接运行。
(1)jPDL的核心程序包(jbpm-jpdl.jar)
它是一个典型的jar文件,它涵盖对流程定义和运行时流程实例上下文环境的操作API。在最简化的业务流程样例中,jPDL将流程定义存储与XML 格式的定义文件中,在运行时载入内存,在内存里记录完整的业务实例和执行过程的环境变量,并完成全部操作。显然,在实际应用中,流程信息必须被持久化的存 储于数据库中。jPDL使用了Hibernate作为其对象持久化的API。
(2)Graphical Process Designer插件(jbpm-jpdl-designer-3.1.2.zip)
它是一个基于Eclipse的图型编辑插件。使用它可以对业务流程进行可视化的定制,而无须手动编辑XML文件。该插件还提供了流程定义上传功能,可以将新定义的流程发布到在线运行的jPDL系统上。
(3)jPDL身份包(jbpm-identity.jar)
它是jPDL的一个轻量级扩展包,简单实现了组Group、用户User、许可权Permission等用户身份认证和鉴权机制。如果您的应用环境只需要简单的用户认证鉴权管理,那么它十分适合您。
(4)jPDL Web控制台(jbpm-console.war)
它是一个标准Web应用(使用了JSF技术),提供了对jPDL平台执行情况的监控程序(对jPDL数据库的监控)。管理员可以通过该程序方便的维 护jPDL的数据库,管理流程定义和流程实例的执行情况。同时,它还提供了一个简单的Getting started DEMO,方便初学者了解jPDL。
jbpm-jpdl-suite-3.2.3.zip压缩包组成
在解压jbpm-jpdl-suite-3.2.3.zip后,会看到很多目录,如下所示:
(1)config目录
该目录存放了jPDL的默认配置文件 ,包括hibernate.cfg.xml 、jbpm.cfg.xml(jPDL的主配置文件,默认是空的)、jbpm.mail.templates.xml(邮件模板配置文件)、 log4j.properties(日志配置文件)
(2)db目录
该目录存放了jPDL针对不同数据库的表初始化sql文件。这里要说的是,jbpm.jpdl.mysql.sql在MySql下批量运行时,会出现错误提示,原因是语句后缺少”;”号,需要修订后才能使用。
(3)designer目录
该目录存放了GPD(Graphical Process Designer)插件。
(4)examples目录
该目录存放了jPDL的简单范例。
(5)doc目录
该目录存放jPDL 的相关说明文档,包括用户指南、Java API文档等。
(6)server目录
该目录存放了配置好的jBoss和控制台程序,Windows下双击start.bat可立即执行。数据库使用HSQL,存放于/server/server/jbpm/data下。
(7)src目录
该目录下存放的是源代码,可以通过查看代码来了解其具体实现,有助于增强理解。
(8)deploy目录
该目录下面包含3个war包:jbpm-console.war、jbpm-enterprise.ear、jbpm-mail.war。
(9)lib目录
该目录中存放了支持的jar包。
参考资料:
一、全文搜索(Lecene框架)
二、缓存(实现页面级的URL缓存)
三、生成静态文件(比如说,一个首页可能会员由多个部分组成,每个模块生成一个静态文件,然后才用服务器端包含SSI技术进行组装,其默认的后缀是.shtml)
四、静态文件分布存储于独立的服务器(CSS,JS,图片,文件等,用一个Apache服务器来处理请求)
五、分布式开发(各服务器间的数据同步,像www.sina.com网一样发区域的服务器数据的同步;便于使用服务器的集成,服务器可分为:WEB服务器、Session服务器、数据库服务器、静态文件服务器等等,一个WEB服务就可能由几十台机器集成后共同提供服务,负载均衡器的使用)
六、数据库的拆分(数据库表的拆分和数据库表字段的拆分)
七、搜索引擎优化(SEO)
八、访问监控(JMS)
九、单元测试,高并发访问测试
十、开发文档的制作(E-R图,类关系图,需求说明书,详细设计说明书,数据字典等)
十一、动态部署(Ant等工具的使用)
十二、表单提交验证(客户端验证和服务器端验证,有一点要注意和说明的是:通过服务器端验证失败后,要返回到客户表单提交前的页,并把客户提交前输入所有的信息显示出来,提示客户出错的地方以便其进行修改。最好是可以定义一些全局的验证规则,如果E-mail的验证)
十三、AJAX异步调用技术的使用(遮罩层的使用,应用于部分数据的验证如果登录名,加载等待信息的提示)
十四、各项数据的备份(有独立的备份服务器,做到数据的同步备份)
================================================
以下是详细过程,想继续学习的请往下看,不想学的请直接用上面的结果就可以了。
--------------------------------------------------------------
学习篇:
今天有朋友在52css.com的留言板提出一个问题:为什么 text-overflow:ellipsis的时候没有任何效果呀?text-overflow是一个比较特殊的属性,在CSS手册中,这个属性是这样定义的:
语法:
text-overflow : clip | ellipsis
参数:
clip : 不显示省略标记(...),而是简单的裁切
(clip这个参数是不常用的!)
ellipsis : 当对象内文本溢出时显示省略标记(...)
说明:
设置或检索是否使用一个省略标记(...)标示对象内文本的溢出。
请您注意,text-overflow:ellipsis属性在FF中是没有效果的。
示例:
div { text-overflow : clip; }
text-overflow是一个比较特殊的样式,我们可以用它代替我们通常所用的标题截取函数,而且这样做对搜索引擎更加友好,如:标题文件有50 个汉字,而我们的列表可能只有300px的宽度。如果用标题截取函数,则标题不是完整的,如果我们用CSS样式text- overflow:ellipsis,输出的标题是完整的,只是受容器大小的局限不显示出来罢了。
关于text-overflow属性如何应用,我们作如下的说明讲解:
text-overflow属性仅是注解,当文本溢出时是否显示省略标记。并不具备其它的样式属性定义。我们想要实现溢出时产生省略号的效果。还必须定义:强制文本在一行内显示(white-space:nowrap)及溢出内容为隐藏(overflow:hidden)。只有这样才能实现溢出文本显示省略号的效果。
我们首页建立了一个无序列表UL,里面有几个列表项LI,内部建立了列表链接A。我们的测试主要在LI在进行,请注意观察,看如下的三段代码:
一、仅定义text-overflow:ellipsis; 不能实现省略号效果。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>52CSS</title>
<style type="text/css">
ul {width:300px; margin:50px auto;}
li {width:300px; line-height:25px; text-overflow:ellipsis;}
a {color:#03c; font-size:13px;}
a:hover {color:#000;}
</style>
</head>
<body>
<ul>
<li><a href="http://www.52css.com/">CSS实战精萃 - Pro CSS Techniques </a>
<li><a href="http://www.52css.com/">CSS实战:id是狙击枪 class是双刃剑 合则两利分则两败</a>
<li><a href="http://www.52css.com/">CSS布局实例:CSS标签切换代码实例教程</a>
<li><a href="http://www.52css.com/">Web标准:改变您的网页制作思维方式 节省代码及结构与表现分离</a>
<li><a href="http://www.52css.com/">解决IE7以下版本不支持无A状态伪类的几种方法!</a>
<li><a href="http://www.52css.com/">CSS去除表格td默认间距及制作1px细线表格 </a>
</ul>
</body>
</html>
二、定义text-overflow:ellipsis; white-space:nowrap; 同样不能实现省略号效果。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>52CSS</title>
<style type="text/css">
ul {width:300px; margin:50px auto;}
li {width:300px; line-height:25px;
text-overflow:ellipsis; white-space:nowrap;}
a {color:#03c; font-size:13px;}
a:hover {color:#000;}
</style>
</head>
<body>
<ul>
<li><a href="http://www.52css.com/">CSS实战精萃 - Pro CSS Techniques </a>
<li><a href="http://www.52css.com/">CSS实战:id是狙击枪 class是双刃剑 合则两利分则两败</a>
<li><a href="http://www.52css.com/">CSS布局实例:CSS标签切换代码实例教程</a>
<li><a href="http://www.52css.com/">Web标准:改变您的网页制作思维方式 节省代码及结构与表现分离</a>
<li><a href="http://www.52css.com/">解决IE7以下版本不支持无A状态伪类的几种方法!</a>
<li><a href="http://www.52css.com/">CSS去除表格td默认间距及制作1px细线表格 </a>
</ul>
</body>
</html>
三、按52css.com的教程,即本文所讲的方法,同时应用: text-overflow:ellipsis; white-space:nowrap; overflow:hidden; 实现了所想要得到的溢出文本显示省略号效果:
不过请注意此方法适用与IE与OP浏览器,FF不适用!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>52CSS</title>
<style type="text/css">
ul {width:300px; margin:50px auto;}
li {width:300px; line-height:25px; text-overflow:ellipsis; white-space:nowrap; overflow:hidden;}
a {color:#03c; font-size:13px;}
a:hover {color:#000;}
</style>
</head>
<body>
<ul>
<li><a href="http://www.52css.com/">CSS实战精萃 - Pro CSS Techniques </a>
<li><a href="http://www.52css.com/">CSS实战:id是狙击枪 class是双刃剑 合则两利分则两败</a>
<li><a href="http://www.52css.com/">CSS布局实例:CSS标签切换代码实例教程</a>
<li><a href="http://www.52css.com/">Web标准:改变您的网页制作思维方式 节省代码及结构与表现分离</a>
<li><a href="http://www.52css.com/">解决IE7以下版本不支持无A状态伪类的几种方法!</a>
<li><a href="http://www.52css.com/">CSS去除表格td默认间距及制作1px细线表格 </a>
</ul>
</body>
</html>
--------------------------------------------------------------------------------------------------------------------
实际解决问题篇:
(可能还不是很完美,仅供大家参考。)
单行文本的控制,以前是由程序员完成的,实现截字效果。
在52css.com以前的文字中,也介绍过,通过CSS也实现这样的效果:
如何设置列表(li)超出部分显示省略号?
http://www.52css.com/article.asp?id=148
CSS基础:text-overflow:ellipsis溢出文本显示省略号的详细方法
http://www.52css.com/article.asp?id=602(上面所写的学习篇就是以上两个连接的内容)
上面的两种方法是以前介绍给大家的。它们存在着一定的局限,只能对IE起效果,而在FF下时无效的。
在FF下面,是直接截断文字,不会加上“…”。今天介绍的方法兼容IE FF,看下面的详细介绍:
为了更符合实际,我用一个div装起要调试的内容,并为这个div定义一个宽度。
例如:
css代码:
div{width:200px;}
html代码:
<div>
<span>CSS Web Design 我爱CSS-Web标准化 Div+css教程 - www.52css.com</span>
</div>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>鼠标拖拽</title>
<script type="text/javascript">
function Drag(o, e){
var e = window.event || e;
var _x = e.offsetX || e.layerX;
var _y = e.offsetY || e.layerY;
o.style.filter = 'Alpha(opacity=70)';
o.style.opacity = '0.7';
document.onmousemove = function(e){
var e = window.event || e;
alert(_x + ", " + _y + "\r\n" + e.clientX + ", " + e.clientY + "\r\n" + e.offsetX + ", " + e.offsetY);
o.style.left = e.clientX - _x + 'px';
o.style.top = e.clientY - _y + 'px';
o.style.cursor="move";
}
document.onmouseup = function(e){
document.onmousemove = null;
o.style.filter = o.style.opacity = '';
o.style.cursor="default";
}
}
</script>
</head>
<body>
<div onmousedown="Drag(this, event)"
style="position: absolute; border: 1px solid red; background: pink; width: 400px; height: 300px;"></div>
</body>
</html>
绿色字体处: _x, _y已经形成闭包, 是不会变的, 值为最初始鼠标相对其DIV原点(0,0)的距离
蓝色字体处: e.clientX, e.clientY为鼠标相对屏幕的原点(0,0)的距离
粉色字体处: document.onmouseup和document.onmousemove这两个事件被设定在drag事件中才产生,这样的好处是在其他情况下不会产生拖放的效果
红色字体处: document.onmousemove在onmouseup事件中清除是为了善后工作, 这点要注意