001 /* 002 * Copyright (C) The Apache Software Foundation. All rights reserved. 003 * 004 * This software is published under the terms of the Apache Software License 005 * version 1.1, a copy of which has been included with this distribution in 006 * the LICENSE file. 007 * 008 * $Id: XAMessenger.java 155459 2005-02-26 13:24:44Z dirkv $ 009 */ 010 package org.apache.commons.messenger; 011 012 import javax.jms.Session; 013 import javax.jms.XASession; 014 import javax.transaction.Transaction; 015 import javax.transaction.xa.XAResource; 016 017 import org.apache.commons.logging.Log; 018 import org.apache.commons.logging.LogFactory; 019 020 /** <p><code>XAMessenger</code> is a default implementation of 021 * Messenger which can also support XA transactions by enlisting and delisting 022 * XAResources. 023 * This is implemented as a seperate Messenger implementation to avoid the core 024 * Messenger having a dependency on JTA. 025 * .</p> 026 * 027 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a> 028 * @version $Revision: 155459 $ 029 */ 030 public class XAMessenger extends DefaultMessenger implements XACapable { 031 032 /** Logger */ 033 private static final Log log = LogFactory.getLog(XAMessenger.class); 034 035 public XAMessenger() { 036 } 037 038 // XACapable interface 039 //------------------------------------------------------------------------- 040 041 public void enlistResources(Transaction transaction) throws Exception { 042 XAResource resource = getXAResource(); 043 if (resource != null) { 044 transaction.enlistResource(resource); 045 } 046 } 047 048 public void delistResources(Transaction transaction, int flag) throws Exception { 049 XAResource resource = getXAResource(); 050 if (resource != null) { 051 transaction.delistResource(resource, flag); 052 } 053 } 054 055 // Implementation methods 056 //------------------------------------------------------------------------- 057 058 /** 059 * @return the XAResource associated with this Messenger if one exists 060 */ 061 protected XAResource getXAResource() throws Exception { 062 Session session = getMessengerSession().getSession(); 063 if (session instanceof XASession) { 064 XASession xaSession = (XASession) session; 065 return xaSession.getXAResource(); 066 } 067 return null; 068 } 069 }