summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src')
-rw-r--r--sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQBroker.java57
-rw-r--r--sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQJMSHost.java33
-rw-r--r--sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQModuleActivator.java45
-rw-r--r--sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/JMSResourceFactoryImpl.java159
-rw-r--r--sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator19
-rw-r--r--sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.host.jms.JMSHost20
6 files changed, 333 insertions, 0 deletions
diff --git a/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQBroker.java b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQBroker.java
new file mode 100644
index 0000000000..29f7eb0a71
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQBroker.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.host.jms.activemq;
+
+import org.apache.activemq.broker.BrokerService;
+
+/**
+ */
+public class ActiveMQBroker {
+
+ public static final String CONNECTOR_URL = "tcp://localhost:61619";
+ private BrokerService broker;
+
+ public ActiveMQBroker() {
+ }
+
+ public void start() {
+ broker = new BrokerService();
+ try {
+ broker.addConnector(CONNECTOR_URL);
+ broker.start();
+ } catch ( Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void stop() {
+ if (broker != null) {
+ try {
+ broker.stop();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ broker = null;
+ }
+ }
+
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQJMSHost.java b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQJMSHost.java
new file mode 100644
index 0000000000..cf03ed8d33
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQJMSHost.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.host.jms.activemq;
+
+import org.apache.tuscany.sca.host.jms.JMSHost;
+import org.apache.tuscany.sca.host.jms.JMSResourceFactory;
+
+public class ActiveMQJMSHost implements JMSHost {
+
+ public JMSResourceFactory createJMSResourceFactory(String connectionFactoryName, String initialContextFactoryName, String jndiURL) {
+ return new JMSResourceFactoryImpl(connectionFactoryName, initialContextFactoryName, jndiURL);
+ }
+
+
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQModuleActivator.java b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQModuleActivator.java
new file mode 100644
index 0000000000..f3cd71bb78
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/ActiveMQModuleActivator.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.host.jms.activemq;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ModuleActivator;
+
+public class ActiveMQModuleActivator implements ModuleActivator {
+
+ private static ActiveMQBroker activeMQHost;
+
+ public void start(ExtensionPointRegistry registry) {
+ }
+
+ public void stop(ExtensionPointRegistry registry) {
+ if (activeMQHost != null) {
+ activeMQHost.stop();
+ activeMQHost = null;
+ }
+ }
+
+ public static void startBroker() {
+ if (activeMQHost == null) {
+ activeMQHost = new ActiveMQBroker();
+ activeMQHost.start();
+ }
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/JMSResourceFactoryImpl.java b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/JMSResourceFactoryImpl.java
new file mode 100644
index 0000000000..77b3503a9d
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/java/org/apache/tuscany/sca/host/jms/activemq/JMSResourceFactoryImpl.java
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.host.jms.activemq;
+
+import java.util.Properties;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Session;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.apache.tuscany.sca.host.jms.JMSResourceFactory;
+
+/**
+ * Abstracts away any JMS provide specific feature from the JMS binding
+ */
+public class JMSResourceFactoryImpl implements JMSResourceFactory {
+
+ private static final String DEFAULT_ICFN = "org.apache.activemq.jndi.ActiveMQInitialContextFactory";
+ private String initialContextFactoryName = DEFAULT_ICFN;
+ private String connectionFactoryName = "ConnectionFactory";
+ private String jndiURL = ActiveMQBroker.CONNECTOR_URL;
+
+ private Connection connection;
+ private Context context;
+ private boolean isConnectionStarted;
+
+ public JMSResourceFactoryImpl(String connectionFactoryName, String initialContextFactoryName, String jndiURL) {
+ if (connectionFactoryName != null) {
+ this.connectionFactoryName = connectionFactoryName.trim();
+ }
+ if (initialContextFactoryName != null) {
+ this.initialContextFactoryName = initialContextFactoryName.trim();
+ }
+ if (jndiURL != null) {
+ this.jndiURL = jndiURL.trim();
+ }
+ }
+
+ /*
+ * 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. E.g. 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 (connection == null) {
+ createConnection();
+ }
+ return connection;
+ }
+
+ /*
+ * (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 (connection != null) {
+ connection.close();
+ }
+ }
+
+ public void startBroker() {
+ if (isEmbedded()) {
+ // ensure the broker has been started
+ ActiveMQModuleActivator.startBroker();
+ }
+ }
+
+ /**
+ * TODO: need to find a way to determine whether or not need to start the embedded broker
+ * for now it always starts it if the activemq icf is being used with our default jndiurl
+ */
+ protected boolean isEmbedded() {
+ return DEFAULT_ICFN.equals(initialContextFactoryName) && ActiveMQBroker.CONNECTOR_URL.equals(jndiURL);
+ }
+
+ private void createConnection() throws NamingException, JMSException {
+ if (context == null) {
+ createInitialContext();
+ }
+ ConnectionFactory connectionFactory = (ConnectionFactory)context.lookup(connectionFactoryName);
+ connection = connectionFactory.createConnection();
+ }
+
+ private void createInitialContext() throws NamingException {
+ Properties props = new Properties();
+ props.setProperty(Context.INITIAL_CONTEXT_FACTORY, initialContextFactoryName);
+ props.setProperty(Context.PROVIDER_URL, jndiURL);
+
+ context = new InitialContext(props);
+ }
+
+ public Destination lookupDestination(String jndiName) throws NamingException {
+ if (context == null) {
+ createInitialContext();
+ }
+
+ Destination dest = null;
+
+ try {
+ dest = (Destination)context.lookup(jndiName);
+ } catch (NamingException ex) {
+
+ }
+ return dest;
+ }
+
+ /**
+ * You can create a destination in ActiveMQ (and have it appear in JNDI) by putting "dynamicQueues/" in front of the
+ * queue name being looked up
+ */
+ public Destination createDestination(String jndiName) throws NamingException {
+ return lookupDestination("dynamicQueues/" + jndiName);
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
new file mode 100644
index 0000000000..6d607798c8
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.core.ModuleActivator
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# Implementation class for the ModuleActivator
+org.apache.tuscany.sca.host.jms.activemq.ActiveMQModuleActivator
+
diff --git a/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.host.jms.JMSHost b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.host.jms.JMSHost
new file mode 100644
index 0000000000..a883dd7e34
--- /dev/null
+++ b/sca-java-1.x/branches/sca-java-1.1/modules/host-jms-activemq/src/main/resources/META-INF/services/org.apache.tuscany.sca.host.jms.JMSHost
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# Implementation class for the ModuleActivator
+org.apache.tuscany.sca.host.jms.activemq.ActiveMQJMSHost
+
+