summaryrefslogtreecommitdiffstats
path: root/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java')
-rw-r--r--sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java95
1 files changed, 95 insertions, 0 deletions
diff --git a/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java b/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
new file mode 100644
index 0000000000..399e80e4b5
--- /dev/null
+++ b/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
@@ -0,0 +1,95 @@
+package org.apache.tuscany.binding.jms;
+
+import java.util.Properties;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+public class SimpleJMSResourceFactory implements JMSResourceFactory {
+
+ private JMSBinding jmsBinding;
+ private Connection con;
+ private Context context;
+ private boolean isConnectionStarted;
+
+ public SimpleJMSResourceFactory(JMSBinding jmsBinding){
+ this.jmsBinding = jmsBinding;
+ }
+
+ /*
+ * This is a simple implementation where a connection is created per binding
+ * Ideally the resource factory should be able to leverage the host environment
+ * to provide connection pooling if it can.
+ *
+ * For ex If Tuscany is running inside an AppServer
+ * Then we could leverage the JMS resources it provides
+ *
+ * @see org.apache.tuscany.binding.jms.JMSResourceFactory#getConnection()
+ */
+ public Connection getConnection() throws NamingException, JMSException{
+ if (con == null){
+ createConnection();
+ }
+ return con;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.tuscany.binding.jms.JMSResourceFactory#createSession()
+ */
+ public Session createSession() throws JMSException, NamingException{
+ return getConnection().createSession(false, Session.AUTO_ACKNOWLEDGE);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.tuscany.binding.jms.JMSResourceFactory#startConnection()
+ */
+ public void startConnection() throws JMSException, NamingException{
+ if(!isConnectionStarted){
+ getConnection().start();
+ isConnectionStarted = true;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.tuscany.binding.jms.JMSResourceFactory#closeConnection()
+ */
+ public void closeConnection() throws JMSException, NamingException{
+ if(con != null){
+ con.close();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.tuscany.binding.jms.JMSResourceFactory#createTextMessage(javax.jms.Session)
+ */
+ public Message createMessage(Session session) throws JMSException{
+ javax.jms.Message message = session.createTextMessage(); // default
+ message.setJMSDeliveryMode(jmsBinding.getDeliveryMode());
+ message.setJMSPriority(jmsBinding.getPriority());
+
+ return message;
+ }
+
+ private void createConnection() throws NamingException, JMSException {
+ if(context == null){
+ createInitialContext();
+ }
+ ConnectionFactory conFac = (ConnectionFactory)context.lookup(jmsBinding.getConnectionFactoryName());
+ con = conFac.createConnection();
+ }
+
+ private void createInitialContext() throws NamingException{
+ Properties props = new Properties();
+ props.setProperty(Context.INITIAL_CONTEXT_FACTORY,jmsBinding.getInitialContextFactoryName());
+ props.setProperty(Context.PROVIDER_URL,jmsBinding.getJNDIProviderURL());
+
+ context = new InitialContext(props);
+ }
+
+}