JSP, 서블릿 및 JDBC (dayabase : oracle 11gr2)와 관련된 weba 어플리케이션 개발에 oc4j를 사용하고있었습니다. 트랜잭션 관리자와 커밋 및 롤백 기능을 사용하여 잘 작동했습니다.JOTM을 사용하여 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를 사용 중입니다. 매우 잘 작동하고 적절하게 문서화됩니다. 이 질문에 대한 제안은 여전히 열려 있습니다. 감사. –