我使用oc4j開發涉及JSP,servlets和JDBC(daybase:oracle 11gr2)的weba應用程序。曾經使用內置的事務管理器和提交和回滾用於正常工作。rollback不能與使用JOTM的tomcat配合使用
但是,由於授權,我們現在應該將代碼移動到像tomcat這樣的免費服務器。我已經在Tomcat中按照這篇文章的步驟來實現JOTM作爲事務管理:
http://codepitbull.wordpress.com/2011/07/08/tomcat-7-with-full-jta/
以下是在%CATALINA_HOME%/ conf/context.xml文件配置
<Resource name="jdbc/ticketds"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
validationQuery="SELECT 1"
maxActive="30"
minIdle="2"
maxWait="10000"
initialSize="10"
defaultAutoCommit="false"
username="xxxx"
password="xxxxx"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@//xxxxx.xxxx.com:iiii/xyz"/>
<Resource name="jdbc/taskds"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
validationQuery="SELECT 1"
maxActive="30"
minIdle="2"
maxWait="10000"
initialSize="10"
defaultAutoCommit="false"
username="apps"
password="few1idna"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@//xxxxx.xxxx.com:iiii/xyz"/>
<Transaction factory="org.objectweb.jotm.UserTransactionFactory"
jotm.timeout="600"/>
該網站.XML配置提在資源裁判的數據源,像這樣:
<resource-ref>
<description>Ticket Datasource configuration</description>
<res-ref-name>jdbc/ticketds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>SR Datasource configuration</description>
<res-ref-name>jdbc/taskds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
然而,當我嘗試執行回滾,這不 幫幫我。下面是我用於測試的回滾示例測試代碼:
UserTransaction utx = DBUtil.getUserTransaction();
Connection conn = DBUtil.getConnection();
TicketMessageVO newTicket = null;
try {
utx.begin();
newTicket = new TicketDAO(conn).createTicket(ticket);
// testing only
if(1==1) throw new Exception("Testing transaction rollback");
utx.commit();
logger.log(Level.INFO, "Ticket created successfully: " + ticket.getMessageId());
} catch (Throwable e) {
utx.rollback();
logger.log(Level.SEVERE, "Error in creating ticket: ", e);
throw new Exception(e);
} finally {
DBUtil.closeResources(null, null, conn);
}
return newTicket;
用於與oc4j完美配合使用的相同位代碼。我在配置中丟失了什麼?
謝謝。
現在使用Atomikos。工作得很好,記錄正確。儘管如此,仍然對這個問題提出建議。謝謝。 –