From: Adrian B. <ej...@us...> - 2003-08-28 19:51:07
|
User: ejort Date: 03/08/28 12:51:04 Modified: src/main/org/jboss/resource/adapter/jms JmsConnectionFactory.java JmsConnectionFactoryImpl.java JmsConnectionRequestInfo.java JmsMCFProperties.java JmsManagedConnection.java JmsSession.java JmsSessionFactory.java JmsSessionFactoryImpl.java Log: Port the JMS1.1 interfaces from old head. Implement the new interfaces in jbossmq and jmsra We need some tests for the new JMS1.1 API Revision Changes Path 1.5 +8 -4 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsConnectionFactory.java Index: JmsConnectionFactory.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsConnectionFactory.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- JmsConnectionFactory.java 27 Aug 2003 04:29:38 -0000 1.4 +++ JmsConnectionFactory.java 28 Aug 2003 19:51:03 -0000 1.5 @@ -11,8 +11,9 @@ import java.io.Serializable; -import javax.jms.TopicConnectionFactory; +import javax.jms.ConnectionFactory; import javax.jms.QueueConnectionFactory; +import javax.jms.TopicConnectionFactory; /** * An aggregate interface for QueueConnectionFactory and @@ -21,12 +22,15 @@ * <p>Created: Thu Apr 26 17:01:35 2001 * * @author <a href="mailto:pet...@ti...">Peter Antman</a>. - * @version <pre>$Revision: 1.4 $</pre> + * @version <pre>$Revision: 1.5 $</pre> */ public interface JmsConnectionFactory - extends TopicConnectionFactory, + extends ConnectionFactory, + TopicConnectionFactory, QueueConnectionFactory, Serializable { - // empty + int BOTH = 0; + int QUEUE = 1; + int TOPIC = 2; } 1.8 +47 -28 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsConnectionFactoryImpl.java Index: JmsConnectionFactoryImpl.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsConnectionFactoryImpl.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- JmsConnectionFactoryImpl.java 27 Aug 2003 04:29:38 -0000 1.7 +++ JmsConnectionFactoryImpl.java 28 Aug 2003 19:51:03 -0000 1.8 @@ -11,17 +11,16 @@ import java.io.Serializable; +import javax.jms.JMSException; +import javax.jms.Connection; +import javax.jms.QueueConnection; +import javax.jms.TopicConnection; import javax.naming.Reference; - import javax.resource.Referenceable; import javax.resource.ResourceException; import javax.resource.spi.ManagedConnectionFactory; import javax.resource.spi.ConnectionManager; -import javax.jms.JMSException; -import javax.jms.QueueConnection; -import javax.jms.TopicConnection; - import org.jboss.logging.Logger; /** @@ -33,7 +32,7 @@ * * Created: Thu Apr 26 17:02:50 2001 * - * @version <tt>$Revision: 1.7 $</tt> + * @version <tt>$Revision: 1.8 $</tt> * @author <a href="mailto:pet...@ti...">Peter Antman</a>. * @author <a href="mailto:ja...@pl...">Jason Dillon</a> */ @@ -53,29 +52,27 @@ { this.mcf = mcf; - if (cm == null) { + boolean trace = log.isTraceEnabled(); + if (cm == null) + { // This is standalone usage, no appserver this.cm = new JmsConnectionManager(); - if (log.isTraceEnabled()) { + if (trace) log.trace("Created new connection manager"); - } } - else { + else this.cm = cm; - } - if (log.isTraceEnabled()) { + if (trace) log.trace("Using ManagedConnectionFactory=" + mcf + ", ConnectionManager=" + cm); - } } public void setReference(final Reference reference) { this.reference = reference; - if (log.isTraceEnabled()) { + if (log.isTraceEnabled()) log.trace("Using Reference=" + reference); - } } public Reference getReference() @@ -87,11 +84,10 @@ public QueueConnection createQueueConnection() throws JMSException { - QueueConnection qc = new JmsSessionFactoryImpl(mcf, cm, false); + QueueConnection qc = new JmsSessionFactoryImpl(mcf, cm, QUEUE); - if (log.isTraceEnabled()) { + if (log.isTraceEnabled()) log.trace("Created queue connection: " + qc); - } return qc; } @@ -99,13 +95,12 @@ public QueueConnection createQueueConnection(String userName, String password) throws JMSException { - JmsSessionFactoryImpl s = new JmsSessionFactoryImpl(mcf, cm, false); + JmsSessionFactoryImpl s = new JmsSessionFactoryImpl(mcf, cm, QUEUE); s.setUserName(userName); s.setPassword(password); - if (log.isTraceEnabled()) { + if (log.isTraceEnabled()) log.trace("Created queue connection: " + s); - } return s; } @@ -114,11 +109,10 @@ public TopicConnection createTopicConnection() throws JMSException { - TopicConnection tc = new JmsSessionFactoryImpl(mcf, cm, true); + TopicConnection tc = new JmsSessionFactoryImpl(mcf, cm, TOPIC); - if (log.isTraceEnabled()) { - log.trace("Created topci connection: " + tc); - } + if (log.isTraceEnabled()) + log.trace("Created topic connection: " + tc); return tc; } @@ -126,14 +120,39 @@ public TopicConnection createTopicConnection(String userName, String password) throws JMSException { - JmsSessionFactoryImpl s = new JmsSessionFactoryImpl(mcf, cm, true); + JmsSessionFactoryImpl s = new JmsSessionFactoryImpl(mcf, cm, TOPIC); s.setUserName(userName); s.setPassword(password); - if (log.isTraceEnabled()) { + if (log.isTraceEnabled()) log.trace("Created topic connection: " + s); - } return s; } + + // --- JMS 1.1 + + public Connection createConnection() + throws JMSException + { + Connection c = new JmsSessionFactoryImpl(mcf, cm, BOTH); + + if (log.isTraceEnabled()) + log.trace("Created topic connection: " + c); + + return c; + } + + public Connection createConnection(String userName, String password) + throws JMSException + { + JmsSessionFactoryImpl s = new JmsSessionFactoryImpl(mcf, cm, BOTH); + s.setUserName(userName); + s.setPassword(password); + + if (log.isTraceEnabled()) + log.trace("Created connection: " + s); + + return s; + } } 1.5 +29 -27 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsConnectionRequestInfo.java Index: JmsConnectionRequestInfo.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsConnectionRequestInfo.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- JmsConnectionRequestInfo.java 27 Aug 2003 04:29:38 -0000 1.4 +++ JmsConnectionRequestInfo.java 28 Aug 2003 19:51:04 -0000 1.5 @@ -21,7 +21,7 @@ * Created: Thu Mar 29 16:29:55 2001 * * @author <a href="mailto:pet...@ti...">Peter Antman</a>. - * @version $Revision: 1.4 $ + * @version $Revision: 1.5 $ */ public class JmsConnectionRequestInfo implements ConnectionRequestInfo @@ -31,7 +31,7 @@ private boolean transacted = true; private int acknowledgeMode = Session.AUTO_ACKNOWLEDGE; - private boolean isTopic = true; + private int type = JmsConnectionFactory.BOTH; /** * Creats with the MCF configured properties. @@ -40,7 +40,7 @@ { this.userName = prop.getUserName(); this.password = prop.getPassword(); - this.isTopic = prop.isTopic(); + this.type = prop.getType(); } /** @@ -48,11 +48,11 @@ */ public JmsConnectionRequestInfo(final boolean transacted, final int acknowledgeMode, - final boolean isTopic) + final int type) { this.transacted = transacted; this.acknowledgeMode = acknowledgeMode; - this.isTopic = isTopic; + this.type = type; } /** @@ -61,9 +61,9 @@ public void setDefaults(JmsMCFProperties prop) { if (userName == null) - userName = prop.getUserName();//May be null there to + userName = prop.getUserName();//May be null there to if (password == null) - password = prop.getPassword();//May be null there to + password = prop.getPassword();//May be null there to } public String getUserName() @@ -96,40 +96,42 @@ return acknowledgeMode; } - public boolean isTopic() { - return isTopic; + public int getType() + { + return type; } - public boolean equals(Object obj) { + public boolean equals(Object obj) + { if (obj == null) return false; if (obj instanceof JmsConnectionRequestInfo) { - JmsConnectionRequestInfo you = (JmsConnectionRequestInfo) obj; - return (this.transacted == you.isTransacted() && - this.acknowledgeMode == you.getAcknowledgeMode() && - this.isTopic == you.isTopic() && - Strings.compare(userName, you.getUserName()) && - Strings.compare(password, you.getPassword())); - } - else { - return false; + JmsConnectionRequestInfo you = (JmsConnectionRequestInfo) obj; + return (this.transacted == you.isTransacted() && + this.acknowledgeMode == you.getAcknowledgeMode() && + this.type == you.getType() && + Strings.compare(userName, you.getUserName()) && + Strings.compare(password, you.getPassword())); } + else + return false; } // FIXME !! - public int hashCode() { - String result = "" + userName + password + transacted + acknowledgeMode + isTopic; + public int hashCode() + { + String result = "" + userName + password + transacted + acknowledgeMode + type; return result.hashCode(); } /** * May be used if we fill in username and password later. */ - private boolean isEqual(Object o1, Object o2) { - if (o1 == null) { - return (o2 == null); - } else { - return o1.equals(o2); - } + private boolean isEqual(Object o1, Object o2) + { + if (o1 == null) + return (o2 == null); + else + return o1.equals(o2); } } 1.3 +49 -32 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsMCFProperties.java Index: JmsMCFProperties.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsMCFProperties.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- JmsMCFProperties.java 15 May 2002 03:06:38 -0000 1.2 +++ JmsMCFProperties.java 28 Aug 2003 19:51:04 -0000 1.3 @@ -9,6 +9,8 @@ package org.jboss.resource.adapter.jms; +import javax.jms.Queue; +import javax.jms.Topic; import javax.resource.ResourceException; import org.jboss.util.Strings; @@ -19,48 +21,53 @@ * Created: Thu Sep 27 10:01:25 2001 * * @author Peter Antman - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ */ public class JmsMCFProperties implements java.io.Serializable { - public static final String QUEUE_TYPE = javax.jms.Queue.class.getName(); - public static final String TOPIC_TYPE = javax.jms.Topic.class.getName(); + public static final String QUEUE_TYPE = Queue.class.getName(); + public static final String TOPIC_TYPE = Topic.class.getName(); String userName; String password; String providerJNDI = "java:DefaultJMSProvider"; - boolean isTopic = true; + int type = JmsConnectionFactory.BOTH; - public JmsMCFProperties() { + public JmsMCFProperties() + { // empty } /** * Set userName, null by default. */ - public void setUserName(final String userName) { + public void setUserName(final String userName) + { this.userName = userName; } /** * Get userName, may be null. */ - public String getUserName() { + public String getUserName() + { return userName; } /** * Set password, null by default. */ - public void setPassword(final String password) { + public void setPassword(final String password) + { this.password = password; } /** * Get password, may be null. */ - public String getPassword() { + public String getPassword() + { return password; } @@ -69,29 +76,33 @@ * * <p>Defaults to java:DefaultJMSProvider. */ - public void setProviderJNDI(final String providerJNDI) { + public void setProviderJNDI(final String providerJNDI) + { this.providerJNDI = providerJNDI; } /** * Get providerJNDI. May not be null. */ - public String getProviderJNDI() { + public String getProviderJNDI() + { return providerJNDI; } /** - * Type of the JMS Session, defaults to true. + * Type of the JMS Session. */ - public boolean isTopic() { - return isTopic; + public int getType() + { + return type; } /** * Set the default session type. */ - public void setIsTopic(boolean isTopic) { - this.isTopic = isTopic; + public void setType(int type) + { + this.type = type; } /** @@ -102,33 +113,38 @@ */ public void setSessionDefaultType(String type) throws ResourceException { - if (type.equals(QUEUE_TYPE)) { - isTopic = false; - } - else if(type.equals(TOPIC_TYPE)) { - isTopic = true; - } - else { - throw new ResourceException(type + " is not a recogniced JMS session type"); - } + if (type.equals(QUEUE_TYPE)) + this.type = JmsConnectionFactory.QUEUE; + else if(type.equals(TOPIC_TYPE)) + this.type = JmsConnectionFactory.TOPIC; + else + this.type = JmsConnectionFactory.BOTH; } - public String getSessionDefaultType() { - return (isTopic ? TOPIC_TYPE : QUEUE_TYPE); + public String getSessionDefaultType() + { + if (type == JmsConnectionFactory.BOTH) + return "both"; + else if (type == JmsConnectionFactory.QUEUE) + return TOPIC_TYPE; + else + return QUEUE_TYPE; } /** * Test for equality of all attributes. */ - public boolean equals(Object obj) { + public boolean equals(Object obj) + { if (obj == null) return false; - if (obj instanceof JmsMCFProperties) { + if (obj instanceof JmsMCFProperties) + { JmsMCFProperties you = (JmsMCFProperties) obj; return (Strings.compare(userName, you.getUserName()) && Strings.compare(password, you.getPassword()) && Strings.compare(providerJNDI, you.getProviderJNDI()) && - this.isTopic == you.isTopic()); + this.type == you.type); } return false; @@ -137,9 +153,10 @@ /** * Simple hashCode of all attributes. */ - public int hashCode() { + public int hashCode() + { // FIXME - String result = "" + userName + password + providerJNDI + isTopic; + String result = "" + userName + password + providerJNDI + type; return result.hashCode(); } } 1.9 +140 -87 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java Index: JmsManagedConnection.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- JmsManagedConnection.java 27 Aug 2003 04:29:38 -0000 1.8 +++ JmsManagedConnection.java 28 Aug 2003 19:51:04 -0000 1.9 @@ -22,8 +22,10 @@ import javax.jms.Session; import javax.jms.TopicConnection; import javax.jms.TopicSession; +import javax.jms.XAConnection; import javax.jms.XAQueueConnection; import javax.jms.XAQueueSession; +import javax.jms.XASession; import javax.jms.XATopicConnection; import javax.jms.XATopicSession; import javax.naming.Context; @@ -113,7 +115,7 @@ * * @author <a href="mailto:pet...@ti...">Peter Antman</a>. * @author <a href="mailto:ja...@pl...">Jason Dillon</a> - * @version $Revision: 1.8 $ + * @version $Revision: 1.9 $ */ public class JmsManagedConnection implements ManagedConnection @@ -128,9 +130,11 @@ // Physical JMS connection stuff private Connection con; + private Session session; private TopicSession topicSession; - private XATopicSession xaTopicSession; private QueueSession queueSession; + private XASession xaSession; + private XATopicSession xaTopicSession; private XAQueueSession xaQueueSession; private XAResource xaResource; private boolean xaTransacted; @@ -195,10 +199,9 @@ JmsCred cred = JmsCred.getJmsCred(mcf,subject,info); // Null users are allowed! - if (user != null && !user.equals(cred.name)) { + if (user != null && !user.equals(cred.name)) throw new SecurityException ("Password credentials not the same, reauthentication not allowed"); - } if (cred.name != null && user == null) { throw new SecurityException ("Password credentials not the same, reauthentication not allowed"); @@ -206,9 +209,8 @@ user = cred.name; // Basically meaningless - if (isDestroyed) { + if (isDestroyed) throw new IllegalStateException("ManagedConnection already destroyd"); - } // Create a handle JmsSession handle = new JmsSession(this); @@ -221,12 +223,12 @@ * * @throws ResourceException Failed to close one or more handles. */ - private void destroyHandles() throws ResourceException { + private void destroyHandles() throws ResourceException + { Iterator iter = handles.iterator(); - while (iter.hasNext()) { + while (iter.hasNext()) ((JmsSession)iter.next()).destroy(); - } // clear the handles map handles.clear(); @@ -238,7 +240,8 @@ * @throws ResourceException Could not property close the session and * connection. */ - public void destroy() throws ResourceException { + public void destroy() throws ResourceException + { if (isDestroyed) return; isDestroyed = true; @@ -246,23 +249,32 @@ // destory handles destroyHandles(); - try { + try + { // Close session and connection - if (info.isTopic()) { + if (info.getType() == JmsConnectionFactory.TOPIC) + { topicSession.close(); if (xaTransacted) { xaTopicSession.close(); } } - else { + else if (info.getType() == JmsConnectionFactory.QUEUE) + { queueSession.close(); - if (xaTransacted) { + if (xaTransacted) xaQueueSession.close(); - } + } + else + { + session.close(); + if (xaTransacted) + xaSession.close(); } con.close(); } - catch (JMSException e) { + catch (JMSException e) + { throw new JBossResourceException ("Could not properly close the session and connection", e); } @@ -275,10 +287,10 @@ * * Does that mean that autentication should be redone. FIXME */ - public void cleanup() throws ResourceException { - if (isDestroyed) { + public void cleanup() throws ResourceException + { + if (isDestroyed) throw new IllegalStateException("ManagedConnection already destroyd"); - } // destory handles destroyHandles(); @@ -299,15 +311,15 @@ // Should we check auth, ie user and pwd? FIXME // - if (!isDestroyed && obj instanceof JmsSession) { + if (!isDestroyed && obj instanceof JmsSession) + { JmsSession h = (JmsSession)obj; h.setManagedConnection(this); handles.add(h); } - else { + else throw new IllegalStateException ("ManagedConnection in an illegal state"); - } } /** @@ -315,12 +327,12 @@ * * @param l The connection event listener to be added. */ - public void addConnectionEventListener(final ConnectionEventListener l) { + public void addConnectionEventListener(final ConnectionEventListener l) + { listeners.addElement(l); - if (log.isDebugEnabled()) { + if (log.isDebugEnabled()) log.debug("ConnectionEvent listener added: " + l); - } } /** @@ -328,7 +340,8 @@ * * @param l The connection event listener to be removed. */ - public void removeConnectionEventListener(final ConnectionEventListener l) { + public void removeConnectionEventListener(final ConnectionEventListener l) + { listeners.removeElement(l); } @@ -339,27 +352,27 @@ * * @throws ResourceException XA transaction not supported */ - public XAResource getXAResource() throws ResourceException { + public XAResource getXAResource() throws ResourceException + { // // Spec says a mc must allways return the same XA resource, // so we cache it. // - if (!xaTransacted) { - throw new NotSupportedException("XA transaction not supported"); - } + if (!xaTransacted) + throw new NotSupportedException("Non XA transaction not supported"); - if (xaResource == null) { - if (info.isTopic()) { + if (xaResource == null) + { + if (info.getType() == JmsConnectionFactory.TOPIC) xaResource = xaTopicSession.getXAResource(); - } - else { + else if (info.getType() == JmsConnectionFactory.QUEUE) xaResource = xaQueueSession.getXAResource(); - } + else + xaResource = xaSession.getXAResource(); } - if (log.isTraceEnabled()) { + if (log.isTraceEnabled()) log.trace("XAResource=" + xaResource); - } return xaResource; } @@ -371,11 +384,11 @@ * * @throws ResourceException */ - public LocalTransaction getLocalTransaction() throws ResourceException { + public LocalTransaction getLocalTransaction() throws ResourceException + { LocalTransaction tx = new JmsLocalTransaction(this); - if (log.isTraceEnabled()) { + if (log.isTraceEnabled()) log.trace("LocalTransaction=" + tx); - } return tx; } @@ -387,10 +400,10 @@ * @throws ResourceException * @throws IllegalStateException ManagedConnection already destroyed. */ - public ManagedConnectionMetaData getMetaData() throws ResourceException { - if (isDestroyed) { + public ManagedConnectionMetaData getMetaData() throws ResourceException + { + if (isDestroyed) throw new IllegalStateException("ManagedConnection already destroyd"); - } return new JmsMetaData(this); } @@ -402,7 +415,8 @@ * * @throws ResourceException */ - public void setLogWriter(final PrintWriter out) throws ResourceException { + public void setLogWriter(final PrintWriter out) throws ResourceException + { // // jason: screw the logWriter stuff for now it sucks ass // @@ -413,7 +427,8 @@ * * @return Always null */ - public PrintWriter getLogWriter() throws ResourceException { + public PrintWriter getLogWriter() throws ResourceException + { // // jason: screw the logWriter stuff for now it sucks ass // @@ -428,13 +443,14 @@ * * @return Either a topic or queue connection. */ - protected Session getSession() { - if (info.isTopic()) { + protected Session getSession() + { + if (info.getType() == JmsConnectionFactory.TOPIC) return topicSession; - } - else { + else if (info.getType() == JmsConnectionFactory.QUEUE) return queueSession; - } + else + return session; } /** @@ -442,18 +458,19 @@ * * @param event The event to send. */ - protected void sendEvent(final ConnectionEvent event) { + protected void sendEvent(final ConnectionEvent event) + { int type = event.getId(); - if (log.isDebugEnabled()) { - log.debug("Sending connection event: " + type); - } + if (log.isTraceEnabled()) + log.trace("Sending connection event: " + type); // convert to an array to avoid concurrent modification exceptions ConnectionEventListener[] list = (ConnectionEventListener[])listeners.toArray(new ConnectionEventListener[listeners.size()]); - for (int i=0; i<list.length; i++) { + for (int i=0; i<list.length; i++) + { switch (type) { case ConnectionEvent.CONNECTION_CLOSED: list[i].connectionClosed(event); @@ -486,7 +503,8 @@ * * @param handle The handle to remove. */ - protected void removeHandle(final JmsSession handle) { + protected void removeHandle(final JmsSession handle) + { handles.remove(handle); } @@ -497,7 +515,8 @@ * * @return The request info for this connection. */ - protected ConnectionRequestInfo getInfo() { + protected ConnectionRequestInfo getInfo() + { return info; } @@ -506,7 +525,8 @@ * * @return The connection factory for this connection. */ - protected JmsManagedConnectionFactory getManagedConnectionFactory() { + protected JmsManagedConnectionFactory getManagedConnectionFactory() + { return mcf; } @@ -517,7 +537,8 @@ * * @return The user name for this connection. */ - protected String getUserName() { + protected String getUserName() + { return user; } @@ -531,23 +552,26 @@ * * @throws NamingException Failed to lookup provider adapter. */ - private JMSProviderAdapter getProviderAdapter() throws NamingException { + private JMSProviderAdapter getProviderAdapter() throws NamingException + { JMSProviderAdapter adapter; - if (mcf.getJmsProviderAdapterJNDI() != null) { + if (mcf.getJmsProviderAdapterJNDI() != null) + { // lookup the adapter from JNDI Context ctx = new InitialContext(); - try { + try + { adapter = (JMSProviderAdapter) ctx.lookup(mcf.getJmsProviderAdapterJNDI()); } - finally { + finally + { ctx.close(); } } - else { + else adapter = mcf.getJmsProviderAdapter(); - } return adapter; } @@ -561,79 +585,108 @@ { boolean debug = log.isDebugEnabled(); - try { + try + { JMSProviderAdapter adapter = getProviderAdapter(); Context context = adapter.getInitialContext(); Object factory; boolean transacted = info.isTransacted(); int ack = Session.AUTO_ACKNOWLEDGE; - if (info.isTopic()) { + if (info.getType() == JmsConnectionFactory.TOPIC) + { factory = context.lookup(adapter.getTopicFactoryRef()); con = ConnectionFactoryHelper.createTopicConnection(factory, user, pwd); if (debug) log.debug("created connection: " + con); - if (con instanceof XATopicConnection) { + if (con instanceof XATopicConnection) + { xaTopicSession = ((XATopicConnection)con).createXATopicSession(); topicSession = xaTopicSession.getTopicSession(); xaTransacted = true; } - else if (con instanceof TopicConnection) { + else if (con instanceof TopicConnection) + { topicSession = ((TopicConnection)con).createTopicSession(transacted, ack); - if (debug) { + if (debug) log.debug("Using a non-XA TopicConnection. " + "It will not be able to participate in a Global UOW"); - } } - else { + else throw new JBossResourceException("Connection was not recognizable: " + con); - } - if (debug) { + if (debug) log.debug("xaTopicSession=" + xaTopicSession + ", topicSession=" + topicSession); - } } - else { // isQueue + else if (info.getType() == JmsConnectionFactory.QUEUE) + { factory = context.lookup(adapter.getQueueFactoryRef()); con = ConnectionFactoryHelper.createQueueConnection(factory, user, pwd); if (debug) log.debug("created connection: " + con); - if (con instanceof XAQueueConnection) { + if (con instanceof XAQueueConnection) + { xaQueueSession = ((XAQueueConnection)con).createXAQueueSession(); queueSession = xaQueueSession.getQueueSession(); xaTransacted = true; } - else if (con instanceof QueueConnection) { + else if (con instanceof QueueConnection) + { queueSession = ((QueueConnection)con).createQueueSession(transacted, ack); - if (debug) { + if (debug) log.debug("Using a non-XA QueueConnection. " + "It will not be able to participate in a Global UOW"); - } } - else { + else throw new JBossResourceException("Connection was not reconizable: " + con); - } - if (debug) { + if (debug) log.debug("xaQueueSession=" + xaQueueSession + ", queueSession=" + queueSession); + } + else + { + factory = context.lookup(adapter.getFactoryRef()); + con = ConnectionFactoryHelper.createConnection(factory, user, pwd); + if (debug) log.debug("created connection: " + con); + + if (con instanceof XAConnection) + { + xaSession = + ((XAConnection)con).createXASession(); + session = xaSession.getSession(); + xaTransacted = true; + } + else if (con instanceof Connection) + { + session = + ((Connection)con).createSession(transacted, ack); + if (debug) + log.debug("Using a non-XA Connection. " + + "It will not be able to participate in a Global UOW"); } + else + throw new JBossResourceException("Connection was not reconizable: " + con); + + if (debug) + log.debug("xaSession=" + xaQueueSession + ", Session=" + session); } con.start(); - if (debug) { + if (debug) log.debug("transacted=" + transacted + ", ack=" + ack); - } } - catch (NamingException e) { + catch (NamingException e) + { CommException ce = new CommException(e.toString()); ce.setLinkedException(e); throw ce; } - catch (JMSException e) { + catch (JMSException e) + { CommException ce = new CommException(e.toString()); ce.setLinkedException(e); throw ce; 1.6 +57 -3 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsSession.java Index: JmsSession.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsSession.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- JmsSession.java 27 Aug 2003 04:29:38 -0000 1.5 +++ JmsSession.java 28 Aug 2003 19:51:04 -0000 1.6 @@ -10,8 +10,30 @@ package org.jboss.resource.adapter.jms; import java.io.Serializable; -import javax.jms.*; +import javax.jms.BytesMessage; +import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.MessageListener; +import javax.jms.MapMessage; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.ObjectMessage; +import javax.jms.Queue; +import javax.jms.QueueBrowser; +import javax.jms.QueueReceiver; +import javax.jms.QueueSender; +import javax.jms.QueueSession; +import javax.jms.Session; +import javax.jms.StreamMessage; +import javax.jms.TemporaryQueue; +import javax.jms.TemporaryTopic; +import javax.jms.TextMessage; +import javax.jms.Topic; +import javax.jms.TopicPublisher; +import javax.jms.TopicSession; +import javax.jms.TopicSubscriber; import javax.resource.spi.ConnectionEvent; import org.jboss.logging.Logger; @@ -26,10 +48,10 @@ * * @author <a href="mailto:pet...@ti...">Peter Antman</a>. * @author <a href="mailto:ja...@pl...">Jason Dillon</a>. - * @version $Revision: 1.5 $ + * @version $Revision: 1.6 $ */ public class JmsSession - implements QueueSession, TopicSession + implements Session, QueueSession, TopicSession { private static final Logger log = Logger.getLogger(JmsSession.class); @@ -270,6 +292,38 @@ public TemporaryQueue createTemporaryQueue() throws JMSException { return ((QueueSession)getSession()).createTemporaryQueue(); + } + + // -- JMS 1.1 + + public MessageConsumer createConsumer(Destination destination) + throws JMSException + { + return getSession().createConsumer(destination); + } + + public MessageConsumer createConsumer(Destination destination, String messageSelector) + throws JMSException + { + return getSession().createConsumer(destination, messageSelector); + } + + public MessageConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal) + throws JMSException + { + return getSession().createConsumer(destination, messageSelector, noLocal); + } + + public MessageProducer createProducer(Destination destination) + throws JMSException + { + return getSession().createProducer(destination); + } + + public int getAcknowledgeMode() + throws JMSException + { + return getSession().getAcknowledgeMode(); } // --- JmsManagedConnection api 1.4 +4 -3 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsSessionFactory.java Index: JmsSessionFactory.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsSessionFactory.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- JmsSessionFactory.java 27 Aug 2003 04:29:38 -0000 1.3 +++ JmsSessionFactory.java 28 Aug 2003 19:51:04 -0000 1.4 @@ -9,8 +9,9 @@ package org.jboss.resource.adapter.jms; -import javax.jms.TopicConnection; +import javax.jms.Connection; import javax.jms.QueueConnection; +import javax.jms.TopicConnection; /** * A marker interface to join topics and queues into one factory. @@ -18,10 +19,10 @@ * <p>Created: Thu Mar 29 15:37:21 2001 * * @author <a href="mailto:pet...@ti...">Peter Antman</a>. - * @version <pre>$Revision: 1.3 $</pre> + * @version <pre>$Revision: 1.4 $</pre> */ public interface JmsSessionFactory - extends TopicConnection, QueueConnection + extends Connection, TopicConnection, QueueConnection { // empty } 1.8 +85 -36 jbosscx/src/main/org/jboss/resource/adapter/jms/JmsSessionFactoryImpl.java Index: JmsSessionFactoryImpl.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jms/JmsSessionFactoryImpl.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- JmsSessionFactoryImpl.java 27 Aug 2003 04:29:38 -0000 1.7 +++ JmsSessionFactoryImpl.java 28 Aug 2003 19:51:04 -0000 1.8 @@ -17,15 +17,17 @@ import javax.resource.spi.ConnectionManager; import javax.resource.spi.ConnectionRequestInfo; -import javax.jms.JMSException; import javax.jms.ConnectionConsumer; +import javax.jms.ConnectionMetaData; +import javax.jms.Destination; +import javax.jms.ExceptionListener; +import javax.jms.JMSException; +import javax.jms.Queue; +import javax.jms.QueueSession; import javax.jms.ServerSessionPool; -import javax.jms.TopicSession; +import javax.jms.Session; import javax.jms.Topic; -import javax.jms.QueueSession; -import javax.jms.Queue; -import javax.jms.ExceptionListener; -import javax.jms.ConnectionMetaData; +import javax.jms.TopicSession; import org.jboss.logging.Logger; @@ -34,7 +36,7 @@ * * <p>Created: Thu Mar 29 15:36:51 2001 * - * @version <tt>$Revision: 1.7 $</tt> + * @version <tt>$Revision: 1.8 $</tt> * @author <a href="mailto:pet...@ti...">Peter Antman</a>. * @author <a href="mailto:ja...@pl...">Jason Dillon</a> */ @@ -51,7 +53,7 @@ // Used from JmsConnectionFactory private String userName; private String password; - private boolean isTopic; + private int type; /** JmsRa own factory */ private ManagedConnectionFactory mcf; @@ -61,7 +63,7 @@ public JmsSessionFactoryImpl(final ManagedConnectionFactory mcf, final ConnectionManager cm, - final boolean isTopic) + final int type) { this.mcf = mcf; this.cm = cm; @@ -74,16 +76,18 @@ this.cm = cm; } - this.isTopic = isTopic; + this.type = type; - log.debug("mcf=" + mcf + ", cm=" + cm + ", isTopic=" + isTopic); + log.debug("mcf=" + mcf + ", cm=" + cm + ", type=" + type); } - public void setReference(final Reference reference) { + public void setReference(final Reference reference) + { this.reference = reference; } - public Reference getReference() { + public Reference getReference() + { return reference; } @@ -105,20 +109,21 @@ final int acknowledgeMode) throws JMSException { - try { - if (isTopic) { + try + { + if (type == JmsConnectionFactory.TOPIC) throw new IllegalStateException ("Can not get a queue session from a topic connection"); - } JmsConnectionRequestInfo info = - new JmsConnectionRequestInfo(transacted, acknowledgeMode, false); + new JmsConnectionRequestInfo(transacted, acknowledgeMode, type); info.setUserName(userName); info.setPassword(password); return (QueueSession)cm.allocateConnection(mcf, info); } - catch (ResourceException e) { + catch (ResourceException e) + { log.error("could not create session", e); JMSException je = @@ -144,21 +149,22 @@ final int acknowledgeMode) throws JMSException { - try { - if (!isTopic) { + try + { + if (type == JmsConnectionFactory.QUEUE) throw new IllegalStateException ("Can not get a topic session from a session connection"); - } JmsConnectionRequestInfo info = - new JmsConnectionRequestInfo(transacted, acknowledgeMode, true); + new JmsConnectionRequestInfo(transacted, acknowledgeMode, type); info.setUserName(userName); info.setPassword(password); return (TopicSession)cm.allocateConnection(mcf, info); } - catch (ResourceException e) { + catch (ResourceException e) + { log.error("could not create session", e); JMSException je = new JMSException @@ -178,12 +184,12 @@ throw new IllegalStateException(ISE); } - public ConnectionConsumer createDurableConnectionConsumer - (Topic topic, - String subscriptionName, - String messageSelector, - ServerSessionPool sessionPool, - int maxMessages) + public ConnectionConsumer createDurableConnectionConsumer( + Topic topic, + String subscriptionName, + String messageSelector, + ServerSessionPool sessionPool, + int maxMessages) throws JMSException { throw new IllegalStateException(ISE); @@ -191,19 +197,23 @@ //--- All the Connection methods - public String getClientID() throws JMSException { + public String getClientID() throws JMSException + { throw new IllegalStateException(ISE); } - public void setClientID(String cID) throws JMSException { + public void setClientID(String cID) throws JMSException + { throw new IllegalStateException(ISE); } - public ConnectionMetaData getMetaData() throws JMSException { + public ConnectionMetaData getMetaData() throws JMSException + { throw new IllegalStateException(ISE); } - public ExceptionListener getExceptionListener() throws JMSException { + public ExceptionListener getExceptionListener() throws JMSException + { throw new IllegalStateException(ISE); } @@ -213,17 +223,56 @@ throw new IllegalStateException(ISE); } - public void start() throws JMSException { + public void start() throws JMSException + { throw new IllegalStateException(ISE); } - public void stop() throws JMSException { + public void stop() throws JMSException + { throw new IllegalStateException(ISE); } - public void close() throws JMSException { + public void close() throws JMSException + { // // TODO: close all sessions, for now just do nothing. // + } + + // -- JMS 1.1 + + public ConnectionConsumer createConnectionConsumer(Destination destination, ServerSessionPool pool, int maxMessages) throws JMSException + { + throw new IllegalStateException(ISE); + } + + public ConnectionConsumer createConnectionConsumer(Destination destination, String name, ServerSessionPool pool, int maxMessages) throws JMSException + { + throw new IllegalStateException(ISE); + } + + public Session createSession(boolean transacted, int acknowledgeMode) + throws JMSException + { + try + { + JmsConnectionRequestInfo info = + new JmsConnectionRequestInfo(transacted, acknowledgeMode, type); + + info.setUserName(userName); + info.setPassword(password); + + return (Session)cm.allocateConnection(mcf, info); + } + catch (ResourceException e) + { + log.error("could not create session", e); + + JMSException je = new JMSException + ("Could not create a session: " + e); + je.setLinkedException(e); + throw je; + } } } |