You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by li...@apache.org on 2010/07/14 17:52:27 UTC

svn commit: r964088 - in /incubator/aries/sandbox/linsun/mds: mds-impl/src/main/java/org/apache/aries/mds/impl/ mds-sample/src/main/resources/OSGI-INF/blueprint/

Author: linsun
Date: Wed Jul 14 15:52:27 2010
New Revision: 964088

URL: http://svn.apache.org/viewvc?rev=964088&view=rev
Log:
[message driven service]update service property names to use property names like remote service format

Added:
    incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java   (with props)
Modified:
    incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/Activator.java
    incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSContainerImpl.java
    incubator/aries/sandbox/linsun/mds/mds-sample/src/main/resources/OSGI-INF/blueprint/config.xml

Modified: incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/Activator.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/Activator.java?rev=964088&r1=964087&r2=964088&view=diff
==============================================================================
--- incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/Activator.java (original)
+++ incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/Activator.java Wed Jul 14 15:52:27 2010
@@ -53,6 +53,9 @@ public class Activator implements Bundle
         System.out.println("aries-mds-impl starts");
         Activator.context = context;
         
+        // create service tracker for javax.jms.MessageListener
+        // if we support other message interface, we also need to create the service tracker for those 
+        // or update filter criteria
         st = createServiceTracker();    
         st.open();
     }

Added: incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java?rev=964088&view=auto
==============================================================================
--- incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java (added)
+++ incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java Wed Jul 14 15:52:27 2010
@@ -0,0 +1,27 @@
+/*
+ * 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.aries.mds.impl;
+
+public class MDSConstants {
+    public static final String SERVICE_EXPORT_CONFIG = "service.exported.configs";
+    public static final String SERVICE_PID = "service.pid";
+    public static final String SERVICE_EXPORT_CONFIG_DEFAULT = "org.apache.aries.message.driven";
+    public static final String TRANSACTION_ATTRIBUTE = "transactionAttribute";
+
+}

Propchange: incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSConstants.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSContainerImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSContainerImpl.java?rev=964088&r1=964087&r2=964088&view=diff
==============================================================================
--- incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSContainerImpl.java (original)
+++ incubator/aries/sandbox/linsun/mds/mds-impl/src/main/java/org/apache/aries/mds/impl/MDSContainerImpl.java Wed Jul 14 15:52:27 2010
@@ -40,9 +40,11 @@ import org.apache.aries.mds.impl.transac
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.apache.xbean.recipe.Option;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 public class MDSContainerImpl implements MDSContainer {
     private static final Logger LOGGER = LoggerFactory.getLogger(MDSContainerImpl.class);
     private final ResourceAdapter ra;
@@ -52,6 +54,7 @@ public class MDSContainerImpl implements
     private MessageEndpointFactory endpointFactory;
     private TransactionPolicyFactory tpf;
     private Class messageListenerInterface;
+    private String prefix;
     
     public MDSContainerImpl(ResourceAdapter ra, ServiceReference sr, BundleContext bc) {
         this.ra = ra;
@@ -70,24 +73,44 @@ public class MDSContainerImpl implements
             e.printStackTrace();
         }
         
-        Object pid = this.sr.getProperty("service.pid");
+        Object pid = this.sr.getProperty(MDSConstants.SERVICE_PID);
         if (pid == null) {
-            throw new NullPointerException("service.pid has to be specified as a required service property");
+            throw new NullPointerException(MDSConstants.SERVICE_PID + " has to be specified as a required service property");
         }
 
+        Object exportConfig = this.sr.getProperty(MDSConstants.SERVICE_EXPORT_CONFIG);
+        if (exportConfig == null) {
+            prefix = MDSConstants.SERVICE_EXPORT_CONFIG_DEFAULT;
+        } else {
+            prefix = (String)exportConfig;
+        }
+        
         if (activationSpecClass == null) {
             throw new NullPointerException(
                     "Unable to load activationSpec class using the classloader of the ra "
                             + ra.toString());
         }
-        activationSpec = createActivationSpec(sr, activationSpecClass);
+        activationSpec = createActivationSpec(this.sr, activationSpecClass);
 
-        Object msgListener = this.sr.getProperty("service.exported.interface");
+        Object msgListener = this.sr.getProperty(prefix + ".interface");
+        String messageListener = null;
         if (msgListener == null) {
-            throw new NullPointerException("service.exported.interface must be specified so that we know the messaging type");
+            Object clazz = sr.getProperty(Constants.OBJECTCLASS);
+            if (clazz != null) {
+                String[] clazzes = (String[])clazz;
+                messageListener = clazzes[0];
+                System.out.println("**linsun: message listener is " + messageListener);
+            }
+        } else {
+            messageListener = (String)msgListener;
+        }
+        
+        System.out.println("**linsun: message listener is " + messageListener);
+        if (messageListener == null || messageListener.isEmpty()) {
+            throw new NullPointerException("Unable to find the message listener interface.");
         }
         try {
-            this.messageListenerInterface = this.getClass().getClassLoader().loadClass((String)msgListener);
+            this.messageListenerInterface = this.getClass().getClassLoader().loadClass(messageListener);
         } catch (ClassNotFoundException e) {
             LOGGER.error("Unable to load the specified message listener interface " + (String)msgListener , e);
             throw new MDSException(e);
@@ -107,7 +130,7 @@ public class MDSContainerImpl implements
         MessageListener ml = (MessageListener)bc.getService(sr); 
         // create the message endpoint
         // obtain transaction attribute from service property
-        String tranAttr = sr.getProperty("transactionAttribute") == null ? null : (String)sr.getProperty("transactionAttribute");
+        String tranAttr = sr.getProperty(prefix + "." + MDSConstants.TRANSACTION_ATTRIBUTE) == null ? null : (String)sr.getProperty(prefix + "." + MDSConstants.TRANSACTION_ATTRIBUTE);
         
         endpointFactory = new EndpointFactory(this, ml, null, activationSpec, tranAttr, tpf);
 
@@ -148,9 +171,14 @@ public class MDSContainerImpl implements
         String[] propKeys = reference.getPropertyKeys();
         
         for (String propKey : propKeys) {
+            if (propKey.startsWith(prefix + "." + MDSConstants.TRANSACTION_ATTRIBUTE)) {
+                continue;
+            }
             // set method property on activation config prop keys
-            if (propKey.startsWith("ac:")) {
-                objectRecipe.setMethodProperty(propKey.substring(3), sr.getProperty(propKey));
+            if (propKey.startsWith(prefix) && propKey.length() > prefix.length() + 1) {
+                objectRecipe.setMethodProperty(propKey.substring(prefix.length() + 1), sr.getProperty(propKey));
+            } else {
+                // TODO log - ignore processing the property for activation spec
             }
         }
         

Modified: incubator/aries/sandbox/linsun/mds/mds-sample/src/main/resources/OSGI-INF/blueprint/config.xml
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/mds-sample/src/main/resources/OSGI-INF/blueprint/config.xml?rev=964088&r1=964087&r2=964088&view=diff
==============================================================================
--- incubator/aries/sandbox/linsun/mds/mds-sample/src/main/resources/OSGI-INF/blueprint/config.xml (original)
+++ incubator/aries/sandbox/linsun/mds/mds-sample/src/main/resources/OSGI-INF/blueprint/config.xml Wed Jul 14 15:52:27 2010
@@ -25,12 +25,17 @@
     
     <service ref="myMessageDrivenBean" interface="javax.jms.MessageListener">
 		<service-properties>
-		    <!--  add in activation config properties, starts with prefix ac  -->
-			<entry key="ac:destination" value="Hello.Queue" />
-			<entry key="ac:destinationType" value="javax.jms.Queue" />
-			<entry key="transactionAttribute" value="Required" />
-			<entry key="service.pid" value="org.apache.aries.mds.sample.myMessageDrivenBean" />
-			<entry key="service.exported.interface" value="javax.jms.MessageListener" />
+			 <!-- state the type of configuration used for the remote service  -->
+			<entry key="service.exported.configs" value="org.apache.aries.message.driven" />
+            <!-- for the activation config properties add the relevant prefix to the property name -->
+			<entry key="org.apache.aries.message.driven.destinationType" value="javax.jms.Queue" />
+			<entry key="org.apache.aries.message.driven.destination" value="Hello.Queue" />
+			<!-- transaction attribute based on the tx:transaction element in blueprint -->
+            <entry key="org.apache.aries.message.driven.transactionAttribute" value="Required"/>
+			 <!-- assume that the service.pid is the bundle symbolic name followed by the bean id -->
+			<entry key="service.pid" value="org.apache.aries.mds.sample.myMessageDrivenBean" />	
+			<!--  optional, only necessary when the service exposes more than 1 interface -->
+			<!--  <entry key="org.apache.aries.message.driven.interface" value="javax.jms.MessageListener" />-->	
 		</service-properties>
 	</service>