[savara-commits] savara SVN: r636 - in branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms: src and 14 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Feb 4 06:35:10 EST 2011


Author: jeff.yuchang
Date: 2011-02-04 06:35:10 -0500 (Fri, 04 Feb 2011)
New Revision: 636

Added:
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/DummySession.java
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPAJTAContext.java
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPANonTxContext.java
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSession.java
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/TxContext.java
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/resources/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/resources/META-INF/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/resources/META-INF/persistence.xml
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/monitor/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/monitor/sstore/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/monitor/sstore/rdbms/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStoreTest.java
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/resources/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/resources/META-INF/
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/resources/META-INF/persistence.xml
Modified:
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/pom.xml
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStore.java
   branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/osgi/Activator.java
Log:
*SAVARA-166, first working prototype, will update the API according to the discussed result in forum in my next commit.


Modified: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/pom.xml
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/pom.xml	2011-02-03 18:53:07 UTC (rev 635)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/pom.xml	2011-02-04 11:35:10 UTC (rev 636)
@@ -12,6 +12,14 @@
 		<artifactId>bundles</artifactId>
 		<version>2.0.0-SNAPSHOT</version>
 	</parent>
+	
+	<properties>
+		<hibernate.version>3.3.2.GA</hibernate.version>
+		<hibernate.entitymanager.version>3.4.0.GA</hibernate.entitymanager.version>
+		<javassist.version>3.9.0.GA</javassist.version>
+		<h2.version>1.2.131</h2.version>
+		<slf4j.version>1.4.3</slf4j.version>
+	</properties>
   
 	<dependencies>
 		<dependency>
@@ -25,6 +33,18 @@
 			<version>${savara.version}</version>
 		</dependency>
 	    <dependency>
+	      <groupId>javax.persistence</groupId>
+	      <artifactId>persistence-api</artifactId>
+	      <version>1.0</version>
+	      <scope>provided</scope>
+	    </dependency>
+		<dependency>
+	      <groupId>org.apache.geronimo.specs</groupId>
+	      <artifactId>geronimo-jta_1.1_spec</artifactId>
+	      <version>1.1</version>
+	      <scope>provided</scope>
+	    </dependency>		
+	    <dependency>
 	      <groupId>org.apache.felix</groupId>
 	      <artifactId>org.osgi.core</artifactId>
 	      <version>${osgi.version}</version>
@@ -35,5 +55,53 @@
            	<version>${junit.version}</version>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+	      <groupId>com.h2database</groupId>
+	      <artifactId>h2</artifactId>
+	      <version>${h2.version}</version>
+	      <scope>test</scope>
+	    </dependency>
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-core</artifactId>
+			<version>${hibernate.version}</version>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>jta</groupId>
+					<artifactId>javax.transaction</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-entitymanager</artifactId>
+			<version>${hibernate.entitymanager.version}</version>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>jta</groupId>
+					<artifactId>javax.transaction</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		 <dependency>
+		      <groupId>org.hibernate</groupId>
+		      <artifactId>hibernate-annotations</artifactId>
+		      <version>3.4.0.GA</version>
+		      <scope>test</scope>
+		 </dependency>
+		 <dependency>
+		      <groupId>javassist</groupId>
+		      <artifactId>javassist</artifactId>
+		      <version>${javassist.version}</version>
+		      <scope>test</scope>
+		 </dependency> 
+		 <dependency>
+		      <groupId>org.slf4j</groupId>
+		      <artifactId>slf4j-log4j12</artifactId>
+		      <version>${slf4j.version}</version>
+		      <scope>test</scope>
+		 </dependency>    
    </dependencies>
 </project>

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/DummySession.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/DummySession.java	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/DummySession.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,21 @@
+package org.savara.monitor.sstore.rdbms;
+
+import java.io.Serializable;
+
+public class DummySession implements Serializable{
+
+	private static final long serialVersionUID = -6624913741004684358L;
+	
+	private String description;
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+	
+	
+}

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPAJTAContext.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPAJTAContext.java	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPAJTAContext.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,75 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.savara.monitor.sstore.rdbms;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.persistence.EntityManager;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+
+/**
+ * 
+ * 
+ * @author Jeff Yu
+ *
+ */
+public class JPAJTAContext implements TxContext {
+	
+	private static Logger logger = Logger.getLogger(JPAJTAContext.class.getName());
+	
+	private TransactionManager txManager;
+	
+	private EntityManager em;
+	
+	public JPAJTAContext(TransactionManager txManager, EntityManager em) {
+		this.txManager = txManager;
+		this.em = em;
+	}
+	
+	public void begin() {
+		try {
+			if (txManager.getStatus() == Status.STATUS_ACTIVE) {
+				em.joinTransaction();
+			}
+		}catch (SystemException e) {
+			logger.log(Level.SEVERE, "error in joining in transaction");
+			throw new RuntimeException(e);
+		}
+
+	}
+
+	public void commit() {
+
+	}
+
+	public void rollback() {
+		try {
+			if (txManager.getStatus() == Status.STATUS_ACTIVE) {
+				txManager.setRollbackOnly();
+			}
+		}catch (SystemException e) {
+			logger.log(Level.SEVERE, "unable to set roll back.");
+			throw new RuntimeException(e);
+		}
+
+	}
+
+}

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPANonTxContext.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPANonTxContext.java	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/JPANonTxContext.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.savara.monitor.sstore.rdbms;
+
+import javax.persistence.EntityManager;
+
+/**
+ * 
+ * @author Jeff Yu
+ *
+ */
+public class JPANonTxContext implements TxContext {
+	
+	private EntityManager em;
+	
+	public JPANonTxContext(EntityManager em) {
+		this.em = em;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.savara.monitor.sstore.rdbms.TxContext#begin()
+	 */
+	public void begin() {
+		em.getTransaction().begin();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.savara.monitor.sstore.rdbms.TxContext#commit()
+	 */
+	public void commit() {
+		em.getTransaction().commit();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.savara.monitor.sstore.rdbms.TxContext#rollback()
+	 */
+	public void rollback() {
+		em.getTransaction().rollback();
+	}
+
+}

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSession.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSession.java	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSession.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,185 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.savara.monitor.sstore.rdbms;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+/**
+ * 
+ * 
+ * @author Jeff Yu
+ *
+ */
+ at Entity
+ at Table(name="SAVARA_SESSION")
+ at NamedQueries({
+	@NamedQuery(name=RDBMSSession.GET_SESSION_BY_KEY, query="select s from RDBMSSession as s where s.protocolName = :name and s.protocolRole = :role and s.conversationInstanceId = :id"),
+	@NamedQuery(name=RDBMSSession.REMOVE_SESSION_BY_KEY, query="delete from RDBMSSession as s where s.protocolName = :name and s.protocolRole = :role and s.conversationInstanceId = :id")
+})
+public class RDBMSSession implements Serializable{
+	
+	public static final String GET_SESSION_BY_KEY = "GET_SESSION_BY_KEY";
+	
+	public static final String REMOVE_SESSION_BY_KEY = "REMOVE_SESSION_BY_KEY";
+	
+	private static final long serialVersionUID = 5514308301188696320L;
+
+	private static final Logger logger = Logger.getLogger(RDBMSSession.class.toString()) ;
+	
+	private long id;
+
+	private String protocolName;
+	
+	private String protocolRole;
+	
+	private String conversationInstanceId;
+	
+	private Serializable session;	
+	
+	
+	@Id
+	@Column(name="ID")
+	@GeneratedValue(strategy= GenerationType.AUTO)
+	public long getId() {
+		return id;
+	}
+
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	
+	@Column(name="PROTOCOL_NAME")
+	public String getProtocolName() {
+		return protocolName;
+	}
+
+
+	public void setProtocolName(String protocolName) {
+		this.protocolName = protocolName;
+	}
+
+	@Column(name="PROTOCOL_ROLE")
+	public String getProtocolRole() {
+		return protocolRole;
+	}
+
+
+	public void setProtocolRole(String protocolRole) {
+		this.protocolRole = protocolRole;
+	}
+
+	@Column(name="CONVERSATION_INSTANCE_ID")
+	public String getConversationInstanceId() {
+		return conversationInstanceId;
+	}
+
+
+	public void setConversationInstanceId(String conversationInstanceId) {
+		this.conversationInstanceId = conversationInstanceId;
+	}
+
+	@Transient
+	public Serializable getSession() {
+		return session;
+	}
+
+
+	public void setSession(Serializable session) {
+		this.session = session;
+	}
+
+	@Lob
+	@Column(name = "SESSION_IN_BYTE")
+	public byte[] getByteSession() {
+		if (this.session != null) {
+			ByteArrayOutputStream bos = new ByteArrayOutputStream();
+			ObjectOutputStream os = null;
+			try {
+				os = new ObjectOutputStream(bos);
+				os.writeObject(this.session);
+				return bos.toByteArray();
+			} catch (Exception e) {
+				logger.log(Level.SEVERE, "Error in getting session in byte.");
+			} finally {
+				try {
+					if (os != null) {
+						os.close();
+					}
+				} catch (IOException e) {
+					logger.log(Level.SEVERE, "Error in closing ObjectOutputStream.");
+				}
+			}
+		}
+		return null;
+	}
+
+
+	public void setByteSession(byte[] byteSession) {
+		if (byteSession != null && byteSession.length > 0) {
+			ByteArrayInputStream bis = new ByteArrayInputStream(byteSession);
+			ObjectInputStream is = null;
+			try {
+				is = new ObjectInputStream(bis);
+				this.session = (Serializable)is.readObject();
+			} catch (Exception e) {
+				logger.log(Level.SEVERE, "error in set session in byte");
+			} finally {
+				if (is != null) {
+					try {
+						is.close();
+					} catch (IOException e) {
+						logger.log(Level.SEVERE, "Error in closing ObjectInputStream.");
+					}
+				}
+			}
+		}
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (o instanceof RDBMSSession) {
+			RDBMSSession s = (RDBMSSession) o;
+			if (s.getId() == this.id) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	
+}

Modified: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStore.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStore.java	2011-02-03 18:53:07 UTC (rev 635)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStore.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -17,6 +17,18 @@
  */
 package org.savara.monitor.sstore.rdbms;
 
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.transaction.TransactionManager;
+
 import org.savara.common.config.Configuration;
 import org.savara.monitor.ConversationInstanceId;
 import org.savara.monitor.SessionStore;
@@ -25,83 +37,166 @@
 /**
  * This class defines the RDBMS implementation of the SessionStore
  * interface.
+ * 
+ * @author Jeff Yu
  *
  */
 public class RDBMSSessionStore implements SessionStore {
-
-	/**
-	 * This method sets the configuration for use by the session
-	 * store.
-	 * 
-	 *  @param config The configuration
-	 *  @throws IOException Failed to initialize session store
+		
+	private static final Logger logger = Logger.getLogger(RDBMSSessionStore.class.toString());
+	
+	private static  EntityManagerFactory emf;
+	
+	private EntityManager entityManager;
+	
+	private TransactionManager txManager;
+	
+	private TxContext tx;
+	
+	public RDBMSSessionStore(TransactionManager txManager) {
+		this.txManager = txManager;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.savara.monitor.SessionStore#initialize(org.savara.common.config.Configuration)
 	 */
 	public void initialize(Configuration config) throws java.io.IOException {
+		if (emf == null) {
+			Map<String, String> props = new HashMap<String, String>();
+			//TODO: convert some of configuration properties into props map.
+			emf = Persistence.createEntityManagerFactory("savara-session", props);
+		}
+		if (entityManager == null || !entityManager.isOpen()) {
+			entityManager = emf.createEntityManager();
+		}
+		
+		if (txManager != null) {
+			tx = new JPAJTAContext(txManager, entityManager);
+		} else {
+			tx = new JPANonTxContext(entityManager);
+		}
 	}
 	
-	/**
-	 * This method returns a new session associated with
-	 * the supplied protocol and conversation instance id.
-	 * 
-	 * @param pid The protocol id
-	 * @param cid The conversation instance id
-	 * @return The session
-	 * @throws IllegalArgumentException Protocol or conversation instance id is invalid
-	 * @throws IOException Failed to create new session
+	/*
+	 * (non-Javadoc)
+	 * @see org.savara.monitor.SessionStore#create(org.savara.protocol.ProtocolId, org.savara.monitor.ConversationInstanceId)
 	 */
 	public java.io.Serializable create(ProtocolId pid, ConversationInstanceId cid)
 					throws IllegalArgumentException, java.io.IOException {
-		return(null);
+		
+		RDBMSSession psession = new RDBMSSession();
+		
+		psession.setProtocolName(pid.getName());
+		psession.setProtocolRole(pid.getRole());
+		psession.setConversationInstanceId(cid.getId());		
+		psession.setSession(new DummySession());
+		
+		try {
+			Serializable s = this.find(pid, cid);
+			if (s != null) {
+				throw new IllegalArgumentException("The session with [" + pid + cid +"] already existed.");
+			}
+			
+			tx.begin();
+			entityManager.persist(psession);
+			tx.commit();
+			return psession.getSession();
+		} catch (Exception e) {
+			logger.log(Level.SEVERE, "error in creating a session");
+			tx.rollback();
+			throw new RuntimeException(e);
+		} 
+		
 	}
 	
-	/**
-	 * This method returns an existing session associated with
-	 * the supplied protocol and conversation instance id.
-	 * 
-	 * @param pid The protocol id
-	 * @param cid The conversation instance id
-	 * @return The session
-	 * @throws IllegalArgumentException Protocol or conversation instance id is invalid
-	 * @throws IOException Failed to retrieve session
+	/*
+	 * (non-Javadoc)
+	 * @see org.savara.monitor.SessionStore#find(org.savara.protocol.ProtocolId, org.savara.monitor.ConversationInstanceId)
 	 */
 	public java.io.Serializable find(ProtocolId pid, ConversationInstanceId cid)
 					throws IllegalArgumentException, java.io.IOException {
-		return(null);
+		try {
+			tx.begin();
+			List<?> sessions = entityManager.createNamedQuery(RDBMSSession.GET_SESSION_BY_KEY)
+								.setParameter("name", pid.getName())
+								.setParameter("role", pid.getRole())
+								.setParameter("id", cid.getId())
+								.getResultList();
+			tx.commit();
+			if (sessions == null || sessions.size() < 1) {
+				return null;
+			}
+			if (sessions.size() > 1) {
+				throw new IllegalArgumentException("Found two sessions with [" + pid + cid + "]");
+			}
+			RDBMSSession session = (RDBMSSession)sessions.get(0);
+			return session.getSession();
+		} catch (Exception e) {
+			logger.log(Level.SEVERE, "error in finding a session");
+			tx.rollback();
+			throw new RuntimeException(e);
+		} 
 	}
 	
-	/**
-	 * This method removes an existing session associated
-	 * with the supplied protocol and conversation instance id.
-	 * 
-	 * @param pid The protocol id
-	 * @param cid The conversation instance id
-	 * @throws IllegalArgumentException Conversation instance id is invalid or unknown
-	 * @throws java.io.IOException Failed to remove existing session
+	/*
+	 * (non-Javadoc)
+	 * @see org.savara.monitor.SessionStore#remove(org.savara.protocol.ProtocolId, org.savara.monitor.ConversationInstanceId)
 	 */
 	public void remove(ProtocolId pid, ConversationInstanceId cid)
 					throws IllegalArgumentException, java.io.IOException {
+		try {
+			tx.begin();
+			entityManager.createNamedQuery(RDBMSSession.REMOVE_SESSION_BY_KEY)
+							.setParameter("name", pid.getName())
+							.setParameter("role", pid.getRole())
+							.setParameter("id", cid.getId())
+							.executeUpdate();
+			tx.commit();
+		} catch (Exception e) {
+			logger.log(Level.SEVERE, "error in removing a session");
+			tx.rollback();
+			throw new RuntimeException(e);
+		} 
 	}
 	
-	/**
-	 * This method updates an existing session associated
-	 * with the supplied protocol and conversation instance id.
-	 * 
-	 * @param pid The protocol id
-	 * @param cid The conversation instance id
-	 * @param session The session
-	 * @throws IllegalArgumentException Conversation instance id is invalid or unknown
-	 * @throws java.io.IOException Failed to update existing session
+	/*
+	 * (non-Javadoc)
+	 * @see org.savara.monitor.SessionStore#update(org.savara.protocol.ProtocolId, org.savara.monitor.ConversationInstanceId, java.io.Serializable)
 	 */
 	public void update(ProtocolId pid, ConversationInstanceId cid,
 					java.io.Serializable session) throws IllegalArgumentException,
 									java.io.IOException {
+		try {
+			tx.begin();
+			RDBMSSession s = (RDBMSSession) entityManager.createNamedQuery(RDBMSSession.GET_SESSION_BY_KEY)
+								.setParameter("name", pid.getName())
+								.setParameter("role", pid.getRole())
+								.setParameter("id", cid.getId())
+								.getSingleResult();
+			s.setSession(session);
+			entityManager.persist(s);
+			tx.commit();
+		} catch (Exception e) {
+			logger.log(Level.SEVERE, "error in updating a session");
+			tx.rollback();
+			throw new RuntimeException(e);
+		} 
 	}
 	
-	/**
-	 * This method closes the session store.
-	 * 
-	 * @throws java.io.IOException Failed to close the session store
+	/*
+	 * (non-Javadoc)
+	 * @see org.savara.monitor.SessionStore#close()
 	 */
 	public void close() throws java.io.IOException {
+		if (entityManager != null && entityManager.isOpen()) {
+			entityManager.close();
+		}
+		if (emf != null) {
+			emf.close();
+			emf = null;
+		}
 	}
+	
+	
 }

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/TxContext.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/TxContext.java	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/TxContext.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,20 @@
+/**
+ * 
+ */
+package org.savara.monitor.sstore.rdbms;
+
+/**
+ * Transaction context
+ * 
+ * @author Jeff Yu
+ *
+ */
+public interface TxContext {
+	
+	public void begin();
+	
+	public void commit();
+	
+	public void rollback();
+	
+}

Modified: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/osgi/Activator.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/osgi/Activator.java	2011-02-03 18:53:07 UTC (rev 635)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/java/org/savara/monitor/sstore/rdbms/osgi/Activator.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -45,7 +45,7 @@
 		// Register the SessionStore implementation
         Properties props = new Properties();
         
-        SessionStore ss=new RDBMSSessionStore();
+        SessionStore ss=new RDBMSSessionStore(null);
         
         m_serviceRegistration = context.registerService(SessionStore.class.getName(), 
 							ss, props);

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/resources/META-INF/persistence.xml
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/resources/META-INF/persistence.xml	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/main/resources/META-INF/persistence.xml	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+ <persistence xmlns="http://java.sun.com/xml/ns/persistence" 
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
+            version="1.0">
+    <persistence-unit name="savara-session" transaction-type="JTA">
+    	<provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <class>org.savara.monitor.sstore.rdbms.RDBMSSession</class>
+    </persistence-unit>    
+    
+</persistence>
\ No newline at end of file

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStoreTest.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStoreTest.java	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/java/org/savara/monitor/sstore/rdbms/RDBMSSessionStoreTest.java	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,78 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.savara.monitor.sstore.rdbms;
+
+import java.io.Serializable;
+import java.sql.DriverManager;
+
+import junit.framework.Assert;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.savara.monitor.ConversationInstanceId;
+import org.savara.protocol.ProtocolId;
+
+/**
+ * @author Jeff Yu
+ *
+ */
+public class RDBMSSessionStoreTest extends Assert{
+	
+	private static RDBMSSessionStore store;
+		
+	private static ProtocolId pid;
+	
+	private static ConversationInstanceId cid;
+	
+	@BeforeClass
+	public static void setUp() throws Exception{
+		Class.forName("org.h2.Driver");
+		DriverManager.getConnection("jdbc:h2:target/db/h2", "sa", "");
+		
+		pid = new ProtocolId("Jeff", "Developer");
+		cid  = new ConversationInstanceId();
+		
+		store = new RDBMSSessionStore(null);		
+		store.initialize(null);
+	}
+	
+	
+	@AfterClass
+	public static void afterClass() throws Exception {
+		store.close();
+	}
+	
+	@Test
+	public void testCreateNewSession() throws Exception {	
+		Serializable o = store.create(pid, cid);
+	}
+	
+	@Test
+	public void testFindSession() throws Exception {
+		Serializable o = store.find(pid, cid);
+	}
+	
+	@Test
+	public void testDeleteSession() throws Exception {
+		store.remove(pid, cid);
+		Serializable o = store.find(pid, cid);
+		assertNull(o);
+	}
+
+}

Added: branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/resources/META-INF/persistence.xml
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/resources/META-INF/persistence.xml	                        (rev 0)
+++ branches/experimental/2.0.x/bundles/org.savara.monitor.sstore.rdbms/src/test/resources/META-INF/persistence.xml	2011-02-04 11:35:10 UTC (rev 636)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+ <persistence xmlns="http://java.sun.com/xml/ns/persistence" 
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
+            version="1.0">
+    <persistence-unit name="savara-session" transaction-type="RESOURCE_LOCAL">
+    	<provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <class>org.savara.monitor.sstore.rdbms.RDBMSSession</class>
+        <properties>
+			<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+			<property name="hibernate.hbm2ddl.auto" value="create"/>
+			<property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
+			<property name="hibernate.connection.url" value="jdbc:h2:target/db/h2"/>
+			<property name="hibernate.connection.username" value="sa"/>
+			<property name="hibernate.connection.password" value=""/>
+			<property name="hibernate.show_sql" value="false"/>
+		</properties>
+    </persistence-unit>    
+    
+</persistence>
\ No newline at end of file



More information about the savara-commits mailing list