JBoss
作為J
EE應用服務器
以其EJB容器卓越的性能
技術的潮流性
開發部署J
EE應用的方便性贏得了很多J
EE開發者的信賴
其中
免安裝
基於JMX構架
熱部署(Hot Deploy)
快速開發EJB應用等幾項特征與其他商用服務器相比
顯得有些得意忘形的樣子
盡管其本身沒有重大的缺陷
但畢竟是Open Source的開發模式
文檔很少
因此要很好的掌握
精通開發基於JBoss的應用還是顯得有些力不從心
本文結合作者的開發經驗
給出在JBoss
下開發J
EE的一些很實用的相關的注意事項和規則
其中
讀者一定要知道JBoss
作為JBoss的過渡產品(與JBoss
x
JBoss
x相比)
自然有些東西和JBoss
x
JBoss
x有很大差別
但是
一般情況下
本文介紹的內容
大體上都適合JBoss各個版本
下載完JBoss
後
解壓到一個沒有空格的目錄路徑下面就可以運行JBoss
所以很方便
但前提是目標機器安裝了Java
Standard Edition
一切就緒後
我們就開始吧
(假設JBoss
安裝在
C:\jboss
_tomcat
本使用default配置)
一相關配置文件的設置 為開發J
EE應用
操作數據庫成了必不可少的內容
調節日志輸出的詳細程度成了調試J
EE應用的關鍵
EJB應用的調優過程是J
EE應用的核心
數據源的配置
在JBoss
中
配置數據源的步驟很簡單
JBoss
本身帶了主流數據庫的配置實例
於目錄下
C:\jboss
_tomcat
\docs\examples\jca
具體使用哪個配置文件取決於目標用戶的數據庫
如果是SQL Server
則需要使用mssql
ds
xml文件(支持本地事務)或者mssql
xa
ds
xml文件(支持全局事務)
如果是Oracle
i數據庫
則需要使用oracle
ds
xml文件或者oracle
xa
ds
xml文件等
這裡以SQL Server
為例
首先將mssql
ds
xml文件拷貝到目錄
C:\jboss
_tomcat
\server\default\deploy下
然後打開文件
並作如下修改
<datasources>
<local
tx
datasource>
<jndi
name>VSSDB</jndi
name>
<connection
url>jdbc:microsoft:sqlserver://
:
;DatabaseName=DDD
</connection
url>
<driver
class>com
microsoft
jdbc
sqlserver
SQLServerDriver</driver
class>
<user
name>sa</user
name>
<password>sa</password>
<min
pool
size>
</min
pool
size>
<max
pool
size>
</max
pool
size>
</local
tx
datasource>
</datasources>
如果目標J
EE應用只需要本地事務
則上述過程已經完成了Datasource的配置
同時這個配置將用於JDBC以及EJB通過JNDI使用
如果要實現EJB使用Datasource
則還需要修改位於目錄
C:\jboss
_tomcat
\server\default\conf下的standardjbosscmp
jdbc
xml文件
比如
<jbosscmp
jdbc>
<defaults>
<datasource>java:/VSSDB
</datasource>
<datasource
mapping>MS SQLSERVER
</datasource
mapping>
<create
table>true</create
table>
<remove
table>false</remove
table>
<read
only>false</read
only>
<time
out>
</time
out>
<pk
constraint>true</pk
constraint>
<fk
constraint>false</fk
constraint>
其中
java:/VSSDB中的VSSDB就是mssql
ds
xml配置的數據源
而
java:/
前綴表明該命名空間只是對JBoss本身可見
即運行於JBoss外的應用是不能夠使用這裡定義的數據源
這一點希望注意
其次
MS SQLSERVER
中的MS SQLSERVER
可以在該文件的其他地方找到
(如果是其他數據庫
情況都是類似的)
日志的輸出詳細程度配置
由於JBoss
開發采用了Log
j管理其日志信息(嚴格地講
它擴展了Log
j)
因此了解Log
j的機理
有助於理解JBoss
管理日志的方式
JBoss
采用JMX架構的同時
且以
xml文件類型為配置文件
因此可以找到位於目錄
C:\jboss
_tomcat
\server\default\conf下的log
j
xml文件
比如
其中一段配置示例如下
<appender name=
CONSOLE
class=
org
apache
log
j
ConsoleAppender
>
<param name=
Target
value=
System
out
/>
<param name=
Threshold
value=
INFO
/>
<layout class=
org
apache
log
j
PatternLayout
>
<!
The default pattern: Date Priority [Category] Message\n
>
<param name=
ConversionPattern
value=
%d{ABSOLUTE} %
p [%c{
}] %m%n
/>
</layout>
</appender>
比如
為了調節JBoss
控制台日志輸出的詳細程度(調整為DEBUG級別)
我們需要修改value=
INFO
將INFO改為DEBUG
如果開發Entity Beans
可以調節位於與log
j
xml文件同一目錄下的standardjboss
xml文件(該文件主要是提供修改EJB相關的調試
運行
調優
部署參數)
如果Entity Beans采用的為Standard CMP
x EntityBean
則將其中的屬性的取值改為true
<container
configuration>
<container
name>Standard CMP
x EntityBean</container
name>
<call
logging>false</call
logging>
<invoker
proxy
binding
name>entity
rmi
invoker</invoker
proxy
binding
name>
<sync
on
commit
only>false</sync
on
commit
only>
完成上述兩步後
在調試Entity Beans時通過控制台
可以看到Entity Beans發出的JDBC調用細節
Tomcat容器相關參數的配置
如果使用JBoss
與Tomcat
的集成版本
則可以通過調節分別位於目錄
C:\jboss
_tomcat
\server\default\deploy\jbossweb
tomcat
sar下的web
xml和目錄
C:\jboss
_tomcat
\server\default\deploy\jbossweb
tomcat
sar\META
INF下的jboss
service
xml文件來達到目標讀者特定需求
比如
如果想將HTTP服務端口改為
則可以修改jboss
service
xml文件
如果想使目標J
EE應用處理更多的文件類型
可以修改web
xml文件
相關類庫的放置
如果應用涉及到第三方類庫
比如JDBC Driver
則可以將這些JDBC Driver存放到目錄下
C:\jboss
_tomcat
\server\default\lib
注意
不是目錄
C:\jboss
_tomcat
\lib下
如果是與目標J
EE應用相關
則可以存放到目標
war(或者
ear)裡面
或者xxx
war目錄中的WEB
INFO\lib下
無論那種情形
都需要遵循J
EE規范
當然
JBoss
的配置文件有很多
比如還有提供郵件服務的mail
service
xml文件等
二開發EJB應用 如果開發EJB應用
建議采用JBoss作為開發服務器
因為開發
調試
部署速度快
如果采用其他商用服務器
由於實現機理的不同
其編譯的速度很慢
如果采用Entity Beans技術
則您需要知道這幾點
第一
您目標系統的數據源有多少個操作入口
即是否存在Entity Beans之外的方式來操作數據庫
如果有
則需要調節相應的提交策略以及策略
比如
JBoss
采用的方式有
種
A
B
C
D
當然
如果除了Entity Beans訪問數據庫外
別無它出
采用A是很理智的
如果有
則需要取決於具體的情況使用方式
同時
方式的選擇與策略有關系
能夠采用的Entity Beans或Entity Beans Methods
則盡量采用
這樣會減少或消除死鎖發生的可能性
盡量采用
:n的關系來操作n方的數據表結構
這樣能夠提高EJB Container的效率
一般情況下
J
EE應用服務器支持JDBC事務
JTA事務
容器管理事務
同時
最好不要在程序中同時使用上述三種事務類型
比如在JTA事務中嵌套JDBC事務
第二方面
事務要在盡可能短的時間內完成
不要在不同方法中實現事務的使用
比如
下面給出了回滾JDBC事務的代碼示例
public void processT(String orders) {
Context initCtx = new InitialContext();
javax
sql
DataSource ds = javax
sql
DataSource)initCtx
lookup
(
java:comp/env/jdbc/OrdersDB
);
java
sql
Connection conn = ds
getConnection();
try{
conn
setAutoCommit( false ); //更改JDBC事務的默認提交方式
orderNo = createOrder( orders );
updateOrderStatus(orderNo
orders created
);
mit();//提交JDBC事務
}catch( Exception e ){
try{
conn
rollback();//回滾sJDBC事務
throw new EJBException(
事務回滾
+ e
getMessage());
}catch( SQLException sqle ){
throw new EJBException(
出現SQL操作錯誤
+ sqle
getMessage());
}
}
}
下面給出了JTA事務代碼示例
public void processOrder(String orderMessage) {
UserTransaction transaction = mySessionContext
getUserTransaction();//獲得JTA事務
try{
transaction
begin();//開始JTA事務
orderNo = sendOrder(orderMessage);
updateOrderStatus(orderNo
order sent
);
mit();//提交JTA事務
}catch(Exception e){
try{
transactio
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28619.html