You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by mc...@apache.org on 2008/10/21 17:07:46 UTC

svn commit: r706650 [1/3] - in /webservices/sandesha/trunk/java/modules/persistence: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/sandesha2/ src/main/java/org/apache/sandesha2/storage/ src/main/...

Author: mckierna
Date: Tue Oct 21 08:07:45 2008
New Revision: 706650

URL: http://svn.apache.org/viewvc?rev=706650&view=rev
Log:
JDBC persistent store - thanks Amila (see https://issues.apache.org/jira/browse/SANDESHA2-140)

Added:
    webservices/sandesha/trunk/java/modules/persistence/
    webservices/sandesha/trunk/java/modules/persistence/axis2.log
    webservices/sandesha/trunk/java/modules/persistence/derby.log
    webservices/sandesha/trunk/java/modules/persistence/pom.xml
    webservices/sandesha/trunk/java/modules/persistence/src/
    webservices/sandesha/trunk/java/modules/persistence/src/main/
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentBeanMgr.java
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentInvokerBeanMgr.java
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMDBeanMgr.java
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMSBeanMgr.java
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentSenderBeanMgr.java
    webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java
    webservices/sandesha/trunk/java/modules/persistence/src/resources/
    webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/
    webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-derby.ddl
    webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-mysql.ddl
    webservices/sandesha/trunk/java/modules/persistence/src/resources/module_config_axis2.xml
    webservices/sandesha/trunk/java/modules/persistence/src/test/
    webservices/sandesha/trunk/java/modules/persistence/src/test/java/
    webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/
    webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/
    webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/
    webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java
    webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java
    webservices/sandesha/trunk/java/modules/persistence/test-resources/
    webservices/sandesha/trunk/java/modules/persistence/test-resources/client_axis2.xml
    webservices/sandesha/trunk/java/modules/persistence/test-resources/commons-logging.properties
    webservices/sandesha/trunk/java/modules/persistence/test-resources/log4j.properties
    webservices/sandesha/trunk/java/modules/persistence/test-resources/sandesha2-test.properties
    webservices/sandesha/trunk/java/modules/persistence/test-resources/server_axis2.xml
    webservices/sandesha/trunk/java/modules/persistence/test.build.xml

Added: webservices/sandesha/trunk/java/modules/persistence/axis2.log
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/axis2.log?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/axis2.log (added)
+++ webservices/sandesha/trunk/java/modules/persistence/axis2.log Tue Oct 21 08:07:45 2008
@@ -0,0 +1,57 @@
+2008-10-21 13:15:03,671 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:15:04,515 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/sandesha2-SNAPSHOT.mar
+2008-10-21 13:15:04,625 [main] INFO  org.apache.axis2.deployment.ServiceDeployer  - Deploying Web service: RMSampleService.aar - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/services/RMSampleService.aar
+2008-10-21 13:15:04,656 [HttpListener-8060-1] INFO  org.apache.axis2.transport.http.server.DefaultConnectionListener  - Listening on port 8060
+2008-10-21 13:15:04,953 [main] INFO  org.apache.axis2.deployment.DeploymentEngine  - No services directory was found under C:\wsfp\pyxis\WAS_build\openSrc\sandeshaCommit\modules\persistence\target\repos\persistence-client.
+2008-10-21 13:15:05,000 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:15:05,031 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2 - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/sandesha2-UnitTest.mar
+2008-10-21 13:15:05,031 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - create PersistentStorageManager
+2008-10-21 13:15:05,046 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - init PersistentStorageManager
+2008-10-21 13:15:28,546 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down connection listener
+2008-10-21 13:15:28,546 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down HTTP processors
+2008-10-21 13:15:31,562 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Force shut down HTTP processors
+2008-10-21 13:15:31,562 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - HTTP protocol handler shut down
+2008-10-21 13:15:31,968 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:15:32,078 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/sandesha2-SNAPSHOT.mar
+2008-10-21 13:15:32,171 [main] INFO  org.apache.axis2.deployment.ServiceDeployer  - Deploying Web service: RMSampleService.aar - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/services/RMSampleService.aar
+2008-10-21 13:15:32,171 [HttpListener-8060-1] INFO  org.apache.axis2.transport.http.server.DefaultConnectionListener  - Listening on port 8060
+2008-10-21 13:15:32,500 [main] INFO  org.apache.axis2.deployment.DeploymentEngine  - No services directory was found under C:\wsfp\pyxis\WAS_build\openSrc\sandeshaCommit\modules\persistence\target\repos\persistence-client.
+2008-10-21 13:15:32,546 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:15:32,593 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2 - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/sandesha2-UnitTest.mar
+2008-10-21 13:15:32,593 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - create PersistentStorageManager
+2008-10-21 13:15:32,593 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - init PersistentStorageManager
+2008-10-21 13:15:32,625 [HttpListener-6060-1] INFO  org.apache.axis2.transport.http.server.DefaultConnectionListener  - Listening on port 6060
+2008-10-21 13:16:05,187 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down connection listener
+2008-10-21 13:16:05,187 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down HTTP processors
+2008-10-21 13:16:08,203 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Force shut down HTTP processors
+2008-10-21 13:16:08,203 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - HTTP protocol handler shut down
+2008-10-21 13:16:08,843 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down connection listener
+2008-10-21 13:16:08,843 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down HTTP processors
+2008-10-21 13:16:11,859 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Force shut down HTTP processors
+2008-10-21 13:16:11,859 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - HTTP protocol handler shut down
+2008-10-21 13:16:12,203 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:16:12,359 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/sandesha2-SNAPSHOT.mar
+2008-10-21 13:16:12,390 [main] INFO  org.apache.axis2.deployment.ServiceDeployer  - Deploying Web service: RMSampleService.aar - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/services/RMSampleService.aar
+2008-10-21 13:16:12,390 [HttpListener-8060-1] INFO  org.apache.axis2.transport.http.server.DefaultConnectionListener  - Listening on port 8060
+2008-10-21 13:16:12,687 [main] INFO  org.apache.axis2.deployment.DeploymentEngine  - No services directory was found under C:\wsfp\pyxis\WAS_build\openSrc\sandeshaCommit\modules\persistence\target\repos\persistence-client.
+2008-10-21 13:16:12,734 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:16:12,750 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2 - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/sandesha2-UnitTest.mar
+2008-10-21 13:16:12,750 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - create PersistentStorageManager
+2008-10-21 13:16:12,750 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - init PersistentStorageManager
+2008-10-21 13:16:33,781 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down connection listener
+2008-10-21 13:16:33,781 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down HTTP processors
+2008-10-21 13:16:36,781 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Force shut down HTTP processors
+2008-10-21 13:16:36,781 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - HTTP protocol handler shut down
+2008-10-21 13:16:37,125 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:16:37,203 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/modules/sandesha2-SNAPSHOT.mar
+2008-10-21 13:16:37,390 [main] INFO  org.apache.axis2.deployment.ServiceDeployer  - Deploying Web service: RMSampleService.aar - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-server/services/RMSampleService.aar
+2008-10-21 13:16:37,390 [HttpListener-8060-1] INFO  org.apache.axis2.transport.http.server.DefaultConnectionListener  - Listening on port 8060
+2008-10-21 13:16:37,703 [main] INFO  org.apache.axis2.deployment.DeploymentEngine  - No services directory was found under C:\wsfp\pyxis\WAS_build\openSrc\sandeshaCommit\modules\persistence\target\repos\persistence-client.
+2008-10-21 13:16:37,734 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: addressing-SNAPSHOT - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/addressing-SNAPSHOT.mar
+2008-10-21 13:16:37,781 [main] INFO  org.apache.axis2.deployment.ModuleDeployer  - Deploying module: sandesha2 - file:/C:/wsfp/pyxis/WAS_build/openSrc/sandeshaCommit/modules/persistence/target/repos/persistence-client/modules/sandesha2-UnitTest.mar
+2008-10-21 13:16:37,781 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - create PersistentStorageManager
+2008-10-21 13:16:37,781 [main] INFO  org.apache.sandesha2.storage.jdbc.PersistentStorageManager  - init PersistentStorageManager
+2008-10-21 13:17:00,000 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down connection listener
+2008-10-21 13:17:00,000 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Shut down HTTP processors
+2008-10-21 13:17:03,000 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - Force shut down HTTP processors
+2008-10-21 13:17:03,000 [main] INFO  org.apache.axis2.transport.http.server.SimpleHttpServer  - HTTP protocol handler shut down

Added: webservices/sandesha/trunk/java/modules/persistence/derby.log
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/derby.log?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/derby.log (added)
+++ webservices/sandesha/trunk/java/modules/persistence/derby.log Tue Oct 21 08:07:45 2008
@@ -0,0 +1,6 @@
+----------------------------------------------------------------
+2008-10-21 12:15:05.421 GMT:
+ Booting Derby version The Apache Software Foundation - Apache Derby - 10.3.2.1 - (599110): instance c013800d-011d-1f54-6a41-00000008f190
+on database directory C:\wsfp\pyxis\WAS_build\openSrc\sandeshaCommit\modules\persistence\target\derby\wsrm  
+
+Database Class Loader started - derby.database.classpath=''

Added: webservices/sandesha/trunk/java/modules/persistence/pom.xml
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/pom.xml?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/pom.xml (added)
+++ webservices/sandesha/trunk/java/modules/persistence/pom.xml Tue Oct 21 08:07:45 2008
@@ -0,0 +1,120 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <parent>
+		<groupId>org.apache.sandesha2</groupId>
+		<artifactId>sandesha2-parent</artifactId>
+        <version>SNAPSHOT</version>
+    </parent>
+	
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.sandesha2</groupId>
+    <artifactId>sandesha2-jdbc-storage</artifactId>
+    <packaging>jar</packaging>
+    <name>Sandesha2 - JDBC Persistent Storage</name>
+
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <testSourceDirectory>src/test/java</testSourceDirectory>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <directory>test-resources</directory>
+                <includes>
+                    <include>**/*.properties</include>
+                </includes>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+			<plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <version>1.1</version>
+                <executions>
+                    <execution>
+                        <id>create_test_repos</id>
+                        <phase>process-test-resources</phase>
+                        <configuration>
+                            <tasks>
+								<ant antfile="test.build.xml" inheritAll="true" target="prepare">
+									<property name="sandesha2.version" value="${sandesha2.version}"/>
+									<property name="build.dir" value="${project.build.directory}"/>
+									<property name="local.repo" value="${settings.localRepository}"/>
+									<property name="addressing.version" value="${axis2.version}"/>
+									<property name="rampart.version" value="${rampart.version}"/>
+								</ant>
+                            </tasks>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+			<plugin>
+    			<artifactId>maven-surefire-plugin</artifactId>
+    			<configuration>
+               		<includes>
+                 		<include>**/*Test.java</include>
+                	</includes>
+                	<forkMode>pertest</forkMode>
+                	<!--<argLine>-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</argLine>-->
+    			</configuration>
+			</plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+
+    	<dependency>
+            <groupId>org.apache.sandesha2</groupId>
+            <artifactId>sandesha2-core</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+    	<dependency>
+            <groupId>org.apache.sandesha2</groupId>
+            <artifactId>sandesha2-policy</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+		<dependency>
+            <groupId>org.apache.sandesha2</groupId>
+            <artifactId>sandesha2-samples</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.13</version>
+        </dependency>
+	<dependency>
+    		<groupId>org.apache.derby</groupId>
+    		<artifactId>derby</artifactId>
+    		<version>10.3.2.1</version>
+	</dependency> 
+	<dependency>
+    		<groupId>org.apache.derby</groupId>
+    		<artifactId>derbytools</artifactId>
+    		<version>10.3.2.1</version>
+	</dependency> 
+
+    </dependencies>		
+
+</project>

Added: webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,89 @@
+/*
+ * 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.sandesha2.storage.jdbc;
+
+import java.sql.*;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.sandesha2.storage.Transaction;
+/*
+ * Each transaction has its own DataBase connection with autocommit set to false
+ * 
+ * As there is no method to "release" a transaction, connections are closed on
+ * commit or rollback.
+ */
+public class JDBCTransaction implements Transaction {
+	private PersistentStorageManager pmgr = null;
+	private Connection DbConnection = null;
+	private boolean active = false;
+	private Log log = LogFactory.getLog(getClass());
+	
+	public JDBCTransaction (PersistentStorageManager pmgr)
+	{
+		log.debug("new JDBCTransaction");
+		try {
+		  this.pmgr = pmgr;
+		  DbConnection = pmgr.dbConnect();
+		  DbConnection.setAutoCommit(false);
+		  active = true;
+		} catch (Exception ex) {}
+	}
+	
+	public Connection getDbConnection()
+	{
+		return DbConnection;
+	}
+	
+	private void freeTransaction()
+	{
+		try {
+			DbConnection.close();
+			pmgr.removeTransaction();
+		} catch (Exception ex) {}
+		
+	}
+		
+	public void commit()
+	{
+		log.debug("commit JDBCTransaction");
+		try {
+		  DbConnection.commit();
+		  freeTransaction();
+		} catch (Exception ex) {}
+		active = false;
+	}
+	
+	public void rollback()
+	{
+		log.debug("rollback JDBCTransaction");
+		try {
+			  DbConnection.rollback();
+			  freeTransaction();
+			} catch (Exception ex) {}
+		active = false;
+	}
+		
+	public boolean isActive ()
+	{
+		return active;
+	}
+	
+}

Added: webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentBeanMgr.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentBeanMgr.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentBeanMgr.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentBeanMgr.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,68 @@
+/*
+ * 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.sandesha2.storage.jdbc;
+
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.sql.*;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class PersistentBeanMgr {
+	Log log = LogFactory.getLog(getClass());
+	PersistentStorageManager pmgr = null;
+	
+	public PersistentBeanMgr(PersistentStorageManager pmgr)
+	{
+		this.pmgr = pmgr;
+	}
+
+	public Connection getDbConnection()
+	{
+		return pmgr.getDbConnection();
+	}
+	
+	protected Object getObject(ResultSet rs, String field)
+	 throws Exception
+	 {
+		// MySQL JDBC connector returns a byte array 
+		// and Derby an EmbedBlob with :
+		// return rs.getObject(field);
+		// so
+		InputStream bs = rs.getBinaryStream(field);
+		if ( bs == null ) return null;
+		return (new ObjectInputStream(bs)).readObject();
+	 }
+	
+	protected ByteArrayInputStream serialize(Object obj)
+	  throws Exception
+	{
+	    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+	    ObjectOutputStream oos = new ObjectOutputStream(baos);
+	    oos.writeObject(obj);
+	    oos.close();
+	    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+	    return bais;
+	}
+}

Added: webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentInvokerBeanMgr.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentInvokerBeanMgr.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentInvokerBeanMgr.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentInvokerBeanMgr.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,201 @@
+/*
+ * 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.sandesha2.storage.jdbc;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.io.ByteArrayInputStream;
+import java.io.Serializable;
+import java.sql.*;
+
+import org.apache.sandesha2.storage.SandeshaStorageException;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.storage.beanmanagers.InvokerBeanMgr;
+import org.apache.sandesha2.storage.beans.InvokerBean;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+
+public class PersistentInvokerBeanMgr extends PersistentBeanMgr implements InvokerBeanMgr {
+
+	public PersistentInvokerBeanMgr(PersistentStorageManager pmgr)
+	{
+		super(pmgr);
+	}
+
+	private String requestForModel(InvokerBean bean)
+	{
+		StringBuilder sql = new StringBuilder(" select * from wsrm_invoker");
+		if ( bean == null ) return sql.toString();
+		String op = " where";
+		String clause = bean.getMessageContextRefKey();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" message_context_ref_key='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getSequenceID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" sequence_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		if ( (bean.getFlags() & InvokerBean.MSG_NO_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" msg_no=");
+			sql.append(bean.getMsgNo());
+		}
+		return sql.toString();
+	}
+	
+	private InvokerBean getInvokerBean(ResultSet rs)
+	  throws Exception
+	{
+		InvokerBean invokerBean = new InvokerBean();
+		invokerBean.setMessageContextRefKey(rs.getString("message_context_ref_key"));
+		invokerBean.setSequenceID(rs.getString("sequence_id"));
+		invokerBean.setMsgNo(rs.getLong("msg_no"));
+		invokerBean.setFlags(rs.getInt("flags"));
+		invokerBean.setContext((Serializable)getObject(rs,"context"));
+		return invokerBean;
+	}
+	
+	public boolean delete(String key)
+	  throws SandeshaStorageException 
+	{
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			stmt.executeUpdate("delete from wsrm_invoker where message_context_ref_key='" + key + "'");
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+
+	public List find(InvokerBean bean)
+	  throws SandeshaStorageException
+	{
+		String sql = requestForModel(bean);
+		ArrayList<InvokerBean> lst = new ArrayList<InvokerBean>();
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				lst.add(getInvokerBean(rs));
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return lst;
+	}
+	
+	public boolean insert(InvokerBean bean)
+	  throws SandeshaStorageException
+	{
+		try {
+	    	PreparedStatement pstmt = getDbConnection().prepareStatement("insert into wsrm_invoker(message_context_ref_key," +
+			"sequence_id,context,msg_no,flags)values(?,?,?,?,?)");
+		   	pstmt.setString(1,bean.getMessageContextRefKey());
+		   	pstmt.setString(2,bean.getSequenceID());
+		   	pstmt.setLong(4,bean.getMsgNo());
+		   	pstmt.setInt(5,bean.getFlags());
+		   	// Derby ne serialise pas avec setObject
+			 ByteArrayInputStream bais = serialize(bean.getContext());
+			 pstmt.setBinaryStream(3, bais, bais.available());
+		    pstmt.execute();
+		    pstmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	public InvokerBean retrieve(String key)
+	  throws SandeshaStorageException
+	{
+		InvokerBean invokerBean = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery("select * from wsrm_invoker where message_context_ref_key='" + key + "'");
+			if ( ! rs.next() ) return invokerBean;
+			invokerBean = getInvokerBean(rs);
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return invokerBean;
+	}
+
+	public boolean update(InvokerBean bean)
+	  throws SandeshaStorageException
+	{
+		try {
+	    	PreparedStatement pstmt = getDbConnection().prepareStatement("update wsrm_invoker set " +
+			"sequence_id=?,context=?,msg_no=?,flags=? where message_context_ref_key='" + bean.getMessageContextRefKey() + "'" );
+		   	pstmt.setString(1,bean.getSequenceID());
+		   	pstmt.setLong(3,bean.getMsgNo());
+		   	pstmt.setInt(4,bean.getFlags());
+		   	// Derby ne serialise pas avec setObject
+			 ByteArrayInputStream bais = serialize(bean.getContext());
+			 pstmt.setBinaryStream(2, bais, bais.available());
+		    pstmt.execute();
+		    pstmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	
+	public InvokerBean findUnique(InvokerBean bean)
+	  throws SandeshaException
+	{
+		String sql = requestForModel(bean);
+		InvokerBean result = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				if ( result == null ) {
+				 result = getInvokerBean(rs);
+				} else {
+					String message = SandeshaMessageHelper.getMessage(
+							SandeshaMessageKeys.nonUniqueResult,
+							result.toString(),
+							getInvokerBean(rs).toString());
+					log.error(message);
+					throw new SandeshaException (message);
+				}
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}		
+		return result;
+	}
+			
+}

Added: webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMDBeanMgr.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMDBeanMgr.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMDBeanMgr.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMDBeanMgr.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,443 @@
+/*
+ * 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.sandesha2.storage.jdbc;
+
+import java.io.ByteArrayInputStream;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Collection;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.storage.SandeshaStorageException;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.util.RangeString;
+
+public class PersistentRMDBeanMgr extends PersistentBeanMgr implements RMDBeanMgr {
+
+	public PersistentRMDBeanMgr(PersistentStorageManager pmgr)
+	{
+		super(pmgr);
+	}
+
+	private String requestForModel(RMDBean bean)
+	{
+		StringBuilder sql = new StringBuilder(" select * from wsrm_rmd");
+		if ( bean == null ) return sql.toString();
+		String op = " where";
+		String clause = bean.getSequenceID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" sequence_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		EndpointReference epr = bean.getToEndpointReference();
+		if ( epr != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" to_epr_addr='");
+			sql.append(epr.getAddress());
+			sql.append("'");
+		}
+		epr = bean.getReplyToEndpointReference();
+		if ( epr != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" reply_to_epr_addr='");
+			sql.append(epr.getAddress());
+			sql.append("'");
+		}
+		epr = bean.getAcksToEndpointReference();
+		if ( epr != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" acks_to_epr_addr='");
+			sql.append(epr.getAddress());
+			sql.append("'");
+		}
+		clause = bean.getRMVersion();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" rm_version='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getSecurityTokenData();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" security_token_data='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getReferenceMessageKey();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" reference_message_key='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getHighestInMessageId();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" highest_in_message_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getLastInMessageId();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" last_in_message_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getToAddress();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" to_address='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getOutboundInternalSequence();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" outbound_internal_sequence='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getOutboundInternalSequence();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" outbound_internal_sequence='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		RangeString rs = bean.getServerCompletedMessages();
+		if ( rs != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" server_completed_messages='");
+			sql.append(rs.toString());
+			sql.append("'");
+		}
+		rs = bean.getOutOfOrderRanges();
+		if ( rs != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" outof_order_ranges='");
+			sql.append(rs.toString());
+			sql.append("'");
+		}
+		if ( (bean.getRmdFlags() & RMDBean.NEXT_MSG_NO_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" next_msgno_to_process=");
+			sql.append(bean.getNextMsgNoToProcess());
+		}
+		if ( (bean.getRmdFlags() & RMDBean.HIGHEST_IN_MSG_FLAG ) != 0 ) {  
+			sql.append(op);
+			op = " and ";
+			sql.append(" highest_in_message_number=");
+			sql.append(bean.getHighestInMessageNumber());
+		}
+		if ( (bean.getFlags() & RMDBean.LAST_ACTIVATED_TIME_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" last_activated_time=");
+			sql.append(bean.getLastActivatedTime());
+		}
+		if ( (bean.getFlags() & RMDBean.CLOSED_FLAG ) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" closed=");
+			sql.append(bean.isClosed() ? 1:0);
+		}
+		if ( (bean.getFlags() &  RMDBean.TERMINATED_FLAG ) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" terminated_flag=");
+			sql.append(bean.isTerminated() ? 1:0);
+		}
+		if ( (bean.getFlags() & RMDBean.POLLING_MODE_FLAG) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" polling_mode=");
+			sql.append(bean.isPollingMode() ? 1:0);
+		}
+		if ( log.isDebugEnabled() ) log.debug("requestForModel " + sql.toString());
+		return sql.toString();
+	}
+	
+	private RMDBean getBean(ResultSet rs)
+	  throws Exception
+	{
+		RMDBean bean = new RMDBean();
+		bean.setSequenceID(rs.getString("sequence_id"));
+		
+		Object obj = getObject(rs,"to_epr");
+		if ( obj != null ) {
+			bean.setToEndpointReference((EndpointReference)obj);
+		}
+		obj = getObject(rs,"reply_to_epr");
+		if ( obj != null ) {
+			bean.setReplyToEndpointReference((EndpointReference)obj);
+		}
+		obj = getObject(rs,"acks_to_epr");
+		if ( obj != null ) {
+			bean.setAcksToEndpointReference((EndpointReference)obj);
+		}
+
+		bean.setRMVersion(rs.getString("rm_version"));
+		bean.setServiceName(rs.getString("service_name"));
+		bean.setSecurityTokenData(rs.getString("security_token_data"));
+		bean.setReferenceMessageKey(rs.getString("reference_message_key"));
+		bean.setHighestInMessageId(rs.getString("highest_in_message_id"));
+		bean.setLastInMessageId(rs.getString("last_in_message_id"));
+		bean.setToAddress(rs.getString("to_address"));
+		bean.setOutboundInternalSequence(rs.getString("outbound_internal_sequence"));
+		
+		bean.setOutOfOrderRanges(new RangeString(rs.getString("outof_order_ranges")));
+		bean.setServerCompletedMessages(new RangeString(rs.getString("server_completed_messages")));
+		
+		bean.setHighestInMessageNumber(rs.getLong("highest_in_message_number"));
+		bean.setNextMsgNoToProcess(rs.getLong("next_msgno_to_process"));
+		bean.setLastActivatedTime(rs.getLong("last_activated_time"));
+		
+		bean.setClosed(rs.getInt("closed")!= 0 ? true:false);
+		bean.setPollingMode(rs.getInt("polling_mode")!= 0 ? true:false);
+		bean.setTerminated(rs.getInt("terminated_flag")!= 0 ? true:false);
+		
+		bean.setFlags(rs.getInt("flags"));
+		bean.setRmdFlags(rs.getInt("rmd_flags"));
+		return bean;
+	}
+
+	public boolean delete(String sequenceID)
+	  throws SandeshaStorageException
+	{
+		if(log.isDebugEnabled()) log.debug("delete RMSBean sequenceID " + sequenceID);
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			stmt.executeUpdate("delete from wsrm_rmd where sequence_id='" + sequenceID + "'");
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	
+	public List find(RMDBean bean)
+	  throws SandeshaStorageException
+	{
+		String sql = requestForModel(bean);
+		ArrayList<RMDBean> lst = new ArrayList<RMDBean>();
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				lst.add(getBean(rs));
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		if(log.isDebugEnabled()) log.debug("Exit find lst.size(): " + lst.size());
+		return lst;
+	}
+	
+	public boolean insert(RMDBean bean)
+	  throws SandeshaStorageException
+	{
+		log.debug("insert " + bean);
+		try {
+	    	PreparedStatement pstmt = getDbConnection().prepareStatement("insert into wsrm_rmd(" +
+	    			"sequence_id,to_epr_addr,to_epr,reply_to_epr_addr,reply_to_epr,acks_to_epr_addr," +
+	    			"acks_to_epr,rm_version,security_token_data," +
+	    			"last_activated_time,closed,terminated_flag,polling_mode,service_name," +
+	    			"flags,reference_message_key,highest_in_message_id,last_in_message_id," +
+	    			"server_completed_messages,outof_order_ranges,to_address," +
+	    			"outbound_internal_sequence,next_msgno_to_process,highest_in_message_number,rmd_flags" +
+	    			")values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+		   	pstmt.setString(1,bean.getSequenceID());
+		   	EndpointReference epr = bean.getToEndpointReference();
+		   	pstmt.setString(2,epr != null ? epr.getAddress():null);
+			// Derby don't serialize object in blob !
+			// pstmt.setObject(3, epr);
+			ByteArrayInputStream bais = serialize(epr);
+			pstmt.setBinaryStream(3, bais, bais.available());
+		   	epr = bean.getReplyToEndpointReference();
+		   	pstmt.setString(4,epr != null ? epr.getAddress():null);
+			bais = serialize(epr);
+			pstmt.setBinaryStream(5, bais, bais.available());
+		   	epr = bean.getAcksToEndpointReference();
+		   	pstmt.setString(6,epr != null ? epr.getAddress():null);
+			bais = serialize(epr);
+			pstmt.setBinaryStream(7, bais, bais.available());
+		   	pstmt.setString(8,bean.getRMVersion());
+		   	pstmt.setString(9,bean.getSecurityTokenData());
+		   	pstmt.setLong(10,bean.getLastActivatedTime());
+		   	pstmt.setInt(11,bean.isClosed() ? 1 : 0);
+		   	pstmt.setInt(12,bean.isTerminated() ? 1 : 0);
+		   	pstmt.setInt(13,bean.isPollingMode() ? 1 : 0);
+		   	pstmt.setString(14,bean.getServiceName());
+		   	pstmt.setInt(15,bean.getFlags());
+		   	pstmt.setString(16,bean.getReferenceMessageKey());
+		   	pstmt.setString(17,bean.getHighestInMessageId());
+		   	pstmt.setString(18,bean.getLastInMessageId());
+		   	RangeString trs = bean.getServerCompletedMessages();
+		   	pstmt.setString(19,trs == null ? null : trs.toString());
+		   	trs = bean.getOutOfOrderRanges();
+		   	pstmt.setString(20,trs == null ? null : trs.toString());
+		   	pstmt.setString(21,bean.getToAddress());
+		   	pstmt.setString(22,bean.getOutboundInternalSequence());
+		   	pstmt.setLong(23,bean.getNextMsgNoToProcess());
+		   	pstmt.setLong(24,bean.getHighestInMessageNumber());
+		   	pstmt.setInt(25,bean.getRmdFlags());
+		    pstmt.execute();
+		    pstmt.close();
+		} catch (Exception ex) {
+			log.debug("Insert Exception  ", ex);
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	
+	public RMDBean retrieve(String sequenceID)
+	  throws SandeshaStorageException
+	{
+		RMDBean bean = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery("select * from wsrm_rmd where sequence_id='" + sequenceID + "'");
+			if ( ! rs.next() ) return bean;
+			bean = getBean(rs);
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return bean;
+	}
+	
+	public Collection retrieveAll()
+	  throws SandeshaStorageException
+	{
+		return find(null);
+	}
+	
+	public boolean update(RMDBean bean)
+	  throws SandeshaStorageException
+	{
+		log.debug("update " + bean);
+		try {
+	    	PreparedStatement pstmt = getDbConnection().prepareStatement("update wsrm_rmd set " +
+	    			"to_epr_addr=?,to_epr=?,reply_to_epr_addr=?,reply_to_epr=?,acks_to_epr_addr=?," +
+	    			"acks_to_epr=?,rm_version=?,security_token_data=?," +
+	    			"last_activated_time=?,closed=?,terminated_flag=?,polling_mode=?,service_name=?," +
+	    			"flags=?,reference_message_key=?,highest_in_message_id=?,last_in_message_id=?," +
+	    			"server_completed_messages=?,outof_order_ranges=?,to_address=?," +
+	    			"outbound_internal_sequence=?,next_msgno_to_process=?,highest_in_message_number=?,rmd_flags=?" +
+	    			" where sequence_id='" + bean.getSequenceID() + "'");
+		   	EndpointReference epr = bean.getToEndpointReference();
+		   	pstmt.setString(1,epr != null ? epr.getAddress():null);
+			// Derby don't serialize object in blob !
+			// pstmt.setObject(2, epr);
+			ByteArrayInputStream bais = serialize(epr);
+			pstmt.setBinaryStream(2, bais, bais.available());
+		   	epr = bean.getReplyToEndpointReference();
+		   	pstmt.setString(3,epr != null ? epr.getAddress():null);
+			bais = serialize(epr);
+			pstmt.setBinaryStream(4, bais, bais.available());
+		   	epr = bean.getAcksToEndpointReference();
+		   	pstmt.setString(5,epr != null ? epr.getAddress():null);
+			bais = serialize(epr);
+			pstmt.setBinaryStream(6, bais, bais.available());
+		   	pstmt.setString(7,bean.getRMVersion());
+		   	pstmt.setString(8,bean.getSecurityTokenData());
+		   	pstmt.setLong(9,bean.getLastActivatedTime());
+		   	pstmt.setInt(10,bean.isClosed() ? 1 : 0);
+		   	pstmt.setInt(11,bean.isTerminated() ? 1 : 0);
+		   	pstmt.setInt(12,bean.isPollingMode() ? 1 : 0);
+		   	pstmt.setString(13,bean.getServiceName());
+		   	pstmt.setInt(14,bean.getFlags());
+		   	pstmt.setString(15,bean.getReferenceMessageKey());
+		   	pstmt.setString(16,bean.getHighestInMessageId());
+		   	pstmt.setString(17,bean.getLastInMessageId());
+		   	RangeString rs = bean.getServerCompletedMessages();
+		   	pstmt.setString(18,rs != null ? rs.toString():null);
+		   	rs = bean.getOutOfOrderRanges();
+		   	pstmt.setString(19,rs != null ? rs.toString():null);
+		   	pstmt.setString(20,bean.getToAddress());
+		   	pstmt.setString(21,bean.getOutboundInternalSequence());
+		   	pstmt.setLong(22,bean.getNextMsgNoToProcess());
+		   	pstmt.setLong(23,bean.getHighestInMessageNumber());
+		   	pstmt.setInt(24,bean.getRmdFlags());
+		    pstmt.execute();
+		    pstmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	
+	public RMDBean findUnique(RMDBean bean)
+	  throws SandeshaStorageException
+	{
+		String sql = requestForModel(bean);
+		RMDBean result = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				if ( result == null ) {
+				 result = getBean(rs);
+				} else {
+					String message = SandeshaMessageHelper.getMessage(
+							SandeshaMessageKeys.nonUniqueResult,
+							result.toString(),
+							getBean(rs).toString());
+					log.error(message);
+					throw new SandeshaException (message);
+				}
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}		
+		return result;
+	}		
+}

Added: webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMSBeanMgr.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMSBeanMgr.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMSBeanMgr.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentRMSBeanMgr.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,614 @@
+/*
+ * 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.sandesha2.storage.jdbc;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.sql.*;
+import java.io.ByteArrayInputStream;
+
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.storage.SandeshaStorageException;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
+import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.util.RangeString;
+
+public class PersistentRMSBeanMgr extends PersistentBeanMgr implements RMSBeanMgr {
+
+	public PersistentRMSBeanMgr(PersistentStorageManager pmgr)
+	{
+		super(pmgr);
+	}
+
+	private String requestForModel(RMSBean bean)
+	{
+		StringBuilder sql = new StringBuilder(" select * from wsrm_rms");
+		if ( bean == null ) return sql.toString();
+		String op = " where ";
+		String clause = bean.getSequenceID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" sequence_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		EndpointReference epr = bean.getToEndpointReference();
+		if ( epr != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" to_epr_addr='");
+			sql.append(epr.getAddress());
+			sql.append("'");
+		}
+		epr = bean.getReplyToEndpointReference();
+		if ( epr != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" reply_to_epr_addr='");
+			sql.append(epr.getAddress());
+			sql.append("'");
+		}
+		epr = bean.getAcksToEndpointReference();
+		if ( epr != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" acks_to_epr_addr='");
+			sql.append(epr.getAddress());
+			sql.append("'");
+		}
+		clause = bean.getRMVersion();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" rm_version='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getSecurityTokenData();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" security_token_data='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getCreateSeqMsgID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" create_seq_msg_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getInternalSequenceID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" internal_sequence_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getCreateSequenceMsgStoreKey();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" create_sequence_msg_store_key='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getReferenceMessageStoreKey();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" create_sequence_msg_store_key='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getTransportTo();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" transport_to='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getOfferedEndPoint();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" offered_endpoint='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getOfferedSequence();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" offered_sequence='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getAnonymousUUID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" anonymous_uuid='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		RangeString xrs = bean.getClientCompletedMessages();
+		if ( xrs != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" client_completed_messages='");
+			sql.append(xrs.toString());
+			sql.append("'");
+		}
+		if ( (bean.getRmsFlags() & RMSBean.LAST_SEND_ERROR_TIME_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" last_send_error_timestamp=");
+			sql.append(bean.getLastSendErrorTimestamp());
+		}
+		if ( (bean.getRmsFlags() & RMSBean.LAST_OUT_MSG_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" last_out_message=");
+			sql.append(bean.getLastOutMessage());
+		}
+		if ( (bean.getRmsFlags() & RMSBean.HIGHEST_OUT_MSG_FLAG ) != 0 ) {   
+			sql.append(op);
+			op = " and ";
+			sql.append(" highest_out_message_number=");
+			sql.append(bean.getHighestOutMessageNumber());
+		}
+		if ( (bean.getRmsFlags() & RMSBean.NEXT_MSG_NUM_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" next_message_number=");
+			sql.append(bean.getNextMessageNumber());
+		}
+		if ( (bean.getRmsFlags() & RMSBean.TERMINATE_ADDED_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" terminate_added=");
+			sql.append(bean.isTerminateAdded()?1:0);
+		}
+		if ( (bean.getRmsFlags() & RMSBean.TIMED_OUT_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" timed_out=");
+			sql.append(bean.isTimedOut()?1:0);
+		}
+		if ( (bean.getRmsFlags() & RMSBean.SEQ_CLOSED_CLIENT_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" sequence_closed_client=");
+			sql.append(bean.isSequenceClosedClient()?1:0);
+		}
+		if ( (bean.getRmsFlags() & RMSBean.TERM_PAUSER_FOR_CS ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" termination_pauser_for_cs=");
+			sql.append(bean.isTerminationPauserForCS()?1:0);
+		}
+		if ( (bean.getRmsFlags() & RMSBean.EXPECTED_REPLIES ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" expected_replies=");
+			sql.append(bean.getExpectedReplies());
+		}
+		if ( (bean.getRmsFlags() & RMSBean.SOAP_VERSION_FLAG) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" soap_version=");
+			sql.append(bean.getSoapVersion());
+		}
+		
+		if ( (bean.getFlags() & RMSBean.LAST_ACTIVATED_TIME_FLAG ) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" last_activated_time=");
+			sql.append(bean.getLastActivatedTime());
+		}
+		if ( (bean.getFlags() & RMSBean.CLOSED_FLAG) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" closed=");
+			sql.append(bean.isClosed() ? 1:0);
+		}
+		if ( (bean.getFlags() & RMSBean.TERMINATED_FLAG) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" terminated_flag=");
+			sql.append(bean.isTerminated() ? 1:0);
+		}
+		if ( (bean.getFlags() & RMSBean.POLLING_MODE_FLAG) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" polling_mode=");
+			sql.append(bean.isPollingMode() ? 1:0);
+		}
+		/* only for WSRM 1.0 ?
+		if ( (bean.getFlags() & 0x0010000) != 0 ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" replay_model=");
+			sql.append(bean.isReplayModel() ? 1:0);
+		} */
+		if ( log.isDebugEnabled() ) log.debug("requestForModel " + sql.toString());
+		return sql.toString();
+	}
+	
+	private RMSBean getBean(ResultSet rs)
+	  throws Exception
+	{
+		RMSBean bean = new RMSBean();
+		bean.setSequenceID(rs.getString("sequence_id"));
+
+		Object obj = getObject(rs,"to_epr");
+		if ( obj != null ) {
+			bean.setToEndpointReference((EndpointReference)obj);
+		}
+		obj = getObject(rs,"reply_to_epr");
+		if ( obj != null ) {
+			bean.setReplyToEndpointReference((EndpointReference)obj);
+		}
+		obj = getObject(rs,"acks_to_epr");
+		if ( obj != null ) {
+			bean.setAcksToEndpointReference((EndpointReference)obj);
+		}
+		
+		bean.setRMVersion(rs.getString("rm_version"));
+		bean.setServiceName(rs.getString("service_name"));
+		bean.setSecurityTokenData(rs.getString("security_token_data"));
+		bean.setCreateSeqMsgID(rs.getString("create_seq_msg_id"));
+		bean.setTransportTo(rs.getString("transport_to"));
+		bean.setOfferedEndPoint(rs.getString("offered_endpoint"));
+		bean.setOfferedSequence(rs.getString("offered_sequence"));
+		bean.setAnonymousUUID(rs.getString("anonymous_uuid"));
+		bean.setInternalSequenceID(rs.getString("internal_sequence_id"));
+		bean.setReferenceMessageStoreKey(rs.getString("reference_msg_store_key"));
+		bean.setCreateSequenceMsgStoreKey(rs.getString("create_sequence_msg_store_key"));
+		bean.setHighestOutRelatesTo(rs.getString("highest_out_relates_to"));
+
+		obj = getObject(rs,"last_send_error");
+		if ( obj != null ) bean.setLastSendError((Exception)obj);
+
+		bean.setClientCompletedMessages(new RangeString(rs.getString("client_completed_messages")));
+		
+		bean.setLastSendErrorTimestamp(rs.getLong("last_send_error_timestamp"));
+		bean.setLastOutMessage(rs.getLong("last_out_message"));
+		bean.setHighestOutMessageNumber(rs.getLong("highest_out_message_number"));
+		bean.setNextMessageNumber(rs.getLong("next_message_number"));
+		bean.setLastActivatedTime(rs.getLong("last_activated_time"));
+		bean.setExpectedReplies(rs.getLong("expected_replies"));
+		
+		bean.setClosed(rs.getInt("closed")!= 0 ? true:false);
+		bean.setPollingMode(rs.getInt("polling_mode")!= 0 ? true:false);
+		bean.setTerminated(rs.getInt("terminated_flag")!= 0 ? true:false);
+		bean.setTerminateAdded(rs.getInt("terminate_added")!= 0 ? true:false);
+		bean.setTimedOut(rs.getInt("timed_out")!= 0 ? true:false);
+		bean.setSequenceClosedClient(rs.getInt("sequence_closed_client")!= 0 ? true:false);
+		bean.setTerminationPauserForCS(rs.getInt("termination_pauser_for_cs")!= 0 ? true:false);
+		bean.setAvoidAutoTermination(rs.getInt("avoid_auto_termination")!= 0 ? true:false);
+		
+		bean.setSoapVersion(rs.getInt("soap_version"));
+		bean.setFlags(rs.getInt("flags"));
+		bean.setRmsFlags(rs.getInt("rms_flags"));
+		return bean;
+	}
+
+
+	public boolean delete(String msgId)
+	  throws SandeshaStorageException
+	{
+		if(log.isDebugEnabled()) log.debug("delete RMSBean msgId " + msgId);
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			stmt.executeUpdate("delete from wsrm_rms where create_seq_msg_id='" + msgId + "'");
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException("Exception in RMSBeanMgr delete", ex);
+		}
+		return true;
+	}
+	
+	public List find(RMSBean bean)
+	  throws SandeshaStorageException
+	{
+		String sql = requestForModel(bean);
+		ArrayList<RMSBean> lst = new ArrayList<RMSBean>();
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				lst.add(getBean(rs));
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException("Exception in RMSBeanMgr find : " + sql, ex);
+		}
+		return lst;
+	}
+
+	
+	public boolean insert(RMSBean bean)
+	  throws SandeshaStorageException
+	{
+		log.debug("insert RMSBean " + bean);
+		try {
+		    PreparedStatement pstmt = getDbConnection().prepareStatement("insert into wsrm_rms(" +
+		    		"create_seq_msg_id,sequence_id,to_epr_addr,to_epr,reply_to_epr_addr,reply_to_epr,acks_to_epr_addr,acks_to_epr,rm_version,security_token_data," +
+		    		"last_activated_time,closed,terminated_flag,polling_mode,service_name," +
+		    		"flags,id,internal_sequence_id,create_sequence_msg_store_key," +
+		    		"reference_msg_store_key,last_send_error,highest_out_relates_to," +
+		    		"client_completed_messages,transport_to,offered_endpoint,offered_sequence," +
+		    		"anonymous_uuid,last_send_error_timestamp,last_out_message,highest_out_message_number," +
+		    		"next_message_number,terminate_added,timed_out,sequence_closed_client," +
+		    		"expected_replies,soap_version,termination_pauser_for_cs,avoid_auto_termination," +
+		    		"rms_flags)values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+			 pstmt.setString(1,bean.getCreateSeqMsgID());
+			 pstmt.setString(2,bean.getSequenceID());
+			 EndpointReference epr = bean.getToEndpointReference();
+			 pstmt.setString(3,epr != null ? epr.getAddress():null);
+			 // Derby don't serialize object in blob !
+			 // pstmt.setObject(4, epr);
+			 ByteArrayInputStream bais = serialize(epr);
+			 pstmt.setBinaryStream(4, bais, bais.available());
+			 epr = bean.getReplyToEndpointReference();
+			 pstmt.setString(5,epr != null ? epr.getAddress():null);
+			 bais = serialize(epr);
+			 pstmt.setBinaryStream(6, bais, bais.available());
+			 epr = bean.getAcksToEndpointReference();
+			 pstmt.setString(7,epr != null ? epr.getAddress():null);
+			 bais = serialize(epr);
+			 pstmt.setBinaryStream(8, bais, bais.available());
+			 pstmt.setString(9,bean.getRMVersion());
+			 pstmt.setString(10,bean.getSecurityTokenData());
+			 pstmt.setLong(11,bean.getLastActivatedTime());
+			 pstmt.setInt(12,bean.isClosed() ? 1 : 0);
+			 pstmt.setInt(13,bean.isTerminated() ? 1 : 0);
+			 pstmt.setInt(14,bean.isPollingMode() ? 1 : 0);
+			 pstmt.setString(15,bean.getServiceName());
+			 pstmt.setInt(16,bean.getFlags());
+			 pstmt.setLong(17,bean.getId());
+			 pstmt.setString(18,bean.getInternalSequenceID());
+			 pstmt.setString(19,bean.getCreateSequenceMsgStoreKey());
+			 pstmt.setString(20,bean.getReferenceMessageStoreKey());
+			 bais = serialize(bean.getLastSendError());
+			 pstmt.setBinaryStream(21, bais, bais.available());
+			 pstmt.setString(22,bean.getHighestOutRelatesTo());
+			 RangeString rs = bean.getClientCompletedMessages();
+			 pstmt.setString(23,rs != null ? rs.toString():null);
+			 pstmt.setString(24,bean.getTransportTo());
+			 pstmt.setString(25,bean.getOfferedEndPoint());
+			 pstmt.setString(26,bean.getOfferedSequence());
+			 pstmt.setString(27,bean.getAnonymousUUID());
+			 pstmt.setLong(28,bean.getLastSendErrorTimestamp());
+			 pstmt.setLong(29,bean.getLastOutMessage());
+			 pstmt.setLong(30,bean.getHighestOutMessageNumber());
+			 pstmt.setLong(31,bean.getNextMessageNumber());
+			 pstmt.setInt(32,bean.isTerminateAdded() ? 1:0);
+			 pstmt.setInt(33,bean.isTimedOut() ? 1:0);
+			 pstmt.setInt(34,bean.isSequenceClosedClient() ? 1:0);
+			 pstmt.setLong(35,bean.getExpectedReplies());
+			 pstmt.setInt(36,bean.getSoapVersion());
+			 pstmt.setInt(37,bean.isTerminationPauserForCS() ? 1:0);
+			 pstmt.setInt(38,bean.isAvoidAutoTermination() ? 1:0);
+			 pstmt.setInt(39,bean.getRmsFlags());
+			 pstmt.execute();
+			 pstmt.close();
+		} catch (Exception ex) {
+			log.debug("Insert Exception  ", ex);
+			throw new SandeshaStorageException("Exception in RMSBeanMgr insert", ex);
+		}
+		return true;
+	}
+	
+	public RMSBean retrieve(String msgId)
+	  throws SandeshaStorageException
+	{
+		log.debug("Retrieve  msdId " + msgId);
+		RMSBean bean = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery("select * from wsrm_rms where create_seq_msg_id='" + msgId + "'");
+			if ( rs.next() ) bean = getBean(rs);
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			log.debug("Retrieve Exception  ", ex);
+			throw new SandeshaStorageException("Exception in RMSBeanMgr retrieve", ex);
+		}
+		log.debug("Retrieve  return " + bean);
+		return bean;
+	}
+	
+	public boolean update(RMSBean bean)
+	  throws SandeshaStorageException
+	{
+		if ( log.isDebugEnabled()) {
+		  log.debug("Update bean : " + bean);
+		}
+			try {
+		    	PreparedStatement pstmt = getDbConnection().prepareStatement("update wsrm_rms set " +
+		    			"sequence_id=?,to_epr_addr=?,to_epr=?,reply_to_epr_addr=?,reply_to_epr=?,acks_to_epr_addr=?,acks_to_epr=?,rm_version=?,security_token_data=?," +
+		    			"last_activated_time=?,closed=?,terminated_flag=?,polling_mode=?,service_name=?," +
+		    			"flags=?,id=?,internal_sequence_id=?,create_sequence_msg_store_key=?," +
+		    			"reference_msg_store_key=?,last_send_error=?,highest_out_relates_to=?," +
+		    			"client_completed_messages=?,transport_to=?,offered_endpoint=?,offered_sequence=?," +
+		    			"anonymous_uuid=?,last_send_error_timestamp=?,last_out_message=?,highest_out_message_number=?," +
+		    			"next_message_number=?,terminate_added=?,timed_out=?,sequence_closed_client=?," +
+		    			"expected_replies=?,soap_version=?,termination_pauser_for_cs=?,avoid_auto_termination=?," +
+		    			"rms_flags=?" +
+		    			" where create_seq_msg_id='" + bean.getCreateSeqMsgID() + "'");
+			   	pstmt.setString(1,bean.getSequenceID());
+			   	EndpointReference epr = bean.getToEndpointReference();
+			   	pstmt.setString(2,epr != null ? epr.getAddress():null);
+				 // Derby don't serialize object in blob !
+				 // pstmt.setObject(3, epr);
+				 ByteArrayInputStream bais = serialize(epr);
+				 pstmt.setBinaryStream(3, bais, bais.available());
+			   	epr = bean.getReplyToEndpointReference();
+			   	pstmt.setString(4,epr != null ? epr.getAddress():null);
+				 bais = serialize(epr);
+				 pstmt.setBinaryStream(5, bais, bais.available());
+			   	epr = bean.getAcksToEndpointReference();
+			   	pstmt.setString(6,epr != null ? epr.getAddress():null);
+				 bais = serialize(epr);
+				 pstmt.setBinaryStream(7, bais, bais.available());
+			   	pstmt.setString(8,bean.getRMVersion());
+			   	pstmt.setString(9,bean.getSecurityTokenData());
+			   	pstmt.setLong(10,bean.getLastActivatedTime());
+			   	pstmt.setInt(11,bean.isClosed() ? 1 : 0);
+			   	pstmt.setInt(12,bean.isTerminated() ? 1 : 0);
+			   	pstmt.setInt(13,bean.isPollingMode() ? 1 : 0);
+			   	pstmt.setString(14,bean.getServiceName());
+			   	pstmt.setInt(15,bean.getFlags());
+			   	pstmt.setLong(16,bean.getId());
+			   	pstmt.setString(17,bean.getInternalSequenceID());
+			   	pstmt.setString(18,bean.getCreateSequenceMsgStoreKey());
+			   	pstmt.setString(19,bean.getReferenceMessageStoreKey());
+				 bais = serialize(bean.getLastSendError());
+				 pstmt.setBinaryStream(20, bais, bais.available());
+			   	pstmt.setString(21,bean.getHighestOutRelatesTo());
+			   	RangeString rs = bean.getClientCompletedMessages();
+			   	pstmt.setString(22,rs != null ? rs.toString():null);
+			   	pstmt.setString(23,bean.getTransportTo());
+			   	pstmt.setString(24,bean.getOfferedEndPoint());
+			   	pstmt.setString(25,bean.getOfferedSequence());
+			   	pstmt.setString(26,bean.getAnonymousUUID());
+			   	pstmt.setLong(27,bean.getLastSendErrorTimestamp());
+			   	pstmt.setLong(28,bean.getLastOutMessage());
+			   	pstmt.setLong(29,bean.getHighestOutMessageNumber());
+			   	pstmt.setLong(30,bean.getNextMessageNumber());
+			   	pstmt.setInt(31,bean.isTerminateAdded() ? 1:0);
+			   	pstmt.setInt(32,bean.isTimedOut() ? 1:0);
+			   	pstmt.setInt(33,bean.isSequenceClosedClient() ? 1:0);
+			   	pstmt.setLong(34,bean.getExpectedReplies());
+			   	pstmt.setInt(35,bean.getSoapVersion());
+			   	pstmt.setInt(36,bean.isTerminationPauserForCS() ? 1:0);
+			   	pstmt.setInt(37,bean.isAvoidAutoTermination() ? 1:0);
+			   	pstmt.setInt(38,bean.getRmsFlags());
+			    pstmt.execute();
+			    pstmt.close();
+			} catch (Exception ex) {
+				log.error("Update Exception " + ex);
+				throw new SandeshaStorageException("Exception in RMSBeanMgr update", ex);
+			}
+			return true;
+		}
+	
+	public RMSBean findUnique(RMSBean bean)
+	  throws SandeshaStorageException
+	{
+		String sql = requestForModel(bean);
+		RMSBean result = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				if ( result == null ) {
+					result = getBean(rs);
+				} else {
+					String message = SandeshaMessageHelper.getMessage(
+							SandeshaMessageKeys.nonUniqueResult,
+							result.toString(),
+							getBean(rs).toString());
+					log.error(message);
+					throw new SandeshaException (message);
+				}
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			log.error("Exception in findUnique " + ex);
+			throw new SandeshaStorageException("Exception in PersistentRMSBeanManager::findUnique", ex);
+		}		
+		log.debug("FindUnique RMSBean : " + result);
+		return result;
+	}
+
+    public RMSBean retrieveBySequenceID(String seqId) throws SandeshaStorageException {
+        RMSBean dummyBean = new RMSBean();
+        dummyBean.setSequenceID(seqId);
+        String sql = requestForModel(dummyBean);
+		RMSBean result = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				if ( result == null ) {
+					result = getBean(rs);
+				} else {
+					String message = SandeshaMessageHelper.getMessage(
+							SandeshaMessageKeys.nonUniqueResult,
+							result.toString(),
+							getBean(rs).toString());
+					log.error(message);
+					throw new SandeshaException (message);
+				}
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			log.error("Exception in findUnique " + ex);
+			throw new SandeshaStorageException("Exception in PersistentRMSBeanManager::findUnique", ex);
+		}
+		log.debug("FindUnique RMSBean : " + result);
+		return result;
+    }
+
+    public RMSBean retrieveByInternalSequenceID(String internalSeqId) throws SandeshaStorageException {
+        RMSBean dummyBean = new RMSBean();
+        dummyBean.setInternalSequenceID(internalSeqId);
+        String sql = requestForModel(dummyBean);
+		RMSBean result = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				if ( result == null ) {
+					result = getBean(rs);
+				} else {
+					String message = SandeshaMessageHelper.getMessage(
+							SandeshaMessageKeys.nonUniqueResult,
+							result.toString(),
+							getBean(rs).toString());
+					log.error(message);
+					throw new SandeshaException (message);
+				}
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			log.error("Exception in findUnique " + ex);
+			throw new SandeshaStorageException("Exception in PersistentRMSBeanManager::findUnique", ex);
+		}
+		log.debug("FindUnique RMSBean : " + result);
+		return result;
+    }
+}

Added: webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentSenderBeanMgr.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentSenderBeanMgr.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentSenderBeanMgr.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentSenderBeanMgr.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,410 @@
+/*
+ * 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.sandesha2.storage.jdbc;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.storage.SandeshaStorageException;
+import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.storage.beans.SenderBean;
+
+/**
+ * Manages Sender Beans
+ */
+public class PersistentSenderBeanMgr extends PersistentBeanMgr implements SenderBeanMgr {
+
+	public PersistentSenderBeanMgr(PersistentStorageManager pmgr)
+	{
+		super(pmgr);
+	}
+	
+	private String requestForModel(SenderBean bean)
+	{
+		StringBuilder sql = new StringBuilder("select * from wsrm_sender");
+		if ( bean == null ) return sql.toString();
+		String op = " where ";
+		String clause = bean.getSequenceID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" sequence_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getMessageID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" message_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getMessageContextRefKey();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" message_context_ref_key='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getInternalSequenceID();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" internal_sequence_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getToAddress();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" to_address='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		clause = bean.getInboundSequenceId();
+		if ( clause != null ) {
+			sql.append(op);
+			op = " and ";
+			sql.append(" inbound_sequence_id='");
+			sql.append(clause);
+			sql.append("'");
+		}
+		
+		if ( (bean.getFlags() & SenderBean.SEND_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" send=");
+			sql.append(bean.isSend() ? 1:0);
+		}
+		if ( (bean.getFlags() & SenderBean.SEND_COUNT_FLAG ) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" sent_count=");
+			sql.append(bean.getSentCount());
+		}
+		if ( (bean.getFlags() & 0x00000100) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" message_number=");
+			sql.append(bean.getMessageNumber());
+		}
+		if ( (bean.getFlags() & 0x00001000) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" resend=");
+			sql.append(bean.isReSend() ? 1:0);
+		}
+		if ( (bean.getFlags() & 0x00010000) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" time_to_send<=");
+			sql.append(bean.getTimeToSend());
+		}
+		if ( (bean.getFlags() & 0x00100000) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" message_type=");
+			sql.append(bean.getMessageType());
+		}
+		if ( (bean.getFlags() & 0x01000000) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" last_message=");
+			sql.append(bean.isLastMessage() ? 1:0);
+		}
+		if ( (bean.getFlags() & 0x10000000) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" inbound_message_number=");
+			sql.append(bean.getInboundMessageNumber());
+		}
+		if ( (bean.getFlags() & 0x00000002) != 0 ) { 
+			sql.append(op);
+			op = " and ";
+			sql.append(" transport_available=");
+			sql.append(bean.isTransportAvailable() ? 1:0);
+		}
+		log.debug("requestForModel " + sql.toString());
+		return sql.toString();
+	}
+	
+	private SenderBean getBean(ResultSet rs)
+	  throws Exception
+	{
+		SenderBean bean = new SenderBean();
+		bean.setMessageID(rs.getString("message_id"));
+		bean.setMessageContextRefKey(rs.getString("message_context_ref_key"));
+		bean.setSequenceID(rs.getString("sequence_id"));
+		bean.setInternalSequenceID(rs.getString("internal_sequence_id"));
+		bean.setToAddress(rs.getString("to_address"));
+		bean.setInboundSequenceId(rs.getString("inbound_sequence_id"));
+				
+		bean.setMessageNumber(rs.getLong("message_number"));
+		bean.setTimeToSend(rs.getLong("time_to_send"));
+		bean.setInboundMessageNumber(rs.getLong("inbound_message_number"));
+		
+		bean.setSend(rs.getInt("send")!= 0 ? true:false);
+		bean.setReSend(rs.getInt("resend")!= 0 ? true:false);
+		bean.setLastMessage(rs.getInt("last_message")!= 0 ? true:false);
+		bean.setTransportAvailable(rs.getInt("transport_available")!= 0 ? true:false);
+		
+		bean.setSentCount(rs.getInt("sent_count"));
+		bean.setMessageType(rs.getInt("message_type"));
+		bean.setFlags(rs.getInt("flags"));
+		return bean;
+	}
+
+	public boolean delete(String messageID)
+	  throws SandeshaStorageException
+	{
+		if ( log.isDebugEnabled() ) log.debug("Delete MsgID " + messageID);
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			stmt.executeUpdate("delete from wsrm_sender where message_id='" + messageID + "'");
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	
+	public List find(SenderBean bean)
+	  throws SandeshaStorageException
+	{
+		String sql = requestForModel(bean);
+		ArrayList<SenderBean> lst = new ArrayList<SenderBean>();
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				lst.add(getBean(rs));
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return lst;
+	}
+
+	
+	public List find(String internalSequenceId)
+	  throws SandeshaStorageException
+		{
+			ArrayList<SenderBean> lst = new ArrayList<SenderBean>();
+			try {
+				Statement stmt = getDbConnection().createStatement();
+				ResultSet rs = stmt.executeQuery("select * from wsrm_sender where internal_sequence_id='" +
+						internalSequenceId + "'");
+				while ( rs.next() ) {
+					lst.add(getBean(rs));
+				}
+				rs.close();
+				stmt.close();
+			} catch (Exception ex) {
+				throw new SandeshaStorageException(ex);
+			}
+			return lst;
+		}
+	
+	public SenderBean getNextMsgToSend(String sequenceId)
+	  throws SandeshaStorageException
+	{
+	  SenderBean result = null;
+	  try {
+		Statement stmt = getDbConnection().createStatement();
+		String sql = "select * from wsrm_sender where sequence_id";
+		if ( sequenceId == null ) sql += " is null ";
+		else sql += "='" + sequenceId + "' ";
+		sql += "and transport_available=1 and send=1";
+		log.debug("getNextMsgToSend " + sql);
+		ResultSet rs = stmt.executeQuery(sql);
+		long timeNow = System.currentTimeMillis();
+		log.debug("getNextMsgToSend timeNow " + timeNow);
+		while (rs.next()) {
+			if ( timeNow >= rs.getLong("time_to_send") ) {
+			  result = getBean(rs);
+			  break;
+			}
+		}
+		rs.close();
+		stmt.close();
+	  } catch (Exception ex) {
+			log.error("getNextMsgToSend Exception" + ex);
+			throw new SandeshaStorageException(ex);
+	  }
+	  if(log.isDebugEnabled()) log.debug("Exit getNextMessageToSend " + result);
+	  return result;
+	}
+	
+	public boolean insert(SenderBean bean)
+	  throws SandeshaStorageException
+	{
+		if ( log.isDebugEnabled() ) log.debug("Insert " + bean);
+		try {
+		    PreparedStatement pstmt = getDbConnection().prepareStatement("insert into wsrm_sender(" +
+		    		"message_id, message_context_ref_key, internal_sequence_id, sequence_id," +
+		    		"to_address, inbound_sequence_id, send, sent_count, message_number, resend," +
+		    		"time_to_send, message_type, last_message, inbound_message_number, transport_available," +
+		    		"flags)values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+			 pstmt.setString(1,bean.getMessageID());
+			 pstmt.setString(2,bean.getMessageContextRefKey());
+			 pstmt.setString(3,bean.getInternalSequenceID());
+			 pstmt.setString(4,bean.getSequenceID());
+			 pstmt.setString(5,bean.getToAddress());
+			 pstmt.setString(6,bean.getInboundSequenceId());
+			 pstmt.setInt(7,bean.isSend() ? 1 : 0);
+			 pstmt.setInt(8,bean.getSentCount());
+			 pstmt.setLong(9,bean.getMessageNumber());
+			 pstmt.setInt(10,bean.isReSend() ? 1 : 0);
+			 pstmt.setLong(11,bean.getTimeToSend());
+			 pstmt.setInt(12,bean.getMessageType());
+			 pstmt.setInt(13,bean.isLastMessage() ? 1 : 0);
+			 pstmt.setLong(14,bean.getInboundMessageNumber());
+			 pstmt.setInt(15,bean.isTransportAvailable() ? 1 : 0);
+			 pstmt.setInt(16,bean.getFlags());
+			 pstmt.execute();
+			 pstmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	
+	public SenderBean retrieve(String messageID)
+	  throws SandeshaStorageException
+	{
+		SenderBean bean = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery("select * from wsrm_sender where message_id='" + messageID + "'");
+			if ( ! rs.next() ) return bean;
+			bean = getBean(rs);
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}
+		return bean;
+	}
+	
+	public boolean update(SenderBean bean)
+	  throws SandeshaStorageException
+	{
+		if ( log.isDebugEnabled() ) log.debug("Update " + bean);
+		try {
+		    PreparedStatement pstmt = getDbConnection().prepareStatement("update wsrm_sender set " +
+		    		"message_context_ref_key=?, internal_sequence_id=?, sequence_id=?," +
+		    		"to_address=?, inbound_sequence_id=?, send=?, sent_count=?, message_number=?, resend=?," +
+		    		"time_to_send=?, message_type=?, last_message=?, inbound_message_number=?, transport_available=?," +
+		    		"flags=? where message_id='" + bean.getMessageID() + "'");
+			 pstmt.setString(1,bean.getMessageContextRefKey());
+			 pstmt.setString(2,bean.getInternalSequenceID());
+			 pstmt.setString(3,bean.getSequenceID());
+			 pstmt.setString(4,bean.getToAddress());
+			 pstmt.setString(5,bean.getInboundSequenceId());
+			 pstmt.setInt(6,bean.isSend() ? 1 : 0);
+			 pstmt.setInt(7,bean.getSentCount());
+			 pstmt.setLong(8,bean.getMessageNumber());
+			 pstmt.setInt(9,bean.isReSend() ? 1 : 0);
+			 pstmt.setLong(10,bean.getTimeToSend());
+			 pstmt.setInt(11,bean.getMessageType());
+			 pstmt.setInt(12,bean.isLastMessage() ? 1 : 0);
+			 pstmt.setLong(13,bean.getInboundMessageNumber());
+			 pstmt.setInt(14,bean.isTransportAvailable() ? 1 : 0);
+			 pstmt.setInt(15,bean.getFlags());
+			 pstmt.execute();
+			 pstmt.close();
+		} catch (Exception ex) {
+			log.error("Update Exception " + ex);
+			throw new SandeshaStorageException(ex);
+		}
+		return true;
+	}
+	
+	public SenderBean findUnique(SenderBean bean)
+	  throws SandeshaStorageException
+	{
+		String sql = requestForModel(bean);
+		SenderBean result = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery(sql);
+			while ( rs.next() ) {
+				if ( result == null ) {
+					result = getBean(rs);
+				} else {
+					String message = SandeshaMessageHelper.getMessage(
+							SandeshaMessageKeys.nonUniqueResult,
+							result.toString(),
+							getBean(rs).toString());
+					log.error(message);
+					throw new SandeshaException (message);
+				}
+			}
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			throw new SandeshaStorageException(ex);
+		}		
+		return result;
+	}
+
+	public SenderBean retrieveFromMessageRefKey(String messageContextRefKey)
+	{
+		SenderBean bean = null;
+		try {
+			Statement stmt = getDbConnection().createStatement();
+			ResultSet rs = stmt.executeQuery("select * from wsrm_sender where message_context_ref_key='" + messageContextRefKey + "'");
+			if ( ! rs.next() ) return bean;
+			bean = getBean(rs);
+			rs.close();
+			stmt.close();
+		} catch (Exception ex) {
+			return null;
+		}
+		return bean;
+	}
+
+    public SenderBean retrieve(String sequnceId, long messageNumber) throws SandeshaStorageException {
+        SenderBean bean = null;
+        try {
+            Statement stmt = getDbConnection().createStatement();
+            ResultSet rs = stmt.executeQuery("select * from wsrm_sender where sequence_id='" + sequnceId + "' " +
+                    " and message_number=" + messageNumber);
+            if (! rs.next()) return bean;
+            bean = getBean(rs);
+            rs.close();
+            stmt.close();
+        } catch (Exception ex) {
+            return null;
+        }
+        return bean;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org