[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