[jboss-svn-commits] JBL Code SVN: r10122 - in labs/jbossesb/trunk/product/core: services/src/org/jboss/internal/soa/esb/persistence/format/db and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Mar 11 17:05:57 EDT 2007
Author: daniel.brum at jboss.com
Date: 2007-03-11 17:05:57 -0400 (Sun, 11 Mar 2007)
New Revision: 10122
Modified:
labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/services/persistence/MessageStore.java
labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/persistence/format/db/DBMessageStoreImpl.java
labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/esb/persistence/tests/MessageStoreUnitTest.java
Log:
http://jira.jboss.com/jira/browse/JBESB-453
Modified: labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/services/persistence/MessageStore.java
===================================================================
--- labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/services/persistence/MessageStore.java 2007-03-11 15:33:32 UTC (rev 10121)
+++ labs/jbossesb/trunk/product/core/rosetta/src/org/jboss/soa/esb/services/persistence/MessageStore.java 2007-03-11 21:05:57 UTC (rev 10122)
@@ -22,6 +22,7 @@
*/
import java.net.URI;
+import java.util.Map;
import org.jboss.soa.esb.message.Message;
@@ -30,5 +31,11 @@
public URI addMessage (Message message) throws MessageStoreException;
public Message getMessage (URI uid) throws MessageStoreException;
+
+ public void setUndelivered(URI uid) throws MessageStoreException;
+
+ public void setDelivered(URI uid) throws MessageStoreException;
+
+ public Map<URI, Message> getUndeliveredMessages() throws MessageStoreException;
}
Modified: labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/persistence/format/db/DBMessageStoreImpl.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/persistence/format/db/DBMessageStoreImpl.java 2007-03-11 15:33:32 UTC (rev 10121)
+++ labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/persistence/format/db/DBMessageStoreImpl.java 2007-03-11 21:05:57 UTC (rev 10122)
@@ -27,9 +27,14 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
+import org.apache.log4j.Logger;
import org.jboss.internal.soa.esb.persistence.manager.ConnectionManager;
+import org.jboss.internal.soa.esb.services.registry.JAXRRegistryImpl;
import org.jboss.internal.soa.esb.thirdparty.Base64;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.persistence.manager.ConnectionManagerException;
@@ -40,6 +45,7 @@
public class DBMessageStoreImpl implements MessageStore
{
+ private static Logger logger = Logger.getLogger(DBMessageStoreImpl.class);
protected ConnectionManager mgr = null;
@@ -60,6 +66,10 @@
}
+ /**
+ * add's a @Message to the database persistence store
+ * will set the 'delivered' flag to TRUE by default - assuming that the @Message has been delivered
+ */
public synchronized URI addMessage (Message message) throws MessageStoreException
{
@@ -70,22 +80,23 @@
{
conn = mgr.getConnection();
- uid = new URI("urn:jboss/esb/message/UID#" + UUID.randomUUID()
- .toString());
+ uid = new URI("urn:jboss/esb/message/UID#" + UUID.randomUUID().toString());
String messageString = Base64.encodeObject(Util.serialize(message));
// insert into the database
- String sql = "insert into message(uuid, type, message) values(?,?,?)";
+ String sql = "insert into message(uuid, type, message, delivered) values(?,?,?, ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, uid.toString());
ps.setString(2, message.getType().toString());
ps.setString(3, messageString);
+ ps.setString(4, "TRUE");
ps.execute();
}
catch (Exception e)
{
+ logger.error(e);
throw new MessageStoreException(e);
}
finally
@@ -96,6 +107,10 @@
return uid;
}
+ /**
+ * return a @Message based on the passed in key in the form of a JBoss ESB @URI
+ * format for URI: "urn:jboss/esb/message/UID#" + UUID.randomUUID()" - see the method in this class @addMessage
+ */
public synchronized Message getMessage (URI uid)
throws MessageStoreException
{
@@ -123,6 +138,7 @@
}
catch (Exception e)
{
+ logger.error(e);
throw new MessageStoreException(e);
}
finally
@@ -133,7 +149,101 @@
return message;
}
+
+ /**
+ *
+ * @param uid - key for message to set undelivered flag on
+ * @throws MessageStoreException
+ */
+ public void setUndelivered(URI uid) throws MessageStoreException{
+ String sql = "update message set delivered = 'FALSE' where uuid=?";
+
+ try
+ {
+ conn = mgr.getConnection();
+
+ ps = conn.prepareStatement(sql);
+ ps.setString(1, uid.toString());
+ ps.execute();
+ }
+ catch (Exception e)
+ {
+ logger.error(e);
+ throw new MessageStoreException(e);
+ }
+ finally
+ {
+ release();
+ }
+
+ }
+
+ public void setDelivered(URI uid) throws MessageStoreException{
+ String sql = "update message set delivered = 'TRUE' where uuid=?";
+
+ try
+ {
+ conn = mgr.getConnection();
+
+ ps = conn.prepareStatement(sql);
+ ps.setString(1, "FALSE");
+ ps.execute();
+
+ }
+ catch (Exception e)
+ {
+ logger.error(e);
+ throw new MessageStoreException(e);
+ }
+ finally
+ {
+ release();
+ }
+
+ }
+
+ /**
+ * This method can be used to retrieve a collection of all the undelivered (delivered=FALSE) from the message-store
+ * You should test for 'null' on the return type to see if any messages exist in the collection
+ * @return Map<URI, Message> - a collection of all the undelivered messages in the message-store
+ * @throws MessageStoreException
+ */
+ public Map<URI, Message> getUndeliveredMessages() throws MessageStoreException {
+ HashMap<URI, Message> messages = new HashMap();
+ String sql = "select uuid from message where delivered='FALSE'";
+
+ try
+ {
+ conn = mgr.getConnection();
+ Statement stmt;
+ ResultSet rs;
+ stmt = conn.createStatement();
+ rs = stmt.executeQuery(sql);
+
+ while (rs.next()) {
+ URI uid = new URI(rs.getString(1));
+ Message msg = getMessage(uid);
+ messages.put(uid, msg);
+ }
+ rs.close();
+ stmt.close();
+
+ }
+ catch (Exception e)
+ {
+ logger.error(e);
+ throw new MessageStoreException(e);
+ }
+ finally
+ {
+ release();
+ }
+ logger.info("retrieved " + messages.size() + " undelivered messages");
+ return messages;
+
+ }
+
private void release ()
{
Modified: labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/esb/persistence/tests/MessageStoreUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/esb/persistence/tests/MessageStoreUnitTest.java 2007-03-11 15:33:32 UTC (rev 10121)
+++ labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/esb/persistence/tests/MessageStoreUnitTest.java 2007-03-11 21:05:57 UTC (rev 10122)
@@ -36,6 +36,7 @@
import java.net.URI;
import java.sql.Connection;
import java.sql.Statement;
+import java.util.Map;
import junit.framework.JUnit4TestAdapter;
@@ -75,8 +76,80 @@
MessageStore store1 = MessageStoreFactory.getInstance().getMessageStore(MessageStoreType.DATABASE);
assertEquals((store1 != null), true);
}
+
+ @Test
+ public void testSettingUndeliverable () throws Exception
+ {
+ //test setting one message to undelivered status
+// add new messages
+ Message msg = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
+ assertEquals((msg != null), true);
+
+ MessageStore store = MessageStoreFactory.getInstance().getMessageStore(MessageStoreType.DATABASE);
+ assertEquals((store != null), true);
+
+ URI uid = store.addMessage(msg);
+ store.setUndelivered(uid);
+ }
+
@Test
+ public void testSettingDeliverable() throws Exception
+ {
+ //test setting one message to delivered status
+// add new messages
+ Message msg = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
+ assertEquals((msg != null), true);
+
+ MessageStore store = MessageStoreFactory.getInstance().getMessageStore(MessageStoreType.DATABASE);
+ assertEquals((store != null), true);
+
+ URI uid = store.addMessage(msg);
+ store.setDelivered(uid);
+
+ }
+
+ @Test
+ public void testManyUndeliveredMessages() throws Exception {
+ Message msg1, msg2, msg3, msg4;
+ msg1 = MessageFactory.getInstance().getMessage(
+ MessageType.JBOSS_XML);
+ msg2 = MessageFactory.getInstance().getMessage(
+ MessageType.JAVA_SERIALIZED);
+ msg3 = MessageFactory.getInstance().getMessage(
+ MessageType.JBOSS_XML);
+ msg4 = MessageFactory.getInstance().getMessage(
+ MessageType.JAVA_SERIALIZED);
+
+ assertEquals((msg1 != null), true);
+ assertEquals((msg2 != null), true);
+ assertEquals((msg3 != null), true);
+ assertEquals((msg4 != null), true);
+
+
+ MessageStore store = MessageStoreFactory.getInstance().getMessageStore(
+ MessageStoreType.DATABASE);
+ assertEquals((store != null), true);
+
+ URI uid1 = store.addMessage(msg1);
+ URI uid2 = store.addMessage(msg2);
+ URI uid3 = store.addMessage(msg3);
+ URI uid4 = store.addMessage(msg4);
+
+ store.setUndelivered(uid1);
+ store.setUndelivered(uid2);
+ store.setUndelivered(uid3);
+ store.setUndelivered(uid4);
+
+ Map<URI, Message> messages = store.getUndeliveredMessages();
+ assertEquals((messages != null), true);
+
+
+
+
+ }
+
+ @Test
public void testStoreAndRetrieve () throws Exception
{
// add new messages
@@ -110,12 +183,12 @@
// keep track of the UID to use in retrieving the Message
URI uid1 = null;
uid1 = store.addMessage(msg1);
- System.out.println(uid1);
+// System.out.println(uid1);
assertEquals((uid1 != null), true);
URI uid2 = null;
uid2 = store.addMessage(msg2);
- System.out.println(uid2);
+// System.out.println(uid2);
assertEquals((uid2 != null), true);
// now retrieve the messages
More information about the jboss-svn-commits
mailing list