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/21 21:30:04 UTC
svn commit: r966376 - in /incubator/aries/sandbox/linsun/mds: ./
mds-blueprint/src/main/java/org/apache/aries/mds/blueprint/
mds-blueprint/src/test/java/org/apache/aries/mds/blueprint/
mds-blueprint/src/test/resources/org/apache/aries/mds/blueprint/
Author: linsun
Date: Wed Jul 21 19:30:04 2010
New Revision: 966376
URL: http://svn.apache.org/viewvc?rev=966376&view=rev
Log:
[message driven service] add additional testing for service-properties, add transaction support so blueprint transaction can be used to describe transaction of message-driven service
Modified:
incubator/aries/sandbox/linsun/mds/mds-blueprint/src/main/java/org/apache/aries/mds/blueprint/MessageDrivenParser.java
incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/java/org/apache/aries/mds/blueprint/NameSpaceHandlerTest.java
incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/resources/org/apache/aries/mds/blueprint/aries.xml
incubator/aries/sandbox/linsun/mds/pom.xml
Modified: incubator/aries/sandbox/linsun/mds/mds-blueprint/src/main/java/org/apache/aries/mds/blueprint/MessageDrivenParser.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/mds-blueprint/src/main/java/org/apache/aries/mds/blueprint/MessageDrivenParser.java?rev=966376&r1=966375&r2=966376&view=diff
==============================================================================
--- incubator/aries/sandbox/linsun/mds/mds-blueprint/src/main/java/org/apache/aries/mds/blueprint/MessageDrivenParser.java (original)
+++ incubator/aries/sandbox/linsun/mds/mds-blueprint/src/main/java/org/apache/aries/mds/blueprint/MessageDrivenParser.java Wed Jul 21 19:30:04 2010
@@ -45,10 +45,14 @@ public class MessageDrivenParser {
private static final String SERVICE_TAG = "service";
private static final String SERVICE_PROPERTIES_TAG = "service-properties";
private static final String ENTRY_TAG = "entry";
+ private static final String TRANSACTION_TAG = "transaction";
private static final String ID_ATTR = "id";
private static final String INTERFACE_ATTR = "interface";
private static final String REF_ATTR = "ref";
+ private static final String PREFIX = "org.apache.aries.message.driven.";
+ private static final String KEY_ATTR = "key";
+ private static final String VALUE_ATTR = "value";
private static final String ACTIVATION_CONFIG_TAG = "activationConfig";
@@ -93,16 +97,19 @@ public class MessageDrivenParser {
Element element = (Element) current;
if (element.getLocalName().equals(ENTRY_TAG)) {
// create element using blueprint ns and use this instead
- Element entryElement = createElement(serviceElement, element);
+ Element entryElement = createElement(serviceElement, element, PREFIX);
servicepropElement.appendChild(entryElement);
}
}
}
+ } else if (elem.getLocalName().equals(TRANSACTION_TAG)) {
+ Element txElement = createTransactionElement(serviceElement, elem);
+ servicepropElement.appendChild(txElement);
} else {
// when it is not activation config tag, such as argument, etc
- Element element = createElement(beanElement, elem);
+ Element element = createElement(beanElement, elem, null);
beanElement.appendChild(element);
}
@@ -132,20 +139,25 @@ public class MessageDrivenParser {
}
/**
- * this method create an element based onoldElement passed in but using blueprint ns instead of the message-driven ns
+ * this method create an element based on oldElement passed in but using blueprint ns instead of the message-driven ns
*
* @param serviceElement
* @param oldElement
+ * @param prefix - needed for service properties
* @return
*/
- private Element createElement(Element ele, Element oldElement) {
+ private Element createElement(Element ele, Element oldElement, String prefix) {
Element element = ele.getOwnerDocument().createElementNS(BLUEPRINT_NS, oldElement.getLocalName());
NamedNodeMap attrs = oldElement.getAttributes();
for (int i = 0; i < attrs.getLength(); i++) {
Node cur = attrs.item(i);
if (cur.getNodeType() == Node.ATTRIBUTE_NODE) {
Attr a = (Attr) cur;
- element.setAttribute(a.getName(), a.getValue());
+ if (prefix != null && oldElement.getLocalName().equals(ENTRY_TAG) && a.getLocalName().equals(KEY_ATTR)) {
+ element.setAttribute(a.getName(), prefix + a.getValue());
+ } else {
+ element.setAttribute(a.getName(), a.getValue());
+ }
}
}
@@ -153,5 +165,38 @@ public class MessageDrivenParser {
}
-
+ /**
+ * this method create an element based on the old transaction element passed in but using blueprint ns instead of the transaction ns
+ * for example, we want to convert
+ * <tx:transaction method="*" value="Required"/>
+ * to
+ * <entry key="org.apache.aries.message.driven.transactionAttribute" value="Required"/> in service properties
+ *TODO: it doesn't handle method level transaction yet. transaction is decorated on class level.
+ *
+ * @param serviceElement
+ * @param txElement
+ * @return
+ */
+ private Element createTransactionElement(Element ele, Element txElement) {
+ Element element = ele.getOwnerDocument().createElementNS(BLUEPRINT_NS, ENTRY_TAG);
+ NamedNodeMap attrs = txElement.getAttributes();
+ for (int i = 0; i < attrs.getLength(); i++) {
+ Node cur = attrs.item(i);
+ if (cur.getNodeType() == Node.ATTRIBUTE_NODE) {
+ Attr a = (Attr) cur;
+
+ if (a.getName().equals(VALUE_ATTR)) {
+ if (a.getValue().equals("Required") || a.getValue().equals("NotSupported")) {
+ element.setAttribute(KEY_ATTR, PREFIX + "transactionAttribute");
+ element.setAttribute(VALUE_ATTR, a.getValue());
+ break;
+ } else {
+ LOGGER.warn("Unexpected transaction attribute detected - " + a.getValue());
+ }
+ }
+ }
+ }
+
+ return element;
+ }
}
Modified: incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/java/org/apache/aries/mds/blueprint/NameSpaceHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/java/org/apache/aries/mds/blueprint/NameSpaceHandlerTest.java?rev=966376&r1=966375&r2=966376&view=diff
==============================================================================
--- incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/java/org/apache/aries/mds/blueprint/NameSpaceHandlerTest.java (original)
+++ incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/java/org/apache/aries/mds/blueprint/NameSpaceHandlerTest.java Wed Jul 21 19:30:04 2010
@@ -40,6 +40,9 @@ import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.service.blueprint.reflect.BeanMetadata;
+import org.osgi.service.blueprint.reflect.MapEntry;
+import org.osgi.service.blueprint.reflect.ServiceMetadata;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
public class NameSpaceHandlerTest {
@@ -75,7 +78,32 @@ public class NameSpaceHandlerTest {
assertEquals("destory", comp.getDestroyMethod());
assertEquals("singleton", comp.getScope());
+ // we don't know the service id for the message-driven service since it is auto generated by the container
+ Set<String> names = cdr.getComponentDefinitionNames();
+ int verify = 0;
+ for (String name : names) {
+ if (cdr.getComponentDefinition(name) instanceof ServiceMetadata) {
+ ServiceMetadata sm = (ServiceMetadata)cdr.getComponentDefinition(name);
+ List<MapEntry> entries = sm.getServiceProperties();
+ for (MapEntry entry : entries) {
+ if (entry.getKey() instanceof ValueMetadata) {
+ ValueMetadata vmkey = (ValueMetadata)entry.getKey();
+ if (vmkey.getStringValue().equals("org.apache.aries.message.driven.destination")) {
+ ValueMetadata vmvalue = (ValueMetadata)entry.getValue();
+ assertEquals("Hello.Queue", vmvalue.getStringValue());
+ verify++;
+ }
+ if (vmkey.getStringValue().equals("org.apache.aries.message.driven.destinationType")) {
+ ValueMetadata vmvalue = (ValueMetadata)entry.getValue();
+ assertEquals("javax.jms.Queue", vmvalue.getStringValue());
+ verify++;
+ }
+ }
+ }
+ }
+ }
+ assertEquals(2, verify);
Modified: incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/resources/org/apache/aries/mds/blueprint/aries.xml
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/resources/org/apache/aries/mds/blueprint/aries.xml?rev=966376&r1=966375&r2=966376&view=diff
==============================================================================
--- incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/resources/org/apache/aries/mds/blueprint/aries.xml (original)
+++ incubator/aries/sandbox/linsun/mds/mds-blueprint/src/test/resources/org/apache/aries/mds/blueprint/aries.xml Wed Jul 21 19:30:04 2010
@@ -20,11 +20,12 @@
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0"
- xmlns:md="http://aries.apache.org/xmlns/messagedriven"
+ xmlns:md="http://aries.apache.org/xmlns/messagedriven"
default-activation="lazy">
<md:message-driven id="myMessageDrivenBean" class="org.apache.aries.mds.sample.MyMessageDrivenBean" destroy-method="destory"
scope="singleton" interface="javax.jms.MessageListener">
+ <!-- <tx:transaction method="*" value="Required"/> -->
<md:activationConfig>
<md:entry key="destination" value="Hello.Queue" />
<md:entry key="destinationType" value="javax.jms.Queue" />
Modified: incubator/aries/sandbox/linsun/mds/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/linsun/mds/pom.xml?rev=966376&r1=966375&r2=966376&view=diff
==============================================================================
--- incubator/aries/sandbox/linsun/mds/pom.xml (original)
+++ incubator/aries/sandbox/linsun/mds/pom.xml Wed Jul 21 19:30:04 2010
@@ -358,6 +358,7 @@
<module>mds-ra</module>
<module>mds-impl</module>
<module>mds-ra-activemq</module>
+ <module>mds-blueprint</module>
<module>mds-sample</module>
<module>mds-itest</module>
</modules>