2006年10月8日
MyEclipse5.5推出有一段時間了,但是網上一直都沒有破解的文件,通過今天跟公司幾個同事的努力嘗試終于找到破解的方法了,說起來比較可笑,我們經過好多次的嘗試,最后用MyEclipse4.1的破解文件就可以破解MyEclipse5.5了,我們用的MyEclipse5.5的版本是MyEclipse_5.5M2_E3.2.2,Eclipse的版本是eclipse3.2.2大家可以嘗試一下.
在此特別要說明一下的是運行MyEclipse4.1的時候要選擇MyEclipse4.1&4.2 GA這個選擇才可以破解如圖

MyEclipse_5.5M2_E3.2.2的官方下載地址 : http://www.myeclipseide.com/ContentExpress-display-ceid-110.html
MyEclipse4.1破解文件下載
??? 最近在用eclipse的時候,過上一會老彈出一個對話框,提示內存不足(大意),找了好多資料都沒有解決,最近在eclipse的官方網站上找到了其解決的辦法,希望對像我一樣的朋友有幫助,解決方法如下,
在桌面上建一個啟動eclipse的快捷方式,在該快捷方式上單擊右鍵,在常規標簽的目標中加入下面的內容:
E:\eclipse\eclipse.exe -clean -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M,其中“E:\eclipse\eclipse.exe” 是我eclipse的路徑。
然后重啟你的eclipse試試!?
在IIS中?發布程序一個ASP.NET程序,通過IE訪問報如下錯誤:
當前標識(NT AUTHORITY\NETWORK SERVICE)沒有對“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files”的寫訪問權限。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.Web.HttpException: 當前標識(NT AUTHORITY\NETWORK SERVICE)沒有對“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files”的寫訪問權限。
翻閱了一些資料后發現是需要重新注冊IIS服務擴展, 解決方法如下:
在“開始”-“運行”里輸入如入命令,回車,搞定
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -i -enable
摘要: 9.8?Struts
與
...
閱讀全文
稱呼
Functions
標簽庫為標簽庫,倒不如稱呼其為函數庫來得更容易理解些。因為
Functions
標簽庫并沒有提供傳統的標簽來為
JSP
頁面的工作服務,而是被用于
EL
表達式語句中。在
JSP2.0
規范下出現的
Functions
標簽庫為
EL
表達式語句提供了許多更為有用的功能。
Functions
標簽庫分為兩大類,共
16
個函數。
q????????
長度函數:
fn:length
q????????
字符串處理函數:
fn:contains
、
fn:containsIgnoreCase
、
fn:endsWith
、
fn:escapeXml
、
fn:indexOf
、
fn:join
、
fn:replace
、
fn:split
、
fn:startsWith
、
fn:substring
、
fn:substringAfter
、
fn:substringBefore
、
fn:toLowerCase
、
fn:toUpperCase
、
fn:trim
以下是各個函數的用途和屬性以及簡單示例。
9.7.1?
長度函數
fn:length
函數
長度函數
fn:length
的出現有重要的意義。在
JSTL1.0
中,有一個功能被忽略了,那就是對集合的長度取值。雖然
java.util.Collection
接口定義了
size
方法,但是該方法不是一個標準的
JavaBean
屬性方法(沒有
get,set
方法),因此,無法通過
EL
表達式“
${collection.size}
”來輕松取得。
fn:length
函數正是為了解決這個問題而被設計出來的。它的參數為
input
,將計算通過該屬性傳入的對象長度。該對象應該為集合類型或
String
類型。其返回結果是一個
int
類型的值。下面看一個示例。
<%ArrayList arrayList1 = new ArrayList();
??????????????????????????? arrayList1.add("aa");
??????????????????????????? arrayList1.add("bb");
??????????????????????????? arrayList1.add("cc");
%>
<%request.getSession().setAttribute("arrayList1", arrayList1);%>
${fn:length(sessionScope.arrayList1)}
假設一個
ArrayList
類型的實例“
arrayList1
”,并為其添加三個字符串對象,使用
fn:length
函數后就可以取得返回結果為“
3
”。
9.7.2?
判斷函數
fn:contains
函數
fn:contains
函數用來判斷源字符串是否包含子字符串。它包括
string
和
substring
兩個參數,它們都是
String
類型,分布表示源字符串和子字符串。其返回結果為一個
boolean
類型的值。下面看一個示例。
${fn:contains("ABC", "a")}<br>
${fn:contains("ABC", "A")}<br>
前者返回“
false
”,后者返回“
true
”。
fn:containsIgnoreCase
函數與
fn:contains
函數的功能差不多,唯一的區別是
fn:containsIgnoreCase
函數對于子字符串的包含比較將忽略大小寫。它與
fn:contains
函數相同,包括
string
和
substring
兩個參數,并返回一個
boolean
類型的值。下面看一個示例。
${fn:containsIgnoreCase("ABC", "a")}<br>
${fn:containsIgnoreCase("ABC", "A")}<br>
前者和后者都會返回“
true
”。
9.7.4?
詞頭判斷函數
fn:startsWith
函數
fn:startsWith
函數用來判斷源字符串是否符合一連串的特定詞頭。它除了包含一個
string
參數外,還包含一個
subffx
參數,表示詞頭字符串,同樣是
String
類型。該函數返回一個
boolean
類型的值。下面看一個示例。
${fn:startsWith ("ABC", "ab")}<br>
${fn:startsWith ("ABC", "AB")}<br>
前者返回“
false
”,后者返回“
true
”。
9.7.5?
詞尾判斷函數
fn:endsWith
函數
fn:endsWith
函數用來判斷源字符串是否符合一連串的特定詞尾。它與
fn:startsWith
函數相同,包括
string
和
subffx
兩個參數,并返回一個
boolean
類型的值。下面看一個示例。
${fn:endsWith("ABC", "bc")}<br>
${fn:endsWith("ABC", "BC")}<br>
前者返回“
false
”,后者返回“
true
”。
9.7.6?
字符實體轉換函數
fn:escapeXml
函數
fn:escapeXml
函數用于將所有特殊字符轉化為字符實體碼。它只包含一個
string
參數,返回一個
String
類型的值。
9.7.8?
字符匹配函數
fn:indexOf
函數
fn:indexOf
函數用于取得子字符串與源字符串匹配的開始位置,若子字符串與源字符串中的內容沒有匹配成功將返回“
-1
”。它包括
string
和
substring
兩個參數,返回結果為
int
類型。下面看一個示例。
${fn:indexOf("ABCD","aBC")}<br>
${fn:indexOf("ABCD","BC")}<br>
前者由于沒有匹配成功,所以返回
-1
,后者匹配成功將返回位置的下標,為
1
。
9.7.9?
分隔符函數
fn:join
函數
fn:join
函數允許為一個字符串數組中的每一個字符串加上分隔符,并連接起來。它的參數、返回結果和描述如表
9.25
所示:
表
9.25
fn:join
函數
參數
|
描述
|
array
|
字符串數組。其類型必須為
String[]
類型
|
separator
|
分隔符。其類型必須為
String
類型
|
返回結果
|
返回一個
String
類型的值
|
下面看一個示例。
<% String[] stringArray = {"a","b","c"}; %>
<%request.getSession().setAttribute("stringArray", stringArray);%>
${fn:join(sessionScope.stringArray,";")}<br>
定義數組并放置到
Session
中,然后通過
Session
得到該字符串數組,使用
fn:join
函數并傳入分隔符“
;
”,得到的結果為“
a;b;c
”。
9.7.10?
替換函數
fn:replace
函數
fn:replace
函數允許為源字符串做替換的工作。它的參數、返回結果和描述如表
9.26
所示:
表
9.26
fn:replace
函數
參數
|
描述
|
inputString
|
源字符串。其類型必須為
String
類型
|
beforeSubstring
|
指定被替換字符串。其類型必須為
String
類型
|
afterSubstring
|
指定替換字符串。其類型必須為
String
類型
|
返回結果
|
返回一個
String
類型的值
|
下面看一個示例。
${fn:replace("ABC","A","B")}<br>
將“
ABC
”字符串替換為“
BBC
”,在“
ABC
”字符串中用“
B
”替換了“
A
”。
9.7.11?
分隔符轉換數組函數
fn:split
函數
fn:split
函數用于將一組由分隔符分隔的字符串轉換成字符串數組。它的參數、返回結果和描述如表
9.27
所示:
表
9.27
fn:split
函數
參數
|
描述
|
string
|
源字符串。其類型必須為
String
類型
|
delimiters
|
指定分隔符。其類型必須為
String
類型
|
返回結果
|
返回一個
String[]
類型的值
|
下面看一個示例。
${fn:split("A,B,C",",")}<br>
將“
A,B,C
”字符串轉換為數組
{A,B,C}
。
9.7.12?
字符串截取函數
fn:substring
函數
fn:substring
函數用于截取字符串。它的參數、返回結果和描述如表
9.28
所示:
表
9.28
fn:substring
函數
參數
|
描述
|
string
|
源字符串。其類型必須為
String
類型
|
beginIndex
|
指定起始下標(值從
0
開始)。其類型必須為
int
類型
|
endIndex
|
指定結束下標(值從
0
開始)。其類型必須為
int
類型
|
返回結果
|
返回一個
String
類型的值
|
下面看一個示例。
${fn:substring("ABC","1","2")}<br>
截取結果為“
B
”。
9.7.14?
起始到定位截取字符串函數
fn:substringBefore
函數
fn:substringBefore
函數允許截取源字符從開始到某個字符串。它的參數和
fn:substringAfter
函數相同,不同的是
substring
表示的是結束字符串。下面看一個示例。
${fn:substringBefore("ABCD","BC")}<br>
截取的結果為“
A
”。
9.7.15?
小寫轉換函數
fn:toLowerCase
函數
fn:toLowerCase
函數允許將源字符串中的字符全部轉換成小寫字符。它只有一個表示源字符串的參數
string
,函數返回一個
String
類型的值。下面看一個示例。
${fn:toLowerCase("ABCD")}<br>
轉換的結果為“
abcd
”。
9.7.16
大寫轉換函數
fn:toUpperCase
函數
fn:toUpperCase
函數允許將源字符串中的字符全部轉換成大寫字符。它與
fn:toLowerCase
函數相同,也只有一個
String
參數,并返回一個
String
類型的值。下面看一個示例。
${fn:toUpperCase("abcd")}<br>
轉換的結果為“
ABCD
”。
9.7.17
空格刪除函數
fn:trim
函數
fn:trim
函數將刪除源字符串中結尾部分的“空格”以產生一個新的字符串。它與
fn:toLowerCase
函數相同,只有一個
String
參數,并返回一個
String
類型的值。下面看一個示例。
${fn:trim("AB C?")}D<br>
轉換的結果為“
AB CD
”,注意,它將只刪除詞尾的空格而不是全部,因此“
B
”和“
C
”之間仍然留有一個空格。
Database access
標簽庫中的標簽用來提供在
JSP
頁面中可以與數據庫進行交互的功能,雖然它的存在對于早期純
JSP
開發的應用以及小型的開發有著意義重大的貢獻,但是對于
MVC
模型來說,它卻是違反規范的。因為與數據庫交互的工作本身就屬于業務邏輯層的工作,所以不應該在
JSP
頁面中出現,而是應該在模型層中進行。
對于
Database access
標簽庫本書不作重點介紹,只給出幾個簡單示例讓讀者略微了解它們的功能。
Database access
標簽庫有以下
6
組標簽來進行工作:
<sql:setDataSource>
、
<sql:query>
、
<sql:update>
、
<sql:transaction>
、
<sql:setDataSource>
、
<sql:param>
、
<sql:dateParam>
。
9.6.1?
用于設置數據源的
<sql:setDataSource>
標簽
<sql:setDataSource>
標簽用于設置數據源,下面看一個示例:
<sql:setDataSource
???????? var="dataSrc"
???????? url="jdbc:postgresql://localhost:5432/myDB"
???????? driver="org.postgresql.Driver"
???????? user="admin"
???????? password="1111"/>
該示例定義一個數據源并保存在“
dataSrc
”變量內。
9.6.2?
用于查詢的
<sql:query>
標簽
<sql:query>
標簽用于查詢數據庫,它標簽體內可以是一句查詢
SQL
。下面看一個示例:
<sql:query var="queryResults" dataSource="${dataSrc}">
????? select * from table1
</sql:query>
該示例將返回查詢的結果到變量“
queryResults
”中,保存的結果是
javax.servlet.jsp.jstl.sql.Result
類型的實例。要取得結果集中的數據可以使用
<c:forEach>
循環來進行。下面看一個示例。
<c:forEach var="row" items="${queryResults.rows}">
????? <tr>
???
?????????? <td>${row.userName}</td>
?????????????????? <td>${row.passWord}</td>
????? </tr>
</c:forEach>
“
rows
”是
javax.servlet.jsp.jstl.sql.Result
實例的變量屬性之一,用來表示數據庫表中的“列”集合,循環時,通過“
${row.XXX}
”表達式可以取得每一列的數據,“
XXX
”是表中的列名。
9.6.3?
用于更新的
<sql:update>
標簽
<sql:update>
標簽用于更新數據庫,它的標簽體內可以是一句更新的
SQL
語句。其使用和
<sql:query>
標簽沒有什么不同。
9.6.4?
用于事務處理的
<sql:transaction>
標簽
<sql:transaction>
標簽用于數據庫的事務處理,在該標簽體內可以使用
<sql:update>
標簽和
<sql:query>
標簽,而
<sql:transaction>
標簽的事務管理將作用于它們之上。
<sql:transaction>
標簽對于事務處理定義了
read_committed
、
read_uncommitted
、
repeatable_read
、
serializable4
個隔離級別。
9.6.5?
用于事務處理的
<sql:param>
、
<sql:dateParam>
標簽
這兩個標簽用于向
SQL
語句提供參數,就好像程序中預處理
SQL
的“
?
”一樣。
<sql:param>
標簽傳遞除
java.util.Date
類型以外的所有相融參數,
<sql:dateParam>
標簽則指定必須傳遞
java.util.Date
類型的參數。
看到
I18N
就應該想到知識“國際化”,
I18N formatting
標簽庫就是用于在
JSP
頁面中做國際化的動作。在該標簽庫中的標簽一共有
12
個,被分為了兩類,分別是:
q????????
國際化核心標簽:
<fmt:setLocale>
、
<fmt:bundle>
、
<fmt:setBundle>
、
<fmt:message>
、
<fmt:param>
、
<fmt:requestEncoding>
。
q????????
格式化標簽:
<fmt:timeZone>
、
<fmt:setTimeZone>
、
<fmt:formatNumber>
、
<fmt:parseNumber>
、
<fmt:formatDate>
、
<fmt:parseDate>
。
下面只選擇其中常見的一些標簽和屬性進行介紹。
9.5.1?
用于設置本地化環境的
<fmt:setLocale>
標簽
<fmt:setLocale>
標簽用于設置
Locale
環境。它的屬性和描述如表
9.17
所示:
表
9.17
<fmt:setLocale>
標簽屬性和說明
屬性
|
描述
|
value
|
Locale
環境的指定,可以是
java.util.Locale
或
String
類型的實例
|
scope
|
Locale
環境變量的作用范圍(可選)
|
下面看一個示例:
<fmt:setLocale value="zh_TW"/>
表示設置本地環境為繁體中文。
9.5.2?
用于資源文件綁定的
<fmt:bundle>
、
<fmt:setBundle>
標簽
這兩組標簽用于資源配置文件的綁定,唯一不同的是
<fmt:bundle>
標簽將資源配置文件綁定于它標簽體中的顯示,
<fmt:setBundle>
標簽則允許將資源配置文件保存為一個變量,在之后的工作可以根據該變量來進行。
根據
Locale
環境的不同將查找不同后綴的資源配置文件,這點在國際化的任何技術上都是一致的,通常來說,這兩種標簽單獨使用是沒有意義的,它們都會與
I18N formatting
標簽庫中的其他標簽配合使用。它們的屬性和描述如表
9.18
所示:
表
9.18
<fmt:bundle>
、
<fmt:setBundle>
標簽屬性和說明
屬性
|
描述
|
basename
|
資源配置文件的指定,只需要指定文件名而無須擴展名,二組標簽共有的屬性
|
var
|
<fmt:setBundle>
獨有的屬性,用于保存資源配置文件為一個變量
|
scope
|
變量的作用范圍
|
下面看一個示例
<fmt:setLocale value="zh_CN"/>
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
該示例將會查找一個名為
applicationMessage_zh_CN.properties
的資源配置文件,來作為顯示的
Resource
綁定。
9.5.3?
用于顯示資源配置文件信息的
<fmt:message>
標簽
用于信息顯示的標簽,將顯示資源配置文件中定義的信息。它的屬性和描述如表
9.19
所示:
表
9.19
<fmt:message>
標簽屬性和說明
屬性
|
描述
|
key
|
資源配置文件的“鍵”指定
|
bundle
|
若使用
<fmt:setBundle>
保存了資源配置文件,該屬性就可以從保存的資源配置文件中進行查找
|
var
|
將顯示信息保存為一個變量
|
scope
|
變量的作用范圍
|
下面看一個示例:
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
<fmt:bundle basename="applicationAllMessage">
???????? <fmt:message key="userName" />
???????? <p>
???????? <fmt:message key="passWord" bundle="${applicationBundle}" />
</fmt:bundle>
該示例使用了兩種資源配置文件的綁定的做法,“
applicationMessage
”資源配置文件利用
<fmt:setBundle>
標簽被賦于了變量“
applicationBundle
”,而作為
<fmt:bundle>
標簽定義的“
applicationAllMessage
”資源配置文件作用于其標簽體內的顯示。
q????????
第一個
<fmt:message>
標簽將使用“
applicationAllMessage
”資源配置文件中“鍵”為“
userName
”的信息顯示。
q????????
第二個
<fmt:message>
標簽雖然被定義在
<fmt:bundle>
標簽體內,但是它使用了
bundle
屬性,因此將指定之前由
<fmt:setBundle>
標簽保存的“
applicationMessage
”資源配置文件,該“鍵”為“
passWord
”的信息顯示。
9.5.4?
用于參數傳遞的
<fmt:param>
標簽
<fmt:param>
標簽應該位于
<fmt:message>
標簽內,將為該消息標簽提供參數值。它只有一個屬性
value
。
<fmt:param>
標簽有兩種使用版本,一種是直接將參數值寫在
value
屬性中,另一種是將參數值寫在標簽體內。
9.5.6?
用于為請求設置字符編碼的
<fmt:requestEncoding>
標簽
<fmt:requestEncoding>
標簽用于為請求設置字符編碼。它只有一個屬性
value
,在該屬性中可以定義字符編碼。
9.5.7?
用于設定時區的
<fmt:timeZone>
、
<fmt:setTimeZone>
標簽
這兩組標簽都用于設定一個時區。唯一不同的是
<fmt:timeZone>
標簽將使得在其標簽體內的工作可以使用該時區設置,
<fmt:setBundle>
標簽則允許將時區設置保存為一個變量,在之后的工作可以根據該變量來進行。它們的屬性和描述如表
9.20
所示:
表
9.20
<fmt:timeZone>
、
<fmt:setTimeZone>
標簽
屬性和說明
屬性
|
描述
|
value
|
時區的設置
|
var
|
<fmt:setTimeZone>
獨有的屬性,用于保存時區為一個變量
|
scope
|
變量的作用范圍
|
9.5.8?
用于格式化數字的
<fmt:formatNumber>
標簽
<fmt:
formatNumber
>
標
簽用于格式化數字。它的屬性和描述如表
9.21
所示:
表
9.21
<fmt:formatNumber>
標簽屬性和說明
屬性
|
描述
|
value
|
格式化的數字,該數值可以是
String
類型或
java.lang.Number
類型的實例
|
type
|
格式化的類型
|
pattern
|
格式化模式
|
var
|
結果保存變量
|
scope
|
變量的作用范圍
|
maxIntegerDigits
|
指定格式化結果的最大值
|
minIntegerDigits
|
指定格式化結果的最小值
|
maxFractionDigits
|
指定格式化結果的最大值,帶小數
|
minFractionDigits
|
指定格式化結果的最小值,帶小數
|
<fmt:formatNumber>
標簽實際是對應
java.util.NumberFormat
類,
type
屬性的可能值包括
currency
(貨幣)、
number
(數字)和
percent
(百分比)。
下面看一個示例。
<fmt:formatNumber value="1000.888" type="currency" var="money"/>
該結果將被保存在“
money
”變量中,將根據
Locale
環境顯示當地的貨幣格式。
9.5.9?
用于解析數字的
<fmt:parseNumber>
標簽
<fmt:parseNumber>
標簽用于解析一個數字,并將結果作為
java.lang.Number
類的實例返回。
<fmt:parseNumber>
標簽看起來和
<fmt:formatNumber>
標簽的作用正好相反。它的屬性和描述如表
9.22
所示:
表
9.22
<fmt:parseNumber>
標簽屬性和說明
屬性
|
描述
|
value
|
將被解析的字符串
|
type
|
解析格式化的類型
|
pattern
|
解析格式化模式
|
var
|
結果保存變量,類型為
java.lang.Number
|
scope
|
變量的作用范圍
|
parseLocale
|
以本地化的形式來解析字符串,該屬性的內容應為
String
或
java.util.Locale
類型的實例
|
下面看一個示例。
<fmt:parseNumber value="15%" type="percent" var="num"/>
解析之后的結果為“
0.15
”。
9.5.10?
用于格式化日期的
<fmt:formatDate>
標簽
<fmt:formatDate>
標簽用于格式化日期。它的屬性和描述如表
9.23
所示:
表
9.23
<fmt:formatDate>
標簽屬性和說明
屬性
|
描述
|
value
|
格式化的日期,該屬性的內容應該是
java.util.Date
類型的實例
|
type
|
格式化的類型
|
pattern
|
格式化模式
|
var
|
結果保存變量
|
scope
|
變量的作用范圍
|
timeZone
|
指定格式化日期的時區
|
<fmt:formatDate>
標簽與
<fmt:timeZone>
、
<fmt:setTimeZone>
兩組標簽的關系密切。若沒有指定
timeZone屬性,
也可以通過
<fmt:timeZone>
、
<fmt:setTimeZone>
兩組標簽設定的時區來格式化最后的結果。
9.5.11?
用于解析日期的
<fmt:parseDate>
標簽
<fmt:parseDate>
標簽用于解析一個日期,并將結果作為
java.lang.Date
類型的實例返回。
<fmt:parseDate>
標簽看起來和
<fmt:formatDate>
標簽的作用正好相反。它的屬性和描述如表
9.24
所示:
表
9.24
<fmt:parseDate>
標簽屬性和說明
屬性
|
描述
|
value
|
將被解析的字符串
|
type
|
解析格式化的類型
|
pattern
|
解析格式化模式
|
var
|
結果保存變量,類型為
java.lang.Date
|
scope
|
變量的作用范圍
|
parseLocale
|
以本地化的形式來解析字符串,該屬性的內容為
String
或
java.util.Locale
類型的實例
|
timeZone
|
指定解析格式化日期的時區
|
<fmt:parseNumber>
和
<fmt:parseDate>
兩組標簽都實現解析字符串為一個具體對象實例的工作,因此,這兩組解析標簽對
var
屬性的字符串參數要求非常嚴格。就
JSP
頁面的表示層前段來說,處理這種解析本不屬于份內之事,因此
<fmt:parseNumber>
和
<fmt:parseDate>
兩組標簽應該盡量少用,替代工作的地方應該在服務器端表示層的后段,比如在
Servlet
中。
摘要: 9.3.9?
用于包含頁面的
<c:import>
...
閱讀全文
摘要: 9.3.2?
用于賦值的
<c:set>
...
閱讀全文
摘要: 9.2.3? EL
表達式的操作符
...
閱讀全文
?這是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 |
摘要: 這是Jboss 的jBPM3.12框架的用戶指南的中文翻譯。我的翻譯風格是中英文對照,只翻譯部分我認為重要的,不翻譯簡單的英文,以免浪費你我的時間。 同時,對于其中的部分內容,我會在翻譯中做出解釋和寫上我的理解。??
Chapter?4.?Graph Oriented Programming面向圖表編程4.1.?Introduction介紹This chapter can be conside...
閱讀全文
摘要: 這是Jboss 的jBPM3.12框架的用戶指南的中文翻譯。我的翻譯風格是中英文對照,只翻譯部分我認為重要的,不翻譯簡單的英文,以免浪費你我的時間。?????? 同時,對于其中的部分內容,我會在翻譯中做出解釋和寫上我的理解。Chapter?3.?Tutorial指南This tutorial will show you basic process constructs 過程建造in jpdl an...
閱讀全文
? 這是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 jBPM的BPEL擴展件方面的信息。
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
利用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,我們這里選擇了tomcat。JBPM將開發一個webapp所需的類打包成jbpm.web.jar,包括自定義的tag和Struts用到的類等等。開發應用時,將該jar放到WEB-INF\lib下面就可以了。
一個基于工作流的webapp應用的開發和普通webapp的開發方式很相似。包結構也保持一貫作風:
??????
所以,我們需要做的主要工作是完成客戶端應用所需的
jsp
頁面的開發,可以選用
Struts
來進行開發。需要注意的是,我們要對
lib
目錄下的
jbpm.properties
文件進行配置,主要是對數據庫
jdbc
驅動的配置。
4.
?? 系統數據庫的創建
JBPM
可以支持多種數據庫系統,包括MSSQL,,Mysql,Oracle,hdbsql等。它提供了很靈活的配置方式,只需要修改jbpm.properties文件,同時將相應的JDBC Driver拷貝到lib目錄就可以了。利用ant的generate.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
的頁面等。除此之外,還可以通過日志來完成流程的監控和管理界面。這些都由應用的需求來決定。
?????? 這是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.1:JBoss 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 jBPM對BPEL擴展的一些參考資料
預先配置好的JBoss應用服務器具有如下組成部分:
jBPM核心模塊,被打包成一個用于提供服務的存檔文件
帶有jbpm表的集成數據庫:默認的hypersonic數據庫擁有jbpm表,并且這個表已經擁有一個流程了。
Jbpm的web控制臺,它既可以被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應用程序,EJB,web service……。JBPM類庫還可以被打包并被當成無狀態會話EJB(stateless 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應用程序,EJB,web 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 數據庫兼容包是一個下載包,它包括所有的資料,drivers和scripts,用這些你可以使jbpm運行在你選擇的數據庫上。
1.9 JBoss jBPM BPE的擴展
JBoss jBPM BPE的擴展是一個為了支持BPEL獨立的擴展包。BPEL的本質就是一組用來參照別的web service寫web service的xml腳本語言。