You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ge...@apache.org on 2008/09/10 11:32:49 UTC

svn commit: r693755 - in /servicemix/sandbox/gertv/smx-sling: ./ servicemix-audit-jcr/ servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/ servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/ servicemix-sl...

Author: gertv
Date: Wed Sep 10 02:32:47 2008
New Revision: 693755

URL: http://svn.apache.org/viewvc?rev=693755&view=rev
Log:
Applying patches -- with thanks to Vladislav

Added:
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AuditorMarshaler.java
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/EntireMarshaler.java
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/HeaderMetadataMarshaler.java
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/OwnMessageExchangeImpl.java
Modified:
    servicemix/sandbox/gertv/smx-sling/pom.xml
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/pom.xml
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AsynchronousAbstractAuditor.java
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/JcrAuditor.java
    servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/SlingJcrAuditorStrategy.java
    servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/html.esp
    servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/tr.esp
    servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flow/tr.esp
    servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/html.esp
    servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/tr.esp

Modified: servicemix/sandbox/gertv/smx-sling/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/pom.xml?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/pom.xml (original)
+++ servicemix/sandbox/gertv/smx-sling/pom.xml Wed Sep 10 02:32:47 2008
@@ -21,6 +21,7 @@
     <servicemix-version>3.3-SNAPSHOT</servicemix-version>
     <sling-version>2.0.2-incubator</sling-version>
     <spring-version>2.5.5</spring-version>
+    <slf4j-version>1.5.0</slf4j-version>
   </properties>
   <repositories>
     <repository>

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/pom.xml?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/pom.xml (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/pom.xml Wed Sep 10 02:32:47 2008
@@ -26,6 +26,21 @@
             <artifactId>spring-jms</artifactId>
             <version>${spring-version}</version>
     </dependency>
+	<dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>${slf4j-version}</version>
+    </dependency>
+	<dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <version>${slf4j-version}</version>
+    </dependency>
+    <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jms</artifactId>
+            <version>${spring-version}</version>
+    </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.jcr.jackrabbit.client</artifactId>

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AsynchronousAbstractAuditor.java
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AsynchronousAbstractAuditor.java?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AsynchronousAbstractAuditor.java (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AsynchronousAbstractAuditor.java Wed Sep 10 02:32:47 2008
@@ -1,250 +1,252 @@
-package org.apache.servicemix.audit.jcr;
-
-import java.net.URISyntaxException;
-
-import javax.jbi.JBIException;
-import javax.jbi.messaging.MessageExchange;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.ObjectMessage;
-import javax.jms.Session;
-
-import org.apache.activemq.ActiveMQConnection;
-import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.servicemix.jbi.audit.AbstractAuditor;
-import org.apache.servicemix.jbi.event.ExchangeEvent;
-import org.apache.servicemix.jbi.messaging.MessageExchangeImpl;
-import org.springframework.jms.core.JmsTemplate;
-import org.springframework.jms.listener.DefaultMessageListenerContainer;
-
-
-/**
- * 
- * Abstract class for take care of all the serialization and multi-threading
- * stuff
- * 
- * @author vkrejcirik
- * 
- * 
- */
-public abstract class AsynchronousAbstractAuditor extends AbstractAuditor {
-
-    private static final Log LOG = LogFactory
-            .getLog(AsynchronousAbstractAuditor.class);
-
-    private Session acceptedSession;
-    private Session sentSession;
-
-    private ActiveMQConnection connection;
-
-    private Destination acceptedDestination;
-    private Destination sentDestination;
-
-    private ExchangeAcceptedProducer acceptedProducer;
-    private ExchangeSentProducer sentProducer;
-
-    private AcceptedListener acceptedListener;
-    private SentListener sentListener;
-    private ExceptionListener exceptionListener;
-    
-    private JmsTemplate acceptedJmsTemplate;
-    private JmsTemplate sentJmsTemplate;
-    
-    private DefaultMessageListenerContainer sentListenerContainer;
-    private DefaultMessageListenerContainer acceptedListenerContainer;
-
-    public void doStart() throws JBIException {
-
-        try {
-            connection = ActiveMQConnection
-                    .makeConnection("tcp://localhost:61616");
-            //connection.start();
-            
-            acceptedSession = connection.createSession(false,
-                    Session.AUTO_ACKNOWLEDGE);
-
-            sentSession = connection.createSession(false,
-                    Session.AUTO_ACKNOWLEDGE);
-            
-            acceptedDestination = acceptedSession
-                    .createQueue("messages.accepted");
-            
-            sentDestination = sentSession.createQueue("messages.sent");
-
-        } catch (URISyntaxException e) {
-            throw new JBIException("URI syntax is wrong", e);
-        } catch (JMSException e1) {
-            throw new JBIException(
-                    "Error while creating queue for exchange", e1);
-        }
-
-        sentListenerContainer = new DefaultMessageListenerContainer();
-        acceptedListenerContainer = new DefaultMessageListenerContainer();
-
-        ActiveMQConnectionFactory sentConnectionFactory = new ActiveMQConnectionFactory();
-        sentConnectionFactory.setBrokerURL("tcp://localhost:61616");
-
-        ActiveMQConnectionFactory acceptedConnectionFactory = new ActiveMQConnectionFactory();
-        acceptedConnectionFactory.setBrokerURL("tcp://localhost:61616");
-        
-        sentListenerContainer.setConnectionFactory(sentConnectionFactory);
-        acceptedListenerContainer.setConnectionFactory(acceptedConnectionFactory);
-        
-        sentListenerContainer.setConcurrentConsumers(5);
-        acceptedListenerContainer.setConcurrentConsumers(5);
-        
-        sentListenerContainer.setDestination(sentDestination);
-        acceptedListenerContainer.setDestination(acceptedDestination);
-        
-        sentListener = new SentListener();
-        acceptedListener = new AcceptedListener();
-        
-        acceptedJmsTemplate = new JmsTemplate();
-        sentJmsTemplate = new JmsTemplate();
-        
-        acceptedJmsTemplate.setConnectionFactory(acceptedConnectionFactory);
-        acceptedJmsTemplate.setDefaultDestination(acceptedDestination);
-        
-        sentJmsTemplate.setConnectionFactory(sentConnectionFactory);
-        sentJmsTemplate.setDefaultDestination(sentDestination);
-        
-        sentProducer = new ExchangeSentProducer(sentJmsTemplate);
-        acceptedProducer = new ExchangeAcceptedProducer(acceptedJmsTemplate);
-        
-        sentListenerContainer.setMessageListener(sentListener);
-        acceptedListenerContainer.setMessageListener(acceptedListener);
-      
-        //exceptionListener = new ExceptionListener();
-        
-        sentListenerContainer.setExceptionListener(exceptionListener);
-        
-        sentListenerContainer.setAutoStartup(true);
-        sentListenerContainer.afterPropertiesSet();
-        
-        acceptedListenerContainer.setAutoStartup(true);
-        acceptedListenerContainer.afterPropertiesSet();
-        
-        try {
-            connection.start();
-        } catch (JMSException e) {
-            e.printStackTrace();
-        }
-        
-        super.doStart();
-    }
-
-    @Override
-    protected void doStop() throws JBIException {
-
-        try {
-            
-            sentListenerContainer.stop();
-            sentListenerContainer.shutdown();
-            acceptedListenerContainer.stop();
-            acceptedListenerContainer.shutdown();
-            
-            acceptedSession.close();
-            sentSession.close();
-            connection.close();
-
-        } catch (JMSException e) {
-            throw new JBIException("Close session or connection failed", e);
-        }
-
-        
-        super.doStop();
-    }
-
-    public void exchangeSent(ExchangeEvent event) {
-
-        MessageExchange messageExchange = event.getExchange();
-        ObjectMessage objectExchange = null;
-
-        try {
-            objectExchange = sentSession
-                    .createObjectMessage((MessageExchangeImpl) messageExchange);
-            sentProducer.sendMessage(objectExchange);
-
-        } catch (JMSException e) {
-            LOG.error("Error while serializing sent message exchange.");
-        }
-
-    }
-
-    public void exchangeAccepted(ExchangeEvent event) {
-
-        MessageExchange messageExchange = event.getExchange();
-        ObjectMessage objectExchange = null;
-
-        try {
-            objectExchange = acceptedSession
-                    .createObjectMessage((MessageExchangeImpl) messageExchange);
-            acceptedProducer.sendMessage(objectExchange);
-
-        } catch (JMSException e) {
-            LOG.error("Error while serializing accepted message exchange.");
-        }
-
-        super.exchangeAccepted(event);
-    }
-
-    public abstract void onExchangeSent(MessageExchange exchange);
-
-    public abstract void onExchangeAccepted(MessageExchange exchange);
-
-    public class SentListener implements MessageListener {
-
-        public void onMessage(Message message) {
-
-            if (message instanceof ObjectMessage) {
-
-                try {
-                    LOG.debug("receive message");
-                    ObjectMessage m = (ObjectMessage) message;
-                    MessageExchange exchange = (MessageExchange) m.getObject();
-                    
-                    //System.out.println(exchange);
-                    
-                    onExchangeSent(exchange);
-
-                } catch (JMSException e) {
-                    LOG.error("Error while receiving message.");
-                }
-            } else {
-                throw new IllegalArgumentException(
-                        "Message must be of type ObjectMessage");
-            }
-        }
-    }
-
-    public class AcceptedListener implements MessageListener {
-
-        public void onMessage(Message message) {
-
-            if (message instanceof ObjectMessage) {
-
-                try {
-                    LOG.debug("receive message");
-                    ObjectMessage m = (ObjectMessage) message;
-                    MessageExchange exchange = (MessageExchange) m.getObject();
-                    
-                    //System.out.println(exchange);
-                    
-                    onExchangeAccepted(exchange);
-
-                } catch (JMSException e) {
-                    LOG.error("Error while receiving message.");
-                }
-            } else {
-                throw new IllegalArgumentException(
-                        "Message must be of type ObjectMessage");
-            }
-        }
-    }
-
-}
+package org.apache.servicemix.audit.jcr;
+
+import java.net.URISyntaxException;
+
+import javax.jbi.JBIException;
+import javax.jbi.messaging.MessageExchange;
+import javax.jcr.LoginException;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+
+import org.apache.activemq.ActiveMQConnection;
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.jbi.audit.AbstractAuditor;
+import org.apache.servicemix.jbi.event.ExchangeEvent;
+import org.springframework.jms.core.JmsTemplate;
+import org.springframework.jms.listener.DefaultMessageListenerContainer;
+
+/**
+ * 
+ * Abstract class for take care of all the serialization and multi-threading
+ * stuff
+ * 
+ * @author vkrejcirik
+ * 
+ * 
+ */
+public abstract class AsynchronousAbstractAuditor extends AbstractAuditor {
+
+    private static final Log LOG = LogFactory
+            .getLog(AsynchronousAbstractAuditor.class);
+
+    private Session acceptedSession;
+    private Session sentSession;
+
+    private ActiveMQConnection connection;
+
+    private Destination acceptedDestination;
+    private Destination sentDestination;
+
+    private ExchangeAcceptedProducer acceptedProducer;
+    private ExchangeSentProducer sentProducer;
+
+    private AcceptedListener acceptedListener;
+    private SentListener sentListener;
+    private ExceptionListener exceptionListener;
+
+    private JmsTemplate acceptedJmsTemplate;
+    private JmsTemplate sentJmsTemplate;
+
+    private DefaultMessageListenerContainer sentListenerContainer;
+    private DefaultMessageListenerContainer acceptedListenerContainer;
+
+    protected AuditorMarshaler marshaler;
+
+    public void doStart() throws JBIException {
+
+        try {
+            connection = ActiveMQConnection
+                    .makeConnection("tcp://localhost:61616");
+
+            acceptedSession = connection.createSession(false,
+                    Session.AUTO_ACKNOWLEDGE);
+
+            sentSession = connection.createSession(false,
+                    Session.AUTO_ACKNOWLEDGE);
+
+            acceptedDestination = acceptedSession
+                    .createQueue("messages.accepted");
+
+            sentDestination = sentSession.createQueue("messages.sent");
+
+        } catch (URISyntaxException e) {
+            throw new JBIException("URI syntax is wrong", e);
+        } catch (JMSException e1) {
+            throw new JBIException("Error while creating queue for exchange",
+                    e1);
+        }
+
+        sentListenerContainer = new DefaultMessageListenerContainer();
+        acceptedListenerContainer = new DefaultMessageListenerContainer();
+
+        ActiveMQConnectionFactory sentConnectionFactory = new ActiveMQConnectionFactory();
+        sentConnectionFactory.setBrokerURL("tcp://localhost:61616");
+
+        ActiveMQConnectionFactory acceptedConnectionFactory = new ActiveMQConnectionFactory();
+        acceptedConnectionFactory.setBrokerURL("tcp://localhost:61616");
+
+        sentListenerContainer.setConnectionFactory(sentConnectionFactory);
+        acceptedListenerContainer
+                .setConnectionFactory(acceptedConnectionFactory);
+
+        sentListenerContainer.setConcurrentConsumers(1);
+        acceptedListenerContainer.setConcurrentConsumers(1);
+
+        sentListenerContainer.setDestination(sentDestination);
+        acceptedListenerContainer.setDestination(acceptedDestination);
+
+        sentListener = new SentListener();
+        acceptedListener = new AcceptedListener();
+
+        acceptedJmsTemplate = new JmsTemplate();
+        sentJmsTemplate = new JmsTemplate();
+
+        acceptedJmsTemplate.setConnectionFactory(acceptedConnectionFactory);
+        acceptedJmsTemplate.setDefaultDestination(acceptedDestination);
+
+        sentJmsTemplate.setConnectionFactory(sentConnectionFactory);
+        sentJmsTemplate.setDefaultDestination(sentDestination);
+
+        sentProducer = new ExchangeSentProducer(sentJmsTemplate);
+        acceptedProducer = new ExchangeAcceptedProducer(acceptedJmsTemplate);
+
+        sentListenerContainer.setMessageListener(sentListener);
+        acceptedListenerContainer.setMessageListener(acceptedListener);
+
+        sentListenerContainer.setExceptionListener(exceptionListener);
+
+        sentListenerContainer.setAutoStartup(true);
+        sentListenerContainer.afterPropertiesSet();
+
+        acceptedListenerContainer.setAutoStartup(true);
+        acceptedListenerContainer.afterPropertiesSet();
+
+        try {
+            connection.start();
+        } catch (JMSException e) {
+            e.printStackTrace();
+        }
+
+        super.doStart();
+    }
+
+    @Override
+    protected void doStop() throws JBIException {
+
+        try {
+
+            sentListenerContainer.stop();
+            sentListenerContainer.shutdown();
+            acceptedListenerContainer.stop();
+            acceptedListenerContainer.shutdown();
+
+            acceptedSession.close();
+            sentSession.close();
+            connection.close();
+
+        } catch (JMSException e) {
+            throw new JBIException("Close session or connection failed", e);
+        }
+
+        super.doStop();
+    }
+
+    public void exchangeSent(ExchangeEvent event) {
+
+        MessageExchange messageExchange = event.getExchange();
+        ObjectMessage objectExchange = null;
+
+        objectExchange = marshaler.marschal(messageExchange, sentSession);
+        sentProducer.sendMessage(objectExchange);
+
+    }
+
+    public void exchangeAccepted(ExchangeEvent event) {
+
+        MessageExchange messageExchange = event.getExchange();
+        ObjectMessage objectExchange = null;
+
+        objectExchange = marshaler.marschal(messageExchange, acceptedSession);
+        acceptedProducer.sendMessage(objectExchange);
+
+        super.exchangeAccepted(event);
+    }
+
+    public abstract void onExchangeSent(MessageExchange exchange);
+
+    public abstract void onExchangeAccepted(MessageExchange exchange);
+
+    protected AuditorMarshaler getMarshaler() throws PathNotFoundException,
+            LoginException, RepositoryException {
+        return null;
+
+    }
+
+    public class SentListener implements MessageListener {
+
+        public void onMessage(Message message) {
+
+            if (message instanceof ObjectMessage) {
+
+                LOG.debug("receive message");
+                ObjectMessage m = (ObjectMessage) message;
+
+                MessageExchange exchange = marshaler.unmarshal(m);
+                onExchangeSent(exchange);
+
+            } else {
+                throw new IllegalArgumentException(
+                        "Message must be of type ObjectMessage");
+            }
+        }
+    }
+
+    public class AcceptedListener implements MessageListener {
+
+        public void onMessage(Message message) {
+
+            if (message instanceof ObjectMessage) {
+
+                LOG.debug("receive message");
+                ObjectMessage m = (ObjectMessage) message;
+
+                MessageExchange exchange = marshaler.unmarshal(m);
+                onExchangeAccepted(exchange);
+
+            } else {
+                throw new IllegalArgumentException(
+                        "Message must be of type ObjectMessage");
+            }
+        }
+    }
+
+    public class ConfigEventListener implements EventListener {
+
+        public void onEvent(EventIterator event) {
+
+            LOG.debug("event!");
+
+            try {
+                marshaler = getMarshaler();
+
+            } catch (PathNotFoundException e) {
+                e.printStackTrace();
+            } catch (LoginException e) {
+                e.printStackTrace();
+            } catch (RepositoryException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

Added: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AuditorMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AuditorMarshaler.java?rev=693755&view=auto
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AuditorMarshaler.java (added)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/AuditorMarshaler.java Wed Sep 10 02:32:47 2008
@@ -0,0 +1,19 @@
+package org.apache.servicemix.audit.jcr;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+
+/**
+ * 
+ * 
+ * 
+ * @author vkrejcirik
+ *
+ */
+public interface AuditorMarshaler {
+
+    public ObjectMessage marschal(MessageExchange exchange, Session session);
+    public MessageExchange unmarshal(ObjectMessage message);
+    
+}

Added: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/EntireMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/EntireMarshaler.java?rev=693755&view=auto
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/EntireMarshaler.java (added)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/EntireMarshaler.java Wed Sep 10 02:32:47 2008
@@ -0,0 +1,51 @@
+package org.apache.servicemix.audit.jcr;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jms.JMSException;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.jbi.messaging.MessageExchangeImpl;
+
+/**
+ * 
+ * Marshaler for whole message exchange
+ * 
+ * @author vkrejcirik
+ * 
+ */
+public class EntireMarshaler implements AuditorMarshaler {
+
+    private static final Log LOG = LogFactory.getLog(EntireMarshaler.class);
+
+    public ObjectMessage marschal(MessageExchange exchange, Session session) {
+
+        ObjectMessage message = null;
+
+        try {
+            message = session
+                    .createObjectMessage((MessageExchangeImpl) exchange);
+
+        } catch (JMSException e) {
+            LOG.error("Error while serializing message exchange.");
+        }
+
+        return message;
+    }
+
+    public MessageExchange unmarshal(ObjectMessage message) {
+
+        MessageExchange exchange = null;
+
+        try {
+            exchange = (MessageExchange) message.getObject();
+        } catch (JMSException e) {
+            LOG.error("Error while deserializing object message.");
+        }
+
+        return exchange;
+    }
+
+}

Added: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/HeaderMetadataMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/HeaderMetadataMarshaler.java?rev=693755&view=auto
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/HeaderMetadataMarshaler.java (added)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/HeaderMetadataMarshaler.java Wed Sep 10 02:32:47 2008
@@ -0,0 +1,69 @@
+package org.apache.servicemix.audit.jcr;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jms.JMSException;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.jbi.messaging.MessageExchangeImpl;
+
+/**
+ * 
+ * Marshaler for header and metadata from message exchange
+ * 
+ * @author vkrejcirik
+ * 
+ */
+public class HeaderMetadataMarshaler implements AuditorMarshaler {
+
+    private static final Log LOG = LogFactory
+            .getLog(HeaderMetadataMarshaler.class);
+
+    public ObjectMessage marschal(MessageExchange exchange, Session session) {
+
+        ObjectMessage message = null;
+        OwnMessageExchangeImpl exchangeImpl = new OwnMessageExchangeImpl();
+
+        // TODO: naplnit exchangeImpl
+
+        try {
+            message = session.createObjectMessage(exchangeImpl);
+
+        } catch (JMSException e) {
+            LOG.error("Error while serializing message exchange.");
+        }
+
+        return message;
+    }
+
+    public MessageExchange unmarshal(ObjectMessage message) {
+
+        MessageExchange exchange = new MessageExchangeImpl(){
+        
+            @Override
+            public void readExternal(ObjectInput arg0) throws IOException,
+                    ClassNotFoundException {
+                
+            }
+        };
+        
+        
+        OwnMessageExchangeImpl exchangeImpl = null;
+
+        try {
+            exchangeImpl = (OwnMessageExchangeImpl) message.getObject();
+        } catch (JMSException e) {
+            LOG.error("Error while deserializing object message.");
+        }
+
+        // TODO: naplnit exchange
+
+        return exchange;
+    }
+
+}

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/JcrAuditor.java
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/JcrAuditor.java?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/JcrAuditor.java (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/JcrAuditor.java Wed Sep 10 02:32:47 2008
@@ -3,10 +3,14 @@
 import javax.jbi.JBIException;
 import javax.jbi.messaging.MessageExchange;
 import javax.jcr.LoginException;
+import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.ObservationManager;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -26,6 +30,9 @@
     private Repository repository;
     private ThreadLocal<Session> session = new ThreadLocal<Session>();
     private JcrAuditorStrategy strategy;
+    private ConfigEventListener eventListener = new ConfigEventListener();
+
+    public static final String CONFIG_TYPE = "content/servicemix/config";
 
     @Override
     public void doStart() throws JBIException {
@@ -37,10 +44,35 @@
             throw new JBIException(
                     "No JcrAuditorStrategy configure, unable to start JCR auditor");
         }
+
+        try {
+            marshaler = getMarshaler();
+        } catch (LoginException e) {
+            throw new JBIException(
+                    "Login exception, unable to get Auditor Marshaler", e);
+        } catch (RepositoryException e1) {
+            throw new JBIException(
+                    "Repository exception, unable to get Auditor Marshaler", e1);
+        }
+
+        try {
+           ObservationManager observationManager = getSession().getWorkspace().getObservationManager();
+           
+           observationManager.addEventListener(
+                    eventListener, Event.PROPERTY_CHANGED,
+                    CONFIG_TYPE, false, null, null, false);
+            
+        } catch (UnsupportedRepositoryOperationException e) {
+            throw new JBIException(
+                    "Unsupported repository operation exception, unable to add Event Listener", e);
+        } catch (RepositoryException e1) {
+            throw new JBIException(
+                    "Repository exception, unable to add Event Listener", e1);
+        }
+
         super.doStart();
     }
 
-    
     protected Session getSession() throws LoginException, RepositoryException {
         if (session.get() == null) {
             Session session = repository.login(new SimpleCredentials("admin",
@@ -57,8 +89,7 @@
             getSession().save();
 
             LOG.info("Successfully stored information about message exchange "
-                    + exchange.getExchangeId()
-                    + " in the JCR repository");
+                    + exchange.getExchangeId() + " in the JCR repository");
         } catch (Exception e) {
             LOG.error("Unable to store information about message exchange "
                     + exchange.getExchangeId(), e);
@@ -70,6 +101,31 @@
 
     }
 
+    @Override
+    protected AuditorMarshaler getMarshaler() throws LoginException,
+            RepositoryException {
+
+        AuditorMarshaler marshaler = null;
+        Node config = getSession().getRootNode().getNode(CONFIG_TYPE);
+        String mar = null;
+
+        try {
+                       
+            mar = config.getProperty("marshaler").getValue().getString();
+        } catch (RepositoryException e) {
+
+            config.setProperty("marshaler", "EntireMarshaler");
+            mar = "EntireMarshaler";
+        }
+
+        if (mar.equals("EntireMarshaler"))
+            marshaler = new EntireMarshaler();
+        else if (mar.equals("HeaderMetadataMarshaler"))
+            marshaler = new HeaderMetadataMarshaler();
+
+        return marshaler;
+    }
+
     public String getDescription() {
         return "ServiceMix JCR Auditor";
     }

Added: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/OwnMessageExchangeImpl.java
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/OwnMessageExchangeImpl.java?rev=693755&view=auto
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/OwnMessageExchangeImpl.java (added)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/OwnMessageExchangeImpl.java Wed Sep 10 02:32:47 2008
@@ -0,0 +1,22 @@
+package org.apache.servicemix.audit.jcr;
+
+import java.io.Serializable;
+
+
+/**
+ * 
+ * Simple MessageExchange implementation for holding values for audit
+ * 
+ * @author vkrejcirik
+ *
+ */
+public class OwnMessageExchangeImpl implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    public OwnMessageExchangeImpl() {
+       
+    }
+    
+    
+}

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/SlingJcrAuditorStrategy.java
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/SlingJcrAuditorStrategy.java?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/SlingJcrAuditorStrategy.java (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-audit-jcr/src/main/java/org/apache/servicemix/audit/jcr/SlingJcrAuditorStrategy.java Wed Sep 10 02:32:47 2008
@@ -3,7 +3,7 @@
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.GregorianCalendar;
+import java.util.GregorianCalendar;
 import java.util.Locale;
 
 import javax.jbi.messaging.MessageExchange;
@@ -24,6 +24,7 @@
 import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 import org.apache.servicemix.jbi.util.MessageUtil;
 
+
 /**
  * 
  * Class for processing message exchange based on correlation id
@@ -31,272 +32,276 @@
  * @author vkrejcirik
  * 
  */
-public class SlingJcrAuditorStrategy implements JcrAuditorStrategy {
-  
-     public static final String RESOURCE_TYPE = "sling:resourceType";
-  
-     // esp files for rendering
-     public static final String EXCHANGES_RESOURCE_TYPE = "servicemix/exchanges";
-     public static final String EXCHANGE_RESOURCE_TYPE = "servicemix/exchange";
-     public static final String MESSAGE_FLOW_RESOURCE_TYPE = "servicemix/message_flow";
-     public static final String NORMALIZED_MESSAGE_RESOURCE_TYPE = "servicemix/normalizedmessage";
-  
-     // content
-     public static final String CONTENT_MESSAGE_FLOWS_TYPE = "content/servicemix/message_flows";
-     public static final String CONTENT_EXCHANGES_TYPE = "content/servicemix/exchanges";
-  
-     private static final SourceTransformer TRANSFORMER = new SourceTransformer();
-  
-     // let's time slice our message exchange archive on an hourly basis
-     private static final DateFormat FORMAT = new SimpleDateFormat("yyyyMMddhha", Locale.ENGLISH);
-  
-     public void processExchange(MessageExchange messageExchange, Session session)
-             throws ItemExistsException, PathNotFoundException,
-             VersionException, ConstraintViolationException, LockException,
-             RepositoryException, MessagingException, TransformerException {
-  
-         Node node = getNodeForExchange(messageExchange, session);
-  
-         node.setProperty("ExchangeStatus", messageExchange.getStatus().toString());
-         node.setProperty("Pattern", messageExchange.getPattern().toString());
-  
-         if (messageExchange.getEndpoint() != null) {
-             node.setProperty("Endpoint", messageExchange.getEndpoint().getEndpointName());
-         }
-  
-         if (messageExchange.getService() != null) {
-             node.setProperty("Service", messageExchange.getService().toString());
-         }
-  
-         for (Object key : messageExchange.getPropertyNames()) {
-             String name = (String) key;
-             node.setProperty(name, messageExchange.getProperty(name).toString());
-         }
- 
-         addNormalizedMessages(node, messageExchange);
-         node.setProperty("Updated", new DateValue(new GregorianCalendar()));
- 
-     }
-  
-     /**
-      * 
-      * 
-      * 
-      * @param exchange
-      * @param session
-      * @return Node
-      * @throws ItemExistsException
-      * @throws PathNotFoundException
-      * @throws VersionException
-      * @throws ConstraintViolationException
-      * @throws LockException
-      * @throws RepositoryException
-      */
-     private Node getNodeForExchange(MessageExchange exchange, Session session)
-             throws ItemExistsException, PathNotFoundException,
-             VersionException, ConstraintViolationException, LockException,
-             RepositoryException {
-  
-         String id = exchange.getExchangeId().replaceAll(":", "_");
-         String corr_id = exchange.getProperty(
-                 "org.apache.servicemix.correlationId").toString().replaceAll(
-                 ":", "_");
-  
-         // node with date
-         // Node parent = getExchangeBaseNode(session);
-         Node parent = getMessageFlowBaseNode(session);
-  
-         // node with correlation id
-         Node parent_corr = getCorrelationIdNode(parent, corr_id, id);
-  
-         try {
-             return parent_corr.getNode(id);
-  
-         } catch (PathNotFoundException e) {
-             Node node = parent_corr.addNode(id);
-             node.setProperty(RESOURCE_TYPE, EXCHANGE_RESOURCE_TYPE);
-  
-             node.setProperty("Created", new DateValue(new GregorianCalendar()));
-  
-             node.addMixin("mix:versionable");
-             return node;
-         }
-     }
-  
-     /**
-      * 
-      * 
-      * 
-      * @param parent
-      * @param corr_id
-      * @param id
-      * @return Node
-      * @throws RepositoryException
-      * @throws ValueFormatException
-      * @throws VersionException
-      * @throws LockException
-      * @throws ConstraintViolationException
-      */
-     private synchronized Node getCorrelationIdNode(Node parent, String corr_id,
-             String id) throws RepositoryException, ValueFormatException,
-             VersionException, LockException, ConstraintViolationException {
-  
-         // first exchange of the flow
-         if (corr_id == null) {
-             Node node = parent.addNode(id);
-             node.setProperty(RESOURCE_TYPE, MESSAGE_FLOW_RESOURCE_TYPE);
-  
-             node.setProperty("Created", new DateValue(new GregorianCalendar()));
-             node.setProperty("CorrelationId", id);
-             return node;
-         }
-  
-         try {
-             return parent.getNode(corr_id);
-  
-         } catch (PathNotFoundException e) {
-  
-             Node node = parent.addNode(corr_id);
-             node.setProperty(RESOURCE_TYPE, MESSAGE_FLOW_RESOURCE_TYPE);
-  
-             node.setProperty("Created", new DateValue(new GregorianCalendar()));
-             node.setProperty("CorrelationId", corr_id);
-  
-             return node;
-         }
-     }
- 
-     /**
-      * 
-      * Get base node for message flow
-      * 
-      * @param session
-      * @return Node
-      * @throws RepositoryException
-      */
-     private Node getMessageFlowBaseNode(Session session)
-             throws RepositoryException {
-         Node exchanges = session.getRootNode().getNode(
-                 CONTENT_MESSAGE_FLOWS_TYPE);
-
-         return createOrGet(exchanges, FORMAT.format(new Date()));
-     }
-
-     /*
-      * private Node getExchangeBaseNode(Session session) throws
-      * RepositoryException { Node exchanges =
-      * session.getRootNode().getNode(CONTENT_EXCHANGES_TYPE);
-      * 
-      * return createOrGet(exchanges, FORMAT.format(new Date())); }
-      */
-
-     /**
-      * 
-      * Create or get node with the path
-      * 
-      * @param exchanges
-      * @param path
-      * @return Node
-      * @throws ValueFormatException
-      * @throws VersionException
-      * @throws LockException
-      * @throws ConstraintViolationException
-      * @throws RepositoryException
-      */
-     private synchronized Node createOrGet(Node exchanges, String path)
-             throws ValueFormatException, VersionException, LockException,
-             ConstraintViolationException, RepositoryException {
-         try {
-             return exchanges.getNode(path);
- 
-         } catch (PathNotFoundException e) {
-             Node node = exchanges.addNode(path);
-             node.setProperty(RESOURCE_TYPE, EXCHANGES_RESOURCE_TYPE);
-
-             node.setProperty("Created", new DateValue(new GregorianCalendar()));
-             return node;
-         }
-     }
-
-     /**
-      * 
-      * 
-      * 
-      * @param node
-      * @param exchange
-      * @throws ItemExistsException
-      * @throws PathNotFoundException
-      * @throws VersionException
-      * @throws ConstraintViolationException
-      * @throws LockException
-      * @throws MessagingException
-      * @throws RepositoryException
-      * @throws TransformerException
-      */
-     private void addNormalizedMessages(Node node, MessageExchange exchange)
-             throws ItemExistsException, PathNotFoundException,
-             VersionException, ConstraintViolationException, LockException,
-             MessagingException, RepositoryException, TransformerException {
-         if (exchange.getMessage("in") != null) {
-             addNormalizedMessages(node, "In", exchange.getMessage("in"));
-         }
-         if (exchange.getMessage("out") != null) {
-             addNormalizedMessages(node, "Out", exchange.getMessage("out"));
-         }
-         if (exchange.getMessage("fault") != null) {
-             addNormalizedMessages(node, "Fault", exchange.getMessage("fault"));
-         }
-     }
- 
-     /**
-      * 
-      * 
-      * 
-      * @param parent
-      * @param type
-      * @param message
-      * @throws ItemExistsException
-      * @throws PathNotFoundException
-      * @throws VersionException
-      * @throws ConstraintViolationException
-      * @throws LockException
-      * @throws RepositoryException
-      * @throws MessagingException
-      * @throws TransformerException
-      */
-     private void addNormalizedMessages(Node parent, String type,
-             NormalizedMessage message) throws ItemExistsException,
-             PathNotFoundException, VersionException,
-             ConstraintViolationException, LockException, RepositoryException,
-             MessagingException, TransformerException {
-         if (message != null) {
-             Node node;
-             try {
-                 node = parent.getNode(type);
-             } catch (PathNotFoundException e) {
-                 node = parent.addNode(type);
-             }
-             node.setProperty("Content", getNormalizedMessageContent(message));
-             for (Object key : message.getPropertyNames()) {
-                 String name = (String) key;
-                 node.setProperty(name, message.getProperty(name).toString());
-             }
-             node.setProperty(RESOURCE_TYPE, NORMALIZED_MESSAGE_RESOURCE_TYPE);
-         }
-     }
-
-     /**
-      * 
-      * 
-      * 
-      * @param message
-      * @return String
-      * @throws MessagingException
-      * @throws TransformerException
-      */
-     private String getNormalizedMessageContent(NormalizedMessage message)
-             throws MessagingException, TransformerException {
-         MessageUtil.enableContentRereadability(message);
-         return TRANSFORMER.toString(message.getContent());
-     }
-}
+public class SlingJcrAuditorStrategy implements JcrAuditorStrategy {
+
+    public static final String RESOURCE_TYPE = "sling:resourceType";
+
+    // esp files for rendering
+    public static final String EXCHANGES_RESOURCE_TYPE = "servicemix/exchanges";
+    public static final String EXCHANGE_RESOURCE_TYPE = "servicemix/exchange";
+    public static final String MESSAGE_FLOW_RESOURCE_TYPE = "servicemix/message_flow";
+    public static final String NORMALIZED_MESSAGE_RESOURCE_TYPE = "servicemix/normalizedmessage";
+
+    // content
+    public static final String CONTENT_MESSAGE_FLOWS_TYPE = "content/servicemix/message_flows";
+    public static final String CONTENT_EXCHANGES_TYPE = "content/servicemix/exchanges";
+
+    private static final SourceTransformer TRANSFORMER = new SourceTransformer();
+
+    // let's time slice our message exchange archive on an hourly basis
+    private static final DateFormat FORMAT = new SimpleDateFormat(
+            "yyyyMMddhha", Locale.ENGLISH);
+
+    public void processExchange(MessageExchange messageExchange, Session session)
+            throws ItemExistsException, PathNotFoundException,
+            VersionException, ConstraintViolationException, LockException,
+            RepositoryException, MessagingException, TransformerException {
+
+        Node node = getNodeForExchange(messageExchange, session);
+
+        node.setProperty("ExchangeStatus", messageExchange.getStatus()
+                .toString());
+        node.setProperty("Pattern", messageExchange.getPattern().toString());
+
+        if (messageExchange.getEndpoint() != null) {
+            node.setProperty("Endpoint", messageExchange.getEndpoint()
+                    .getEndpointName());
+        }
+
+        if (messageExchange.getService() != null) {
+            node
+                    .setProperty("Service", messageExchange.getService()
+                            .toString());
+        }
+
+        for (Object key : messageExchange.getPropertyNames()) {
+            String name = (String) key;
+
+            node
+                    .setProperty(name, messageExchange.getProperty(name)
+                            .toString());
+        }
+
+        addNormalizedMessages(node, messageExchange);
+        node.setProperty("Updated", new DateValue(new GregorianCalendar()));
+
+    }
+
+    /**
+     * 
+     * 
+     * 
+     * @param exchange
+     * @param session
+     * @return Node
+     * @throws ItemExistsException
+     * @throws PathNotFoundException
+     * @throws VersionException
+     * @throws ConstraintViolationException
+     * @throws LockException
+     * @throws RepositoryException
+     */
+    private Node getNodeForExchange(MessageExchange exchange, Session session)
+            throws ItemExistsException, PathNotFoundException,
+            VersionException, ConstraintViolationException, LockException,
+            RepositoryException {
+
+        String id = exchange.getExchangeId().replaceAll(":", "_");
+        String corr_id = exchange.getProperty(
+                "org.apache.servicemix.correlationId").toString().replaceAll(
+                ":", "_");
+
+        // node with date
+        // Node parent = getExchangeBaseNode(session);
+        Node parent = getMessageFlowBaseNode(session);
+
+        // node with correlation id
+        Node parent_corr = getCorrelationIdNode(parent, corr_id, id);
+
+        try {
+            return parent_corr.getNode(id);
+
+        } catch (PathNotFoundException e) {
+            Node node = parent_corr.addNode(id);
+            node.setProperty(RESOURCE_TYPE, EXCHANGE_RESOURCE_TYPE);
+
+            node.setProperty("Created", new DateValue(new GregorianCalendar()));
+
+            node.addMixin("mix:versionable");
+            return node;
+        }
+    }
+
+    /**
+     * 
+     * 
+     * 
+     * @param parent
+     * @param corr_id
+     * @param id
+     * @return Node
+     * @throws RepositoryException
+     * @throws ValueFormatException
+     * @throws VersionException
+     * @throws LockException
+     * @throws ConstraintViolationException
+     */
+    private synchronized Node getCorrelationIdNode(Node parent, String corr_id,
+            String id) throws RepositoryException, ValueFormatException,
+            VersionException, LockException, ConstraintViolationException {
+
+        // first exchange of the flow
+        if (corr_id == null) {
+            Node node = parent.addNode(id);
+            node.setProperty(RESOURCE_TYPE, MESSAGE_FLOW_RESOURCE_TYPE);
+
+            node.setProperty("Created", new DateValue(new GregorianCalendar()));
+            node.setProperty("CorrelationId", id);
+            return node;
+        }
+
+        try {
+            
+            System.out.println(corr_id);
+            return parent.getNode(corr_id);
+
+        } catch (PathNotFoundException e) {
+
+            Node node = parent.addNode(corr_id);
+            node.setProperty(RESOURCE_TYPE, MESSAGE_FLOW_RESOURCE_TYPE);
+
+            node.setProperty("Created", new DateValue(new GregorianCalendar()));
+            node.setProperty("CorrelationId", corr_id);
+
+            return node;
+        }
+    }
+
+    /**
+     * 
+     * Get base node for message flow
+     * 
+     * @param session
+     * @return Node
+     * @throws RepositoryException
+     */
+    private Node getMessageFlowBaseNode(Session session)
+            throws RepositoryException {
+        Node exchanges = session.getRootNode().getNode(
+                CONTENT_MESSAGE_FLOWS_TYPE);
+
+        return createOrGet(exchanges, FORMAT.format(new Date()));
+    }
+
+    /**
+     * 
+     * Create or get node with the path
+     * 
+     * @param exchanges
+     * @param path
+     * @return Node
+     * @throws ValueFormatException
+     * @throws VersionException
+     * @throws LockException
+     * @throws ConstraintViolationException
+     * @throws RepositoryException
+     */
+    private synchronized Node createOrGet(Node exchanges, String path)
+            throws ValueFormatException, VersionException, LockException,
+            ConstraintViolationException, RepositoryException {
+        try {
+            return exchanges.getNode(path);
+
+        } catch (PathNotFoundException e) {
+            Node node = exchanges.addNode(path);
+            node.setProperty(RESOURCE_TYPE, EXCHANGES_RESOURCE_TYPE);
+
+            node.setProperty("Created", new DateValue(new GregorianCalendar()));
+            return node;
+        }
+    }
+
+    /**
+     * 
+     * 
+     * 
+     * @param node
+     * @param exchange
+     * @throws ItemExistsException
+     * @throws PathNotFoundException
+     * @throws VersionException
+     * @throws ConstraintViolationException
+     * @throws LockException
+     * @throws MessagingException
+     * @throws RepositoryException
+     * @throws TransformerException
+     */
+    private void addNormalizedMessages(Node node, MessageExchange exchange)
+            throws ItemExistsException, PathNotFoundException,
+            VersionException, ConstraintViolationException, LockException,
+            MessagingException, RepositoryException, TransformerException {
+        
+        
+        if (exchange.getMessage("in") != null) {
+            addNormalizedMessages(node, "In", exchange.getMessage("in"));
+        }
+        if (exchange.getMessage("out") != null) {
+            addNormalizedMessages(node, "Out", exchange.getMessage("out"));
+        }
+        if (exchange.getMessage("fault") != null) {
+            addNormalizedMessages(node, "Fault", exchange.getMessage("fault"));
+        }
+    }
+
+    /**
+     * 
+     * 
+     * 
+     * @param parent
+     * @param type
+     * @param message
+     * @throws ItemExistsException
+     * @throws PathNotFoundException
+     * @throws VersionException
+     * @throws ConstraintViolationException
+     * @throws LockException
+     * @throws RepositoryException
+     * @throws MessagingException
+     * @throws TransformerException
+     */
+    private void addNormalizedMessages(Node parent, String type,
+            NormalizedMessage message) throws ItemExistsException,
+            PathNotFoundException, VersionException,
+            ConstraintViolationException, LockException, RepositoryException,
+            MessagingException, TransformerException {
+        if (message != null) {
+            Node node;
+            try {
+                node = parent.getNode(type);
+            } catch (PathNotFoundException e) {
+                node = parent.addNode(type);
+            }
+            node.setProperty("Content", getNormalizedMessageContent(message));
+            for (Object key : message.getPropertyNames()) {
+                String name = (String) key;
+                node.setProperty(name, message.getProperty(name).toString());
+            }
+            node.setProperty(RESOURCE_TYPE, NORMALIZED_MESSAGE_RESOURCE_TYPE);
+        }
+    }
+
+    /**
+     * 
+     * 
+     * 
+     * @param message
+     * @return String
+     * @throws MessagingException
+     * @throws TransformerException
+     */
+    private String getNormalizedMessageContent(NormalizedMessage message)
+            throws MessagingException, TransformerException {
+        MessageUtil.enableContentRereadability(message);
+        return TRANSFORMER.toString(message.getContent());
+    }
+}

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/html.esp
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/html.esp?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/html.esp (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/html.esp Wed Sep 10 02:32:47 2008
@@ -27,3 +27,32 @@
 <% sling.include("/content/servicemix/navigation.div"); %>
 </div>
 </html>
+<html>
+<head>
+<title>Apache ServiceMix :: Configuration</title>
+<link rel="stylesheet" type="text/css" href="/theme/master.css"/>
+</head>
+<body>
+<div id="page">
+<h1>Apache ServiceMix :: Configuration</h1>
+
+<div id="content">
+<br>
+<b>Configure values:</b>
+<h2></h2>
+
+<table>
+<% 
+  /*  
+   var current = 0;
+   for (var flow in currentNode.getChildren()) {
+    sling.include(currentNode[flow] + ".tr"); 
+    if (++current >= 50) break;  
+ } 
+ */
+%>
+</table>
+</div>
+<% sling.include("/content/servicemix/navigation.div"); %>
+</div>
+</html>

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/tr.esp
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/tr.esp?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/tr.esp (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/config/tr.esp Wed Sep 10 02:32:47 2008
@@ -2,3 +2,7 @@
   <td>&rarr;</td>
   <td><a href="<%=currentNode%>.html"><%=currentNode['CorrelationId'] %></a></td>
 </tr>
+<tr>  
+  <td>&rarr;</td>
+  <td><a href="<%=currentNode%>.html"><%=currentNode['CorrelationId'] %></a></td>
+</tr>

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flow/tr.esp
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flow/tr.esp?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flow/tr.esp (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flow/tr.esp Wed Sep 10 02:32:47 2008
@@ -4,3 +4,9 @@
   <td>time: </td>
   <td><%=currentNode['Created'] %></td>
 </tr>
+<tr>
+  <td>&rarr;</td>
+  <td><a href="<%=currentNode%>.html"><%=currentNode['CorrelationId'] %></a></td>
+  <td>time: </td>
+  <td><%=currentNode['Created'] %></td>
+</tr>

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/html.esp
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/html.esp?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/html.esp (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/html.esp Wed Sep 10 02:32:47 2008
@@ -21,3 +21,26 @@
 <% sling.include("/content/servicemix/navigation.div"); %>
 </div>
 </html>
+<html>
+<head>
+<title>Apache ServiceMix :: Browse the archive</title>
+<link rel="stylesheet" type="text/css" href="/theme/master.css"/>
+</head>
+<body>
+<div id="page">
+<h1>Apache ServiceMix :: Browse the archive</h1>
+
+<div id="content">
+<br>
+
+
+<br><br>
+<b>exchanges:</b>
+<h2></h2>
+
+
+
+</div>
+<% sling.include("/content/servicemix/navigation.div"); %>
+</div>
+</html>

Modified: servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/tr.esp
URL: http://svn.apache.org/viewvc/servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/tr.esp?rev=693755&r1=693754&r2=693755&view=diff
==============================================================================
--- servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/tr.esp (original)
+++ servicemix/sandbox/gertv/smx-sling/servicemix-sling-console/src/main/resources/initial-content/apps/servicemix/message_flows/tr.esp Wed Sep 10 02:32:47 2008
@@ -2,3 +2,7 @@
   <td>&rarr;</td>
   <td><a href="<%=currentNode%>.html"><%=currentNode['CorrelationId'] %></a></td>
 </tr>
+<tr>  
+  <td>&rarr;</td>
+  <td><a href="<%=currentNode%>.html"><%=currentNode['CorrelationId'] %></a></td>
+</tr>