You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2012/09/05 00:12:51 UTC

[26/50] [abbrv] Moved Awsapi (EC2/S3) from Hibernate framework to CloudStack Generic Dao Framework

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDao.java b/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDao.java
index efee98c..7a02c4e 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDao.java
@@ -1,30 +1,11 @@
-// 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 com.cloud.bridge.persist.dao;
 
-import com.cloud.bridge.model.MHostMount;
-import com.cloud.bridge.persist.EntityDao;
+import com.cloud.bridge.model.MHostMountVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MHostMountDao extends GenericDao<MHostMountVO, Long> {
+
+    MHostMountVO getHostMount(long mHostId, long sHostId);
+    
 
-public class MHostMountDao extends EntityDao<MHostMount> {
-	public MHostMountDao() {
-		super(MHostMount.class);
-	}
-	
-	public MHostMount getHostMount(long mHostId, long sHostId) {
-		return queryEntity("from MHostMount where mhost=? and shost=?", new Object[] { mHostId, sHostId } );
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDaoImpl.java
new file mode 100644
index 0000000..4450da8
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MHostMountDaoImpl.java
@@ -0,0 +1,48 @@
+// 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 com.cloud.bridge.persist.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.MHostMountVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={MHostMountDao.class})
+public class MHostMountDaoImpl extends GenericDaoBase<MHostMountVO, Long> implements MHostMountDao {
+    	final SearchBuilder<MHostMountVO> SearchByMHostID = createSearchBuilder();
+	public MHostMountDaoImpl() {
+	}
+	
+	@Override
+	public MHostMountVO getHostMount(long mHostId, long sHostId) { 
+	    SearchByMHostID.and("MHostID", SearchByMHostID.entity().getmHostID(), SearchCriteria.Op.EQ);
+	    SearchByMHostID.and("SHostID", SearchByMHostID.entity().getsHostID(), SearchCriteria.Op.EQ);
+	    Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+	    try {
+		txn.start();
+		SearchCriteria<MHostMountVO> sc = SearchByMHostID.create();
+		sc.setParameters("MHostID", mHostId);
+		sc.setParameters("SHostID", sHostId);
+		return findOneBy(sc);
+	    }finally {
+		txn.close();
+	    }
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDao.java b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDao.java
new file mode 100644
index 0000000..399e820
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDao.java
@@ -0,0 +1,18 @@
+package com.cloud.bridge.persist.dao;
+
+import java.util.List;
+
+import com.cloud.bridge.model.MultiPartPartsVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MultiPartPartsDao extends GenericDao<MultiPartPartsVO, Long> {
+
+    List<MultiPartPartsVO> getParts(int uploadId, int maxParts, int startAt);
+
+    int getnumParts(int uploadId, int endMarker);
+
+    MultiPartPartsVO findByUploadID(int uploadId, int partNumber);
+
+    void updateParts(MultiPartPartsVO partVO, int uploadId, int partNumber);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDaoImpl.java
new file mode 100644
index 0000000..91e4398
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartPartsDaoImpl.java
@@ -0,0 +1,101 @@
+package com.cloud.bridge.persist.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.MultiPartPartsVO;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={MultiPartPartsDao.class})
+public class MultiPartPartsDaoImpl extends GenericDaoBase<MultiPartPartsVO, Long> implements MultiPartPartsDao {
+
+    @Override
+    public  List<MultiPartPartsVO> getParts(int uploadId, int maxParts, int startAt ) {
+        
+        SearchBuilder<MultiPartPartsVO> ByUploadID = createSearchBuilder();
+        ByUploadID.and("UploadID", ByUploadID.entity().getUploadid(), SearchCriteria.Op.EQ);
+        ByUploadID.and("partNumber", ByUploadID.entity().getPartNumber(), SearchCriteria.Op.GT);
+        ByUploadID.and("partNumber", ByUploadID.entity().getPartNumber(), SearchCriteria.Op.LT);
+        Filter filter = new Filter(MultiPartPartsVO.class, "partNumber", Boolean.TRUE, null, null);
+        
+        Transaction txn = Transaction.currentTxn();  // Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+        try {
+            txn.start();
+            SearchCriteria<MultiPartPartsVO> sc = ByUploadID.create();
+            sc.setParameters("UploadID", new Long(uploadId));
+            sc.setParameters("partNumber", startAt);
+            sc.setParameters("partNumber", maxParts);
+        return listBy(sc, filter);
+        
+        } finally {
+            txn.close();
+        }
+    }
+    
+    @Override
+    public int getnumParts( int uploadId, int endMarker ) {
+        SearchBuilder<MultiPartPartsVO> byUploadID = createSearchBuilder();
+        byUploadID.and("UploadID", byUploadID.entity().getUploadid(), SearchCriteria.Op.EQ);
+        byUploadID.and("partNumber", byUploadID.entity().getPartNumber(), SearchCriteria.Op.GT);
+        Transaction txn = Transaction.currentTxn();  // Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+        try {
+            txn.start();
+            SearchCriteria<MultiPartPartsVO> sc = byUploadID.create();
+            sc.setParameters("UploadID", new Long(uploadId));
+            sc.setParameters("partNumber", endMarker);
+            return listBy(sc).size();
+        
+        } finally {
+            txn.close();
+        }
+
+        
+    }
+    
+    @Override
+    public MultiPartPartsVO findByUploadID(int uploadId, int partNumber) {
+        
+        SearchBuilder<MultiPartPartsVO> byUploadID = createSearchBuilder();
+        byUploadID.and("UploadID", byUploadID.entity().getUploadid(), SearchCriteria.Op.EQ);
+        byUploadID.and("partNumber", byUploadID.entity().getPartNumber(), SearchCriteria.Op.EQ);
+        Transaction txn = Transaction.currentTxn();  // Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+        try {
+            txn.start();
+            SearchCriteria<MultiPartPartsVO> sc = byUploadID.create();
+            sc.setParameters("UploadID", new Long(uploadId));
+            sc.setParameters("partNumber", partNumber);
+            return findOneBy(sc);
+            
+        } finally {
+            txn.close();
+        }
+        
+    }
+    
+    @Override
+    public void updateParts(MultiPartPartsVO partVO, int uploadId, int partNumber) {
+        
+        SearchBuilder<MultiPartPartsVO> byUploadID = createSearchBuilder();
+        byUploadID.and("UploadID", byUploadID.entity().getUploadid(), SearchCriteria.Op.EQ);
+        byUploadID.and("partNumber", byUploadID.entity().getPartNumber(), SearchCriteria.Op.EQ);
+        Transaction txn = Transaction.currentTxn();  // Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+        try {
+            txn.start();
+            SearchCriteria<MultiPartPartsVO> sc = byUploadID.create();
+            sc.setParameters("UploadID", new Long(uploadId));
+            sc.setParameters("partNumber", partNumber);
+            update(partVO, sc);
+            txn.commit();
+        
+        } finally {
+            txn.close();
+        }
+    }
+    
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDao.java b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDao.java
new file mode 100644
index 0000000..4c52958
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDao.java
@@ -0,0 +1,21 @@
+package com.cloud.bridge.persist.dao;
+
+import java.util.List;
+
+import com.cloud.bridge.model.MultiPartUploadsVO;
+import com.cloud.bridge.util.OrderedPair;
+import com.cloud.utils.db.GenericDao;
+
+public interface MultiPartUploadsDao extends
+        GenericDao<MultiPartUploadsVO, Long> {
+
+    OrderedPair<String, String> multipartExits(int uploadId);
+
+    void deleteUpload(int uploadId);
+
+    String getAtrributeValue(String attribute, int uploadid);
+
+    List<MultiPartUploadsVO> getInitiatedUploads(String bucketName,
+            int maxParts, String prefix, String keyMarker, String uploadIdMarker);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDaoImpl.java
new file mode 100644
index 0000000..b6ad611
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MultiPartUploadsDaoImpl.java
@@ -0,0 +1,108 @@
+package com.cloud.bridge.persist.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.MultiPartPartsVO;
+import com.cloud.bridge.model.MultiPartUploadsVO;
+import com.cloud.bridge.model.SBucketVO;
+import com.cloud.bridge.util.OrderedPair;
+import com.cloud.utils.db.Attribute;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={MultiPartUploadsDao.class})
+public class MultiPartUploadsDaoImpl extends GenericDaoBase<MultiPartUploadsVO, Long> implements MultiPartUploadsDao {
+    
+    @Override
+    public OrderedPair<String,String> multipartExits( int uploadId ) {
+        MultiPartUploadsVO uploadvo = null;
+        
+        Transaction txn = null; 
+        try {
+            txn = Transaction.open(Transaction.AWSAPI_DB);
+            uploadvo = findById(new Long(uploadId));
+            if (null != uploadvo)
+                return new OrderedPair<String,String>(uploadvo.getAccessKey(), uploadvo.getNameKey());
+
+            return null;
+        } finally {
+            txn.close();
+        }
+    }
+    
+    @Override
+    public void deleteUpload(int uploadId) {
+        
+        Transaction txn = null; 
+        try {
+            txn = Transaction.open(Transaction.AWSAPI_DB);
+            remove(new Long(uploadId));
+            txn.commit();
+        }finally {
+            txn.close();
+        }
+    }
+    
+    @Override
+    public String getAtrributeValue(String attribute, int uploadid) {
+        Transaction txn = null;
+        MultiPartUploadsVO uploadvo = null;
+        try {
+            txn = Transaction.open(Transaction.AWSAPI_DB);
+            uploadvo = findById(new Long(uploadid));
+            if (null != uploadvo) {
+                if ( attribute.equalsIgnoreCase("AccessKey") )
+                    return uploadvo.getAccessKey();
+                else if ( attribute.equalsIgnoreCase("x_amz_acl") ) 
+                    return uploadvo.getAmzAcl();
+            }
+            return null;
+        } finally {
+            txn.close();
+        }
+    }
+    
+    @Override
+    public List<MultiPartUploadsVO> getInitiatedUploads(String bucketName, int maxParts, String prefix, String keyMarker, String uploadIdMarker) {
+
+        List<MultiPartUploadsVO> uploadList = new ArrayList<MultiPartUploadsVO>();
+        
+        SearchBuilder<MultiPartUploadsVO> byBucket = createSearchBuilder();
+        byBucket.and("BucketName", byBucket.entity().getBucketName() , SearchCriteria.Op.EQ);
+        
+        if (null != prefix)
+            byBucket.and("NameKey", byBucket.entity().getNameKey(), SearchCriteria.Op.LIKE);
+        if (null != uploadIdMarker)
+            byBucket.and("NameKey", byBucket.entity().getNameKey(), SearchCriteria.Op.GT);
+        if (null != uploadIdMarker)
+            byBucket.and("ID", byBucket.entity().getId(), SearchCriteria.Op.GT);
+        
+       Filter filter = new Filter(MultiPartUploadsVO.class, "nameKey", Boolean.TRUE, null, null);
+       filter.addOrderBy(MultiPartUploadsVO.class, "createTime", Boolean.TRUE);
+       
+       Transaction txn = Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+       try {
+           txn.start();
+           SearchCriteria<MultiPartUploadsVO> sc = byBucket.create();
+           sc.setParameters("BucketName", bucketName);
+           if (null != prefix)
+               sc.setParameters("NameKey", prefix);
+           if (null != uploadIdMarker)
+               sc.setParameters("NameKey", keyMarker);
+           if (null != uploadIdMarker)
+               sc.setParameters("ID", uploadIdMarker);
+           listBy(sc, filter);
+       
+       }finally {
+           txn.close();
+       }
+        return null;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MultipartLoadDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MultipartLoadDao.java b/awsapi/src/com/cloud/bridge/persist/dao/MultipartLoadDao.java
index 0ab83eb..c9b5ec7 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/MultipartLoadDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MultipartLoadDao.java
@@ -34,42 +34,25 @@ import java.util.Properties;
 
 import org.apache.log4j.Logger;
 
+import com.cloud.bridge.model.MultiPartPartsVO;
+import com.cloud.bridge.model.MultiPartUploadsVO;
+import com.cloud.bridge.model.MultipartMetaVO;
 import com.cloud.bridge.service.core.s3.S3MetaDataEntry;
 import com.cloud.bridge.service.core.s3.S3MultipartPart;
 import com.cloud.bridge.service.core.s3.S3MultipartUpload;
 import com.cloud.bridge.util.ConfigurationHelper;
 import com.cloud.bridge.util.OrderedPair;
+import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.db.Transaction;
 
 public class MultipartLoadDao {
 	public static final Logger logger = Logger.getLogger(MultipartLoadDao.class);
-
-	private Connection conn       = null;
-	private String     dbName     = null;
-	private String     dbUser     = null;
-	private String     dbPassword = null;
-	private String     dbHost     = null;
-	private String     dbPort     = null; 
 	
-	public MultipartLoadDao() {
-	    File propertiesFile = ConfigurationHelper.findConfigurationFile("db.properties");
-	    Properties EC2Prop = null;
-	       
-	    if (null != propertiesFile) {
-	   	    EC2Prop = new Properties();
-	    	try {
-				EC2Prop.load( new FileInputStream( propertiesFile ));
-			} catch (FileNotFoundException e) {
-				logger.warn("Unable to open properties file: " + propertiesFile.getAbsolutePath(), e);
-			} catch (IOException e) {
-				logger.warn("Unable to read properties file: " + propertiesFile.getAbsolutePath(), e);
-			}
-            dbHost     = EC2Prop.getProperty( "db.cloud.host" );
-            dbName     = EC2Prop.getProperty( "db.awsapi.name" );
-            dbUser     = EC2Prop.getProperty( "db.cloud.username" );
-            dbPassword = EC2Prop.getProperty( "db.cloud.password" );
-            dbPort     = EC2Prop.getProperty( "db.cloud.port" );
-		}
-	}
+	protected final MultipartMetaDao mpartMetaDao = ComponentLocator.inject(MultipartMetaDaoImpl.class);
+	protected final MultiPartPartsDao mpartPartsDao = ComponentLocator.inject(MultiPartPartsDaoImpl.class);
+	protected final MultiPartUploadsDao mpartUploadDao = ComponentLocator.inject(MultiPartUploadsDaoImpl.class);
+	
+	public MultipartLoadDao() {}
 	
 	/**
 	 * If a multipart upload exists with the uploadId value then return the non-null creators
@@ -77,30 +60,13 @@ public class MultipartLoadDao {
 	 * 
 	 * @param uploadId
 	 * @return creator of the multipart upload, and NameKey of upload
-	 * @throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException 
 	 */
+	
+	
 	public OrderedPair<String,String> multipartExits( int uploadId ) 
 	    throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
 	{
-	    PreparedStatement statement = null;
-	    String accessKey = null;
-	    String nameKey = null;
-		
-        openConnection();	
-        try {            
-		    statement = conn.prepareStatement ( "SELECT AccessKey, NameKey FROM multipart_uploads WHERE ID=?" );
-	        statement.setInt( 1, uploadId );
-	        ResultSet rs = statement.executeQuery();
-		    if ( rs.next()) {
-		    	 accessKey = rs.getString( "AccessKey" );
-		    	 nameKey = rs.getString( "NameKey" );
-		    	 return new OrderedPair<String,String>( accessKey, nameKey );
-		    }
-		    else return null;
-        
-        } finally {
-            closeConnection();
-        }
+	    return mpartUploadDao.multipartExits(uploadId);
 	}
 	
 	/**
@@ -110,23 +76,9 @@ public class MultipartLoadDao {
 	 * 
 	 * @param uploadId
 	 * 
-	 * @throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException 
 	 */
-	public void deleteUpload( int uploadId )
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-	    PreparedStatement statement = null;
-		
-        openConnection();	
-        try {
-		    statement = conn.prepareStatement ( "DELETE FROM multipart_uploads WHERE ID=?" );
-	        statement.setInt( 1, uploadId );
-	        int count = statement.executeUpdate();
-            statement.close();	
-        
-        } finally {
-            closeConnection();
-        }
+	public void deleteUpload( int uploadId ) {
+	    mpartUploadDao.deleteUpload(uploadId);
 	}
 	
 	/**
@@ -134,26 +86,9 @@ public class MultipartLoadDao {
 	 * 
 	 * @param uploadId
 	 * @return the access key value defining the initiator
-	 * @throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
 	 */
-	public String getInitiator( int uploadId ) 
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-	    PreparedStatement statement = null;
-	    String initiator = null;
-		
-        openConnection();	
-        try {
-		    statement = conn.prepareStatement ( "SELECT AccessKey FROM multipart_uploads WHERE ID=?" );
-	        statement.setInt( 1, uploadId );
-	        ResultSet rs = statement.executeQuery();
-		    if (rs.next()) initiator = rs.getString( "AccessKey" );
-            statement.close();			    
-            return initiator;
-        
-        } finally {
-            closeConnection();
-        }
+	public String getInitiator( int uploadId ) {
+	    return mpartUploadDao.getAtrributeValue("AccessKey", uploadId);
 	}
 	
 	/**
@@ -165,47 +100,38 @@ public class MultipartLoadDao {
 	 * @param cannedAccess
 	 * 
 	 * @return if positive its the uploadId to be returned to the client
-	 * 
-	 * @throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException 
+	 *
 	 */
-	public int initiateUpload( String accessKey, String bucketName, String key, String cannedAccess, S3MetaDataEntry[] meta ) 
-	    throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-	    PreparedStatement statement = null;
+	public int initiateUpload( String accessKey, String bucketName, String key, String cannedAccess, S3MetaDataEntry[] meta ) {
 		int uploadId = -1;
-		
-        openConnection();	
+		Transaction txn = null;
         try {
-	        Date tod = new Date();
-	        java.sql.Timestamp dateTime = new Timestamp( tod.getTime());
+            txn = Transaction.open(Transaction.AWSAPI_DB);
+            Date tod = new Date();
+            MultiPartUploadsVO uploadVO = new MultiPartUploadsVO(accessKey,
+                    bucketName, key, cannedAccess, tod);
+            uploadVO = mpartUploadDao.persist(uploadVO);
 
-		    statement = conn.prepareStatement ( "INSERT INTO multipart_uploads (AccessKey, BucketName, NameKey, x_amz_acl, CreateTime) VALUES (?,?,?,?,?)" );
-	        statement.setString( 1, accessKey );
-	        statement.setString( 2, bucketName );
-	        statement.setString( 3, key );
-	        statement.setString( 4, cannedAccess );      
-	        statement.setTimestamp( 5, dateTime );
-            int count = statement.executeUpdate();
-            statement.close();	
+            if (null != uploadVO) {
+                uploadId = uploadVO.getId().intValue();
+                if (null != meta) {
+                    for (int i = 0; i < meta.length; i++) {
+                        MultipartMetaVO mpartMeta = new MultipartMetaVO();
+                        mpartMeta.setUploadID(uploadId);
+                        S3MetaDataEntry entry = meta[i];
+                        mpartMeta.setName(entry.getName());
+                        mpartMeta.setValue(entry.getValue());
+                        mpartMetaDao.persist(mpartMeta);
+                    }
+                    txn.commit();
+                }
+            }
             
-            // -> we need the newly entered ID 
-		    statement = conn.prepareStatement ( "SELECT ID FROM multipart_uploads WHERE AccessKey=? AND BucketName=? AND NameKey=? AND CreateTime=?" );
-	        statement.setString( 1, accessKey );
-	        statement.setString( 2, bucketName );
-	        statement.setString( 3, key );
-	        statement.setTimestamp( 4, dateTime );
-	        ResultSet rs = statement.executeQuery();
-		    if (rs.next()) {
-		    	uploadId = rs.getInt( "ID" );
-		        saveMultipartMeta( uploadId, meta );
-		    }
-            statement.close();			    
             return uploadId;
-        
         } finally {
-            closeConnection();
+            txn.close();
         }
-	}
+    }
 	
 	/**
 	 * Remember all the individual parts that make up the entire multipart upload so that once
@@ -219,49 +145,28 @@ public class MultipartLoadDao {
 	 * @param size
 	 * @throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
 	 */
-	public void savePart( int uploadId, int partNumber, String md5, String storedPath, int size ) 
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-    {
-        PreparedStatement statement = null;
-        int id = -1;
-        int count = 0;
-	
-        openConnection();	
+	public void savePart( int uploadId, int partNumber, String md5, String storedPath, int size ) {
+
         try {
-            Date tod = new Date();
-            java.sql.Timestamp dateTime = new java.sql.Timestamp( tod.getTime());
+            MultiPartPartsVO partVO = null;
 
-            // -> are we doing an update or an insert?  (are we over writting an existing entry?)
-		    statement = conn.prepareStatement ( "SELECT ID FROM multipart_parts WHERE UploadID=? AND partNumber=?" );
-            statement.setInt( 1, uploadId );
-            statement.setInt( 2, partNumber  );
-            ResultSet rs = statement.executeQuery();
-		    if (rs.next()) id = rs.getInt( "ID" );
-            statement.close();			    
+            partVO = mpartPartsDao.findByUploadID(uploadId, partNumber);
+            // -> are we doing an update or an insert? (are we over writting an
+            // existing entry?)
 
-            if ( -1 == id )
-            {
-	             statement = conn.prepareStatement ( "INSERT INTO multipart_parts (UploadID, partNumber, MD5, StoredPath, StoredSize, CreateTime) VALUES (?,?,?,?,?,?)" );
-                 statement.setInt(    1, uploadId );
-                 statement.setInt(    2, partNumber );
-                 statement.setString( 3, md5 );
-                 statement.setString( 4, storedPath );   
-                 statement.setInt(    5, size );
-                 statement.setTimestamp( 6, dateTime );
+            if (null == partVO) {
+                MultiPartPartsVO part = new MultiPartPartsVO(uploadId,
+                        partNumber, md5, storedPath, size, new Date());
+                mpartPartsDao.persist(part);
+            } else {
+                partVO.setMd5(md5);
+                partVO.setStoredSize(new Long(size));
+                partVO.setCreateTime(new Date());
+                partVO.setUploadid(new Long(uploadId));
+                partVO.setPartNumber(partNumber);
+                mpartPartsDao.updateParts(partVO, uploadId, partNumber);
             }
-            else
-            {    statement = conn.prepareStatement ( "UPDATE multipart_parts SET MD5=?, StoredSize=?, CreateTime=? WHERE UploadId=? AND partNumber=?" );
-                 statement.setString( 1, md5 );
-                 statement.setInt(    2, size );
-                 statement.setTimestamp( 3, dateTime );
-                 statement.setInt(    4, uploadId );
-                 statement.setInt(    5, partNumber );
-            }
-            count = statement.executeUpdate();
-            statement.close();	
-            
         } finally {
-            closeConnection();
         }
     }
 	
@@ -270,24 +175,8 @@ public class MultipartLoadDao {
 	 * @param uploadId
 	 * @return the value defined in the x-amz-acl header or null
 	 */
-	public String getCannedAccess( int uploadId )
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-	    PreparedStatement statement = null;
-	    String access = null;
-		
-        openConnection();	
-        try {
-		    statement = conn.prepareStatement ( "SELECT x_amz_acl FROM multipart_uploads WHERE ID=?" );
-	        statement.setInt( 1, uploadId );
-	        ResultSet rs = statement.executeQuery();
-		    if (rs.next()) access = rs.getString( "x_amz_acl" );
-            statement.close();			    
-            return access;
-        
-        } finally {
-            closeConnection();
-        }
+	public String getCannedAccess( int uploadId ) {
+	    return mpartUploadDao.getAtrributeValue("x_amz_acl", uploadId);
 	}
 	
 	/**
@@ -302,31 +191,25 @@ public class MultipartLoadDao {
         throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
 	{
 		List<S3MetaDataEntry> metaList = new ArrayList<S3MetaDataEntry>();
-	    PreparedStatement statement = null;
 	    int count = 0;
-		
-        openConnection();	
+	    List<MultipartMetaVO> metaVO; 
         try {
-		    statement = conn.prepareStatement ( "SELECT Name, Value FROM multipart_meta WHERE UploadID=?" );
-	        statement.setInt( 1, uploadId );
-		    ResultSet rs = statement.executeQuery();
-		    
-		    while (rs.next()) 
-		    {
-		    	S3MetaDataEntry oneMeta = new S3MetaDataEntry();
-		    	oneMeta.setName(  rs.getString( "Name" ));
-	            oneMeta.setValue( rs.getString( "Value" ));
-	            metaList.add( oneMeta );
-	            count++;
-		    }
-            statement.close();	
+            
+            metaVO = mpartMetaDao.getByUploadID(uploadId);
+            for (MultipartMetaVO multipartMetaVO : metaVO) {
+                S3MetaDataEntry oneMeta = new S3MetaDataEntry();
+                oneMeta.setName(  multipartMetaVO.getName());
+                oneMeta.setValue( multipartMetaVO.getValue());
+                metaList.add( oneMeta );
+                count++;
+            }
             
             if ( 0 == count )
-            	 return null;
+                return null;
             else return metaList.toArray(new S3MetaDataEntry[0]);
         
         } finally {
-            closeConnection();
+
         }
 	}
 	
@@ -346,52 +229,33 @@ public class MultipartLoadDao {
         throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
 	{
 		S3MultipartUpload[] inProgress = new S3MultipartUpload[maxParts];
-	    PreparedStatement statement = null;
 	    boolean isTruncated = false;
 	    int i = 0;
 	    int pos = 1;
-	    
+	    List<MultiPartUploadsVO> uploadList;
 	    // -> SQL like condition requires the '%' as a wildcard marker
 	    if (null != prefix) prefix = prefix + "%";
 	    
-	    StringBuffer queryStr = new StringBuffer();
-	    queryStr.append( "SELECT ID, AccessKey, NameKey, CreateTime FROM multipart_uploads WHERE BucketName=? " );   
-	    if (null != prefix        ) queryStr.append( "AND NameKey like ? " );
-	    if (null != keyMarker     ) queryStr.append( "AND NameKey > ? ");
-        if (null != uploadIdMarker) queryStr.append( "AND ID > ? " );    
-        queryStr.append( "ORDER BY NameKey, CreateTime" );
-		
-        openConnection();	
+
         try {
-		    statement = conn.prepareStatement ( queryStr.toString());
-		    statement.setString( pos++, bucketName );
-		    if (null != prefix        ) statement.setString( pos++, prefix );
-		    if (null != keyMarker     ) statement.setString( pos++, keyMarker );
-		    if (null != uploadIdMarker) statement.setString( pos, uploadIdMarker );
-		    ResultSet rs = statement.executeQuery();
-		    
-		    while (rs.next() && i < maxParts) 
-		    {
-		    	Calendar tod = Calendar.getInstance();
-		    	tod.setTime( rs.getTimestamp( "CreateTime" ));
+		    uploadList = mpartUploadDao.getInitiatedUploads(bucketName, maxParts, prefix, keyMarker, uploadIdMarker);
+            for (MultiPartUploadsVO uploadsVO : uploadList) {
+                Calendar tod = Calendar.getInstance();
+                tod.setTime(uploadsVO.getCreateTime());
+                inProgress[i] = new S3MultipartUpload();
+                inProgress[i].setId( uploadsVO.getId().intValue()); 
+                inProgress[i].setAccessKey(uploadsVO.getAccessKey());
+                inProgress[i].setLastModified( tod );
+                inProgress[i].setBucketName( bucketName );
+                inProgress[i].setKey(uploadsVO.getNameKey());
+                i++;
+            }
 
-		    	inProgress[i] = new S3MultipartUpload();
-		    	inProgress[i].setId( rs.getInt( "ID" )); 
-		    	inProgress[i].setAccessKey( rs.getString( "AccessKey" ));
-		    	inProgress[i].setLastModified( tod );
-		    	inProgress[i].setBucketName( bucketName );
-		    	inProgress[i].setKey( rs.getString( "NameKey" ));
-		    	i++;
-		    }
-		    
-		    if (rs.next()) isTruncated = true;
-            statement.close();		
-            
-            if (i < maxParts) inProgress = (S3MultipartUpload[])resizeArray(inProgress,i);
-            return new OrderedPair<S3MultipartUpload[], Boolean>(inProgress, isTruncated);
-        
-        } finally {
-            closeConnection();
+            if (i < maxParts)
+                inProgress = (S3MultipartUpload[]) resizeArray(inProgress, i);
+            return new OrderedPair<S3MultipartUpload[], Boolean>(inProgress,
+                    isTruncated);
+        }finally {
         }
 
 	}
@@ -411,41 +275,30 @@ public class MultipartLoadDao {
 	    throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
 	{
 		S3MultipartPart[] parts = new S3MultipartPart[maxParts];
-	    PreparedStatement statement = null;
 	    int i = 0;
-		
-        openConnection();	
-        try {
-		    statement = conn.prepareStatement ( "SELECT   partNumber, MD5, StoredSize, StoredPath, CreateTime " +
-		    		                            "FROM     multipart_parts " +
-		    		                            "WHERE    UploadID=? " +
-		    		                            "AND      partNumber > ? AND partNumber < ? " +
-		    		                            "ORDER BY partNumber" );
-	        statement.setInt( 1, uploadId );
-	        statement.setInt( 2, startAt  );
-	        statement.setInt( 3, startAt + maxParts + 1 );
-		    ResultSet rs = statement.executeQuery();
-		    
-		    while (rs.next() && i < maxParts) 
-		    {
-		    	Calendar tod = Calendar.getInstance();
-		    	tod.setTime( rs.getTimestamp( "CreateTime" ));
-		    	
-		    	parts[i] = new S3MultipartPart();
-		    	parts[i].setPartNumber( rs.getInt( "partNumber" )); 
-		    	parts[i].setEtag( rs.getString( "MD5" ).toLowerCase());
-		    	parts[i].setLastModified( tod );
-		    	parts[i].setSize( rs.getInt( "StoredSize" ));
-		    	parts[i].setPath( rs.getString( "StoredPath" ));
-		    	i++;
-		    }
-            statement.close();		
-            
+	    List<MultiPartPartsVO> partsVO;
+	    try {
+	        
+	        partsVO = mpartPartsDao.getParts(uploadId, startAt + maxParts + 1, startAt);
+	        
+	        for (MultiPartPartsVO partVO : partsVO) {
+                Calendar tod = Calendar.getInstance();
+                tod.setTime(partVO.getCreateTime());
+                
+                parts[i] = new S3MultipartPart();
+                parts[i].setPartNumber(partVO.getPartNumber());
+                parts[i].setEtag(partVO.getMd5());
+                parts[i].setLastModified(tod);
+                parts[i].setSize(partVO.getStoredSize().intValue());
+                parts[i].setPath(partVO.getStoredPath());
+                i++;
+            }
+	        
             if (i < maxParts) parts = (S3MultipartPart[])resizeArray(parts,i);
             return parts;
         
         } finally {
-            closeConnection();
+
         }
 	}
   
@@ -457,25 +310,8 @@ public class MultipartLoadDao {
 	 * @return number of parts with partNumber greater than endMarker
 	 * @throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
 	 */
-	public int numParts( int uploadId, int endMarker ) 
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-    {
-        PreparedStatement statement = null;
-        int count = 0;
-	
-        openConnection();	
-        try {
-	        statement = conn.prepareStatement ( "SELECT count(*) FROM multipart_parts WHERE UploadID=? AND partNumber > ?" );
-            statement.setInt( 1, uploadId );
-            statement.setInt( 2, endMarker );
-	        ResultSet rs = statement.executeQuery();	    
-	        if (rs.next()) count = rs.getInt( 1 );
-            statement.close();			    
-            return count;
-    
-        } finally {
-            closeConnection();
-        }
+	public int numParts( int uploadId, int endMarker ) {
+	    return mpartPartsDao.getnumParts(uploadId, endMarker);
     }
 
 	/**
@@ -485,46 +321,30 @@ public class MultipartLoadDao {
 	 * @param uploadId - defines an in-process multipart upload
 	 * @param meta - an array of meta data to be assocated with the uploadId value
 	 * 
-	 * @throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException 
 	 */
-	private void saveMultipartMeta( int uploadId, S3MetaDataEntry[] meta ) 
-	    throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-		if (null == meta) return;	
-	    PreparedStatement statement = null;
+	private void saveMultipartMeta( int uploadId, S3MetaDataEntry[] meta ) {
+		if (null == meta) return;
 		
-        openConnection();	
+		Transaction txn = null;
         try {
+            txn = Transaction.open(Transaction.AWSAPI_DB);
             for( int i=0; i < meta.length; i++ ) 
             {
                S3MetaDataEntry entry = meta[i];
-		       statement = conn.prepareStatement ( "INSERT INTO multipart_meta (UploadID, Name, Value) VALUES (?,?,?)" );
-	           statement.setInt( 1, uploadId );
-	           statement.setString( 2, entry.getName());
-	           statement.setString( 3, entry.getValue());
-               int count = statement.executeUpdate();
-               statement.close();
+               MultipartMetaVO metaVO = new MultipartMetaVO();
+               metaVO.setUploadID(uploadId);
+               metaVO.setName(entry.getName());
+               metaVO.setValue(entry.getValue());
+               metaVO=mpartMetaDao.persist(metaVO);
             }
-            
+            txn.commit();
         } finally {
-            closeConnection();
+            txn.close();
         }
 	}
 	
-	private void openConnection() 
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
-        if (null == conn) {
-	        Class.forName( "com.mysql.jdbc.Driver" ).newInstance();
-            conn = DriverManager.getConnection( "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName, dbUser, dbPassword );
-        }
-	}
 
-    private void closeConnection() throws SQLException {
-	    if (null != conn) conn.close();
-	    conn = null;
-    }
-    
-    /**
+	/**
     * Reallocates an array with a new size, and copies the contents
     * of the old array to the new array.
     * 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDao.java b/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDao.java
new file mode 100644
index 0000000..449ce44
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDao.java
@@ -0,0 +1,12 @@
+package com.cloud.bridge.persist.dao;
+
+import java.util.List;
+
+import com.cloud.bridge.model.MultipartMetaVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MultipartMetaDao extends GenericDao<MultipartMetaVO, Long> {
+
+    List<MultipartMetaVO> getByUploadID(long uploadID);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDaoImpl.java
new file mode 100644
index 0000000..cfe56c0
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/MultipartMetaDaoImpl.java
@@ -0,0 +1,34 @@
+package com.cloud.bridge.persist.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.MultipartMetaVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={MultipartMetaDao.class})
+public class MultipartMetaDaoImpl extends GenericDaoBase<MultipartMetaVO, Long> implements MultipartMetaDao {
+    
+    @Override
+    public List<MultipartMetaVO> getByUploadID (long uploadID) {
+        SearchBuilder <MultipartMetaVO> searchByUID = createSearchBuilder();
+        searchByUID.and("UploadID", searchByUID.entity().getUploadID(), SearchCriteria.Op.EQ);
+        searchByUID.done();
+        Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+        try {
+            txn.start();
+            SearchCriteria<MultipartMetaVO> sc = searchByUID.create();
+            sc.setParameters("UploadID", uploadID);
+            return  listBy(sc);
+        
+        }finally {
+            txn.close();
+        }
+        
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/OfferingDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/OfferingDao.java b/awsapi/src/com/cloud/bridge/persist/dao/OfferingDao.java
index 358ce3d..c46b015 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/OfferingDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/OfferingDao.java
@@ -1,169 +1,18 @@
-// 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 com.cloud.bridge.persist.dao;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Properties;
+import com.cloud.bridge.model.OfferingBundleVO;
+import com.cloud.utils.db.GenericDao;
 
-import org.apache.log4j.Logger;
+public interface OfferingDao extends GenericDao<OfferingBundleVO, Long> {
 
-import com.cloud.bridge.util.ConfigurationHelper;
+    int getOfferingCount();
 
+    String getCloudOffering(String amazonEC2Offering);
 
-public class OfferingDao extends BaseDao {
-	public static final Logger logger = Logger.getLogger(OfferingDao.class);
+    String getAmazonOffering(String cloudStackOffering);
 
-	private Connection conn       = null;
-	
-	public OfferingDao() 
-	{
-	}
-	
-	public int getOfferingCount()
-		throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-        PreparedStatement statement = null;
-        int result = 0;
-	
-        openConnection();	
-        try {            
-	        statement = conn.prepareStatement ( "SELECT count(*) FROM offering_bundle" );
-            ResultSet rs = statement.executeQuery();
-	        if (rs.next()) result = rs.getInt(1);
-            statement.close();	
-            return result;
-        } finally {
-            closeConnection();
-        }
-	}
-	
-	public String getCloudOffering( String amazonEC2Offering )
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-        PreparedStatement statement = null;
-        String result = null;
-	
-        openConnection();	
-        try {            
-	        statement = conn.prepareStatement ( "SELECT CloudStackOffering FROM offering_bundle WHERE AmazonEC2Offering=?" );
-            statement.setString( 1, amazonEC2Offering );
-            ResultSet rs = statement.executeQuery();
-	        if (rs.next()) result = rs.getString( "CloudStackOffering" );
-            statement.close();	
-            return result;
-    
-        } finally {
-            closeConnection();
-        }
-	}
-	
-	public String getAmazonOffering( String cloudStackOffering )
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-	{
-        PreparedStatement statement = null;
-        String result = null;
-	
-        openConnection();	
-        try {            
-	        statement = conn.prepareStatement ( "SELECT AmazonEC2Offering FROM offering_bundle WHERE CloudStackOffering=?" );
-            statement.setString( 1, cloudStackOffering );
-            ResultSet rs = statement.executeQuery();
-	        if (rs.next()) result = rs.getString( "AmazonEC2Offering" );
-            statement.close();	
-            return result;
-    
-        } finally {
-            closeConnection();
-        }		
-	}
-		
-	public void setOfferMapping( String amazonEC2Offering, String cloudStackOffering ) 
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-   {
-        PreparedStatement statement = null;
-        int id = -1;
-        int count = 0;
+    void setOfferMapping(String amazonEC2Offering, String cloudStackOffering);
 
-        openConnection();	
-        try {    
-            // -> are we doing an update or an insert?  (are we over writing an existing entry?)
-		    statement = conn.prepareStatement ( "SELECT ID FROM offering_bundle WHERE AmazonEC2Offering=?" );
-            statement.setString( 1, amazonEC2Offering  );
-            ResultSet rs = statement.executeQuery();
-		    if (rs.next()) id = rs.getInt( "ID" );
-            statement.close();			    
+    void deleteOfferMapping(String amazonEC2Offering);
 
-            if ( -1 == id )
-            {
-                 statement = conn.prepareStatement ( "INSERT INTO offering_bundle (AmazonEC2Offering, CloudStackOffering) VALUES (?,?)" );
-                 statement.setString( 1, amazonEC2Offering  );
-                 statement.setString( 2, cloudStackOffering );
-            }
-            else
-            {    statement = conn.prepareStatement ( "UPDATE offering_bundle SET CloudStackOffering=? WHERE AmazonEC2Offering=?" );
-                 statement.setString( 1, cloudStackOffering );
-                 statement.setString( 2, amazonEC2Offering  );
-            }         
-            count = statement.executeUpdate();
-            statement.close();	
-
-        } finally {
-            closeConnection();
-        }
-    }
-	
-	public void deleteOfferMapping( String amazonEC2Offering )
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
-    {
-        PreparedStatement statement = null;
-
-        openConnection();	
-        try {
-            statement = conn.prepareStatement ( "DELETE FROM offering_bundle WHERE AmazonEC2Offering=?" );
-            statement.setString( 1, amazonEC2Offering );
-            int count = statement.executeUpdate();
-            statement.close();	
-
-        } finally {
-            closeConnection();
-        }
-    }
-
-	private void openConnection() 
-        throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException 
-    {
-        if (null == conn) {
-            Class.forName( "com.mysql.jdbc.Driver" ).newInstance();
-            conn = DriverManager.getConnection( "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + awsapi_dbName, dbUser, dbPassword );
-        }
-    }
-
-    private void closeConnection() throws SQLException 
-    {
-        if (null != conn) conn.close();
-        conn = null;
-    }
 }
-

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/OfferingDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/OfferingDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/OfferingDaoImpl.java
new file mode 100644
index 0000000..5a9a625
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/OfferingDaoImpl.java
@@ -0,0 +1,135 @@
+// 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 com.cloud.bridge.persist.dao;
+
+
+import javax.ejb.Local;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.bridge.model.OfferingBundleVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={OfferingDao.class})
+public class OfferingDaoImpl extends GenericDaoBase<OfferingBundleVO, Long> implements OfferingDao {
+	public static final Logger logger = Logger.getLogger(OfferingDaoImpl.class);
+
+	public OfferingDaoImpl() {}
+	
+	@Override
+	public int getOfferingCount() {
+       Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+        try {
+            txn.start();
+            return listAll().size();
+        }finally {
+            txn.close();
+        }
+	    
+	}
+	
+	@Override
+	public String getCloudOffering( String amazonEC2Offering ) {
+	    
+       SearchBuilder <OfferingBundleVO> searchByAmazon = createSearchBuilder();
+       searchByAmazon.and("AmazonEC2Offering", searchByAmazon.entity().getAmazonOffering() , SearchCriteria.Op.EQ);
+       searchByAmazon.done();
+       Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+       try {
+           txn.start();
+           SearchCriteria<OfferingBundleVO> sc = searchByAmazon.create();
+           sc.setParameters("AmazonEC2Offering", amazonEC2Offering);
+           return findOneBy(sc).getCloudstackOffering();
+           
+        } finally {
+            txn.close();
+        }
+	}
+	
+	@Override
+	public String getAmazonOffering( String cloudStackOffering ) {
+        
+	       SearchBuilder <OfferingBundleVO> searchByAmazon = createSearchBuilder();
+	       searchByAmazon.and("CloudStackOffering", searchByAmazon.entity().getAmazonOffering() , SearchCriteria.Op.EQ);
+	       searchByAmazon.done();
+	       Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+	       try {
+	           txn.start();
+	           SearchCriteria<OfferingBundleVO> sc = searchByAmazon.create();
+	           sc.setParameters("CloudStackOffering", cloudStackOffering);
+	           return findOneBy(sc).getAmazonOffering();
+	           
+	        } finally {
+	            txn.close();
+	        }
+	    }
+	
+	@Override
+	public void setOfferMapping( String amazonEC2Offering, String cloudStackOffering ) {
+	    
+        SearchBuilder <OfferingBundleVO> searchByAmazon = createSearchBuilder();
+        searchByAmazon.and("CloudStackOffering", searchByAmazon.entity().getAmazonOffering() , SearchCriteria.Op.EQ);
+        searchByAmazon.and("AmazonEC2Offering", searchByAmazon.entity().getCloudstackOffering() , SearchCriteria.Op.EQ);
+        searchByAmazon.done();
+        Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+        OfferingBundleVO offering = null;
+        try {
+            txn.start();
+            SearchCriteria<OfferingBundleVO> sc = searchByAmazon.create();
+            sc.setParameters("CloudStackOffering", cloudStackOffering);
+            sc.setParameters("AmazonEC2Offering", amazonEC2Offering);
+            offering = findOneBy(sc);
+            if (null == offering) {
+                offering = new OfferingBundleVO();
+            }
+            offering.setAmazonOffering(amazonEC2Offering);
+            offering.setCloudstackOffering(cloudStackOffering);
+            if (null == offering) 
+                offering = persist(offering);
+            else
+                update(offering.getID(), offering);
+
+            txn.commit();
+         } finally {
+             txn.close();
+         }
+
+	}
+	
+	@Override
+	public void deleteOfferMapping( String amazonEC2Offering ) {
+	    SearchBuilder <OfferingBundleVO> searchByAmazon = createSearchBuilder();
+        searchByAmazon.and("AmazonEC2Offering", searchByAmazon.entity().getAmazonOffering() , SearchCriteria.Op.EQ);
+        searchByAmazon.done();
+        Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+        try {
+            txn.start();
+            SearchCriteria<OfferingBundleVO> sc = searchByAmazon.create();
+            sc.setParameters("AmazonEC2Offering", amazonEC2Offering);
+            remove(sc);
+            txn.commit();
+         } finally {
+             txn.close();
+         }
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SAclDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SAclDao.java b/awsapi/src/com/cloud/bridge/persist/dao/SAclDao.java
index d62ae5b..5a5be6e 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/SAclDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SAclDao.java
@@ -1,76 +1,21 @@
-// 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 com.cloud.bridge.persist.dao;
 
-import java.util.Date;
 import java.util.List;
 
 import com.cloud.bridge.model.SAcl;
-import com.cloud.bridge.persist.EntityDao;
-import com.cloud.bridge.persist.PersistContext;
+import com.cloud.bridge.model.SAclVO;
 import com.cloud.bridge.service.core.s3.S3AccessControlList;
 import com.cloud.bridge.service.core.s3.S3Grant;
+import com.cloud.utils.db.GenericDao;
 
-public class SAclDao extends EntityDao<SAcl> {
-	
-	public SAclDao() {
-		super(SAcl.class);
-	}
-	
-	public List<SAcl> listGrants(String target, long targetId) {
-		return queryEntities("from SAcl where target=? and targetId=? order by grantOrder asc",
-			new Object[] { target, new Long(targetId)});
-	}
+public interface SAclDao extends GenericDao<SAclVO, Long> {
 
-	public List<SAcl> listGrants(String target, long targetId, String userCanonicalId) {
-		return queryEntities("from SAcl where target=? and targetId=? and granteeCanonicalId=? order by grantOrder asc",
-			new Object[] { target, new Long(targetId), userCanonicalId });
-	}
+    List<SAclVO> listGrants(String target, long targetId, String userCanonicalId);
+
+    void save(String target, long targetId, S3AccessControlList acl);
+
+    SAcl save(String target, long targetId, S3Grant grant, int grantOrder);
+
+    List<SAclVO> listGrants(String target, long targetId);
 
-	public void save(String target, long targetId, S3AccessControlList acl) {
-		// -> the target's ACLs are being redefined
-		executeUpdate("delete from SAcl where target=? and targetId=?",	new Object[] { target, new Long(targetId)});
-		
-		if(acl != null) {
-			S3Grant[] grants = acl.getGrants();
-			if(grants != null && grants.length > 0) {
-				int grantOrder = 1;
-				for(S3Grant grant : grants) {
-					save(target, targetId, grant, grantOrder++);
-				}
-			}
-		}
-	}
-	
-	public SAcl save(String target, long targetId, S3Grant grant, int grantOrder) {
-		SAcl aclEntry = new SAcl();
-		aclEntry.setTarget(target);
-		aclEntry.setTargetId(targetId);
-		aclEntry.setGrantOrder(grantOrder);
-		
-		int grantee = grant.getGrantee();
-		aclEntry.setGranteeType(grantee);
-		aclEntry.setPermission(grant.getPermission());
-		aclEntry.setGranteeCanonicalId(grant.getCanonicalUserID());
-		
-		Date ts = new Date();
-		aclEntry.setCreateTime(ts);
-		aclEntry.setLastModifiedTime(ts);
-		PersistContext.getSession().save(aclEntry);
-		return aclEntry;
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SAclDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SAclDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/SAclDaoImpl.java
new file mode 100644
index 0000000..c73c1db
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SAclDaoImpl.java
@@ -0,0 +1,127 @@
+// 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 com.cloud.bridge.persist.dao;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.SAcl;
+import com.cloud.bridge.model.SAclVO;
+import com.cloud.bridge.service.core.s3.S3AccessControlList;
+import com.cloud.bridge.service.core.s3.S3Grant;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={SAclDao.class})
+public class SAclDaoImpl extends GenericDaoBase<SAclVO, Long> implements SAclDao {
+
+	public SAclDaoImpl() {}
+	
+	@Override
+	public List<SAclVO> listGrants(String target, long targetId) {
+	    SearchBuilder<SAclVO> SearchByTarget = createSearchBuilder();
+	    SearchByTarget.and("Target", SearchByTarget.entity().getTarget(), SearchCriteria.Op.EQ);
+	    SearchByTarget.and("TargetID", SearchByTarget.entity().getTargetId(), SearchCriteria.Op.EQ);
+	    SearchByTarget.done();
+	    Filter filter = new Filter(SAclVO.class, "grantOrder", Boolean.TRUE, null, null);
+	    Transaction txn = Transaction.open( Transaction.AWSAPI_DB);
+	    try {
+		txn.start();
+		SearchCriteria<SAclVO> sc = SearchByTarget.create();
+		sc.setParameters("Target", target);
+		sc.setParameters("TargetID", targetId);
+		return listBy(sc, filter);
+		
+	    } finally {
+		txn.close();
+	    }
+	}
+	
+	@Override
+	public List<SAclVO> listGrants(String target, long targetId, String userCanonicalId) {
+	    SearchBuilder<SAclVO> SearchByAcl = createSearchBuilder();
+	    SearchByAcl.and("Target", SearchByAcl.entity().getTarget(), SearchCriteria.Op.EQ);
+	    SearchByAcl.and("TargetID", SearchByAcl.entity().getTargetId(), SearchCriteria.Op.EQ);
+	    SearchByAcl.and("GranteeCanonicalID", SearchByAcl.entity().getGranteeCanonicalId(), SearchCriteria.Op.EQ);
+	    Filter filter = new Filter(SAclVO.class, "grantOrder", Boolean.TRUE, null, null);
+	    Transaction txn = Transaction.open( Transaction.AWSAPI_DB);
+	    try {
+    		txn.start();
+    		SearchCriteria<SAclVO> sc = SearchByAcl.create();
+    		sc.setParameters("Target", target);
+    		sc.setParameters("TargetID", targetId);
+    		sc.setParameters("GranteeCanonicalID", userCanonicalId);
+    		return listBy(sc, filter);
+	    } finally {
+		txn.close();
+	    }
+	}
+
+	@Override
+	public void save(String target, long targetId, S3AccessControlList acl) {
+	    SearchBuilder<SAclVO> SearchByTarget = createSearchBuilder();
+	    SearchByTarget.and("Target", SearchByTarget.entity().getTarget(), SearchCriteria.Op.EQ);
+	    SearchByTarget.and("TargetID", SearchByTarget.entity().getTargetId(), SearchCriteria.Op.EQ);
+
+	    Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+	    try {
+		txn.start();
+		SearchCriteria<SAclVO> sc = SearchByTarget.create();
+		sc.setParameters("Target", target);
+		sc.setParameters("TargetID", targetId);
+		this.remove(sc);
+		if(acl != null) {
+			S3Grant[] grants = acl.getGrants();
+			if(grants != null && grants.length > 0) {
+				int grantOrder = 1;
+				for(S3Grant grant : grants) {
+					save(target, targetId, grant, grantOrder++);
+				}
+			}
+		}
+		txn.commit();
+	    } finally {
+		txn.close();
+	    }
+	    
+	    
+	}
+	
+	@Override
+	public SAcl save(String target, long targetId, S3Grant grant, int grantOrder) {
+		SAclVO aclEntry = new SAclVO();
+		aclEntry.setTarget(target);
+		aclEntry.setTargetId(targetId);
+		aclEntry.setGrantOrder(grantOrder);
+		
+		int grantee = grant.getGrantee();
+		aclEntry.setGranteeType(grantee);
+		aclEntry.setPermission(grant.getPermission());
+		aclEntry.setGranteeCanonicalId(grant.getCanonicalUserID());
+		
+		Date ts = new Date();
+		aclEntry.setCreateTime(ts);
+		aclEntry.setLastModifiedTime(ts);
+		aclEntry = this.persist(aclEntry);
+		return aclEntry;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SBucketDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SBucketDao.java b/awsapi/src/com/cloud/bridge/persist/dao/SBucketDao.java
index 833bf6a..0f42200 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/SBucketDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SBucketDao.java
@@ -1,37 +1,14 @@
-// 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 com.cloud.bridge.persist.dao;
 
 import java.util.List;
 
-import com.cloud.bridge.model.SBucket;
-import com.cloud.bridge.persist.EntityDao;
+import com.cloud.bridge.model.SBucketVO;
+import com.cloud.utils.db.GenericDao;
 
-public class SBucketDao extends EntityDao<SBucket> {
-	public SBucketDao() {
-		super(SBucket.class);
-	}
+public interface SBucketDao extends GenericDao<SBucketVO, Long> {
+
+    SBucketVO getByName(String bucketName);
+
+    List<SBucketVO> listBuckets(String canonicalId);
 
-	public SBucket getByName(String bucketName) {
-		return queryEntity("from SBucket where name=?", new Object[] {bucketName});
-	}
-	
-	public List<SBucket> listBuckets(String canonicalId) {
-		return queryEntities("from SBucket where ownerCanonicalId=? order by createTime asc", 
-			new Object[] {canonicalId});
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SBucketDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SBucketDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/SBucketDaoImpl.java
new file mode 100644
index 0000000..53e9e07
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SBucketDaoImpl.java
@@ -0,0 +1,72 @@
+// 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 com.cloud.bridge.persist.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.SBucket;
+import com.cloud.bridge.model.SBucketVO;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={SBucketDao.class})
+public class SBucketDaoImpl extends GenericDaoBase<SBucketVO, Long> implements SBucketDao {
+    	
+	public SBucketDaoImpl() {
+	}
+
+	@Override
+	public SBucketVO getByName(String bucketName) {
+	    SearchBuilder<SBucketVO> SearchByName = createSearchBuilder();
+	    SearchByName.and("Name", SearchByName.entity().getName(), SearchCriteria.Op.EQ);
+	    //Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+	    Transaction txn = Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+	    try {
+		txn.start();
+		SearchCriteria<SBucketVO> sc = SearchByName.create();
+		sc.setParameters("Name", bucketName);
+		return findOneBy(sc);
+		
+	    }finally {
+		txn.close();
+	    }
+	}
+	
+	@Override
+	public List<SBucketVO> listBuckets(String canonicalId) {
+	    SearchBuilder<SBucketVO> ByCanonicalID = createSearchBuilder();
+	    ByCanonicalID.and("OwnerCanonicalID", ByCanonicalID.entity().getOwnerCanonicalId(), SearchCriteria.Op.EQ);
+	    Filter filter = new Filter(SBucketVO.class, "createTime", Boolean.TRUE, null, null);
+	    Transaction txn = Transaction.currentTxn();  // Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+	    try {
+            txn.start();
+            SearchCriteria<SBucketVO> sc = ByCanonicalID.create();
+            sc.setParameters("OwnerCanonicalID", canonicalId);
+		return listBy(sc, filter);
+	    }finally {
+            txn.close();
+	    }
+
+	}
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SHostDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SHostDao.java b/awsapi/src/com/cloud/bridge/persist/dao/SHostDao.java
index 1108bcb..fc8865c 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/SHostDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SHostDao.java
@@ -1,35 +1,12 @@
-// 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 com.cloud.bridge.persist.dao;
 
-import com.cloud.bridge.model.SHost;
-import com.cloud.bridge.persist.EntityDao;
+import com.cloud.bridge.model.SHostVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface SHostDao extends GenericDao<SHostVO, Long> {
+
+    SHostVO getByHost(String host);
+
+    SHostVO getLocalStorageHost(long mhostId, String storageRoot);
 
-public class SHostDao extends EntityDao<SHost> {
-	public SHostDao() {
-		super(SHost.class);
-	}
-	
-	public SHost getByHost(String host) {
-		return queryEntity("from SHost where host=?", new Object[] { host });
-	}
-	
-	public SHost getLocalStorageHost(long mhostId, String storageRoot) {
-		return queryEntity("from SHost where mhost=? and exportRoot=?", 
-			new Object[] { new Long(mhostId), storageRoot});
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SHostDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SHostDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/SHostDaoImpl.java
new file mode 100644
index 0000000..efe9500
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SHostDaoImpl.java
@@ -0,0 +1,67 @@
+// 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 com.cloud.bridge.persist.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.SHostVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={SHostDao.class})
+public class SHostDaoImpl extends GenericDaoBase<SHostVO, Long> implements SHostDao {
+	public SHostDaoImpl() {}
+	
+	@Override
+	public SHostVO getByHost(String host) {
+	    SearchBuilder <SHostVO> HostSearch = createSearchBuilder();
+	    HostSearch.and("Host", HostSearch.entity().getHost(), SearchCriteria.Op.EQ);
+	    HostSearch.done();
+	    Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+	    try {
+    		txn.start();
+    		SearchCriteria<SHostVO> sc = HostSearch.create();
+    		sc.setParameters("Host", host);
+    		return findOneBy(sc);
+		
+	    }finally {
+	        txn.close();
+	    }
+	    
+	}
+	
+	@Override
+	public SHostVO getLocalStorageHost(long mhostId, String storageRoot) {
+	    SearchBuilder <SHostVO> LocalStorageHostSearch = createSearchBuilder();
+	    LocalStorageHostSearch.and("MHostID", LocalStorageHostSearch.entity().getMhostid(), SearchCriteria.Op.EQ);
+	    LocalStorageHostSearch.and("ExportRoot", LocalStorageHostSearch.entity().getExportRoot(), SearchCriteria.Op.EQ);
+	    LocalStorageHostSearch.done();
+	    Transaction txn = Transaction.currentTxn();
+	    try {
+            txn.start();
+            SearchCriteria<SHostVO> sc = LocalStorageHostSearch.create();
+            sc.setParameters("MHostID", mhostId);
+            sc.setParameters("ExportRoot", storageRoot);
+            return findOneBy(sc);
+		
+	    }finally {
+            txn.close();
+	    }	
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SMetaDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SMetaDao.java b/awsapi/src/com/cloud/bridge/persist/dao/SMetaDao.java
index b781bbb..225138e 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/SMetaDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SMetaDao.java
@@ -1,55 +1,17 @@
-// 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 com.cloud.bridge.persist.dao;
 
 import java.util.List;
 
-import com.cloud.bridge.model.SMeta;
-import com.cloud.bridge.persist.EntityDao;
-import com.cloud.bridge.persist.PersistContext;
+import com.cloud.bridge.model.SMetaVO;
 import com.cloud.bridge.service.core.s3.S3MetaDataEntry;
+import com.cloud.utils.db.GenericDao;
 
-public class SMetaDao extends EntityDao<SMeta> {
-	public SMetaDao() {
-		super(SMeta.class);
-	}
-	
-	public List<SMeta> getByTarget(String target, long targetId) {
-		return queryEntities("from SMeta where target=? and targetId=?", new Object[] {target, targetId});
-	}
+public interface SMetaDao extends GenericDao<SMetaVO, Long> {
 
-	public SMeta save(String target, long targetId, S3MetaDataEntry entry) {
-		SMeta meta = new SMeta();
-		meta.setTarget(target);
-		meta.setTargetId(targetId);
-		meta.setName(entry.getName());
-		meta.setValue(entry.getValue());
-		
-		PersistContext.getSession().save(meta);
-		return meta;
-	}
-	
-	public void save(String target, long targetId, S3MetaDataEntry[] entries) {
-		// To redefine the target's metadaa
-		executeUpdate("delete from SMeta where target=? and targetId=?", new Object[] { target, new Long(targetId)});
+    List<SMetaVO> getByTarget(String target, long targetId);
+
+    SMetaVO save(String target, long targetId, S3MetaDataEntry entry);
+
+    void save(String target, long targetId, S3MetaDataEntry[] entries);
 
-		if(entries != null) {
-			for(S3MetaDataEntry entry : entries)
-				save(target, targetId, entry);
-		}
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SMetaDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SMetaDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/SMetaDaoImpl.java
new file mode 100644
index 0000000..e0555ec
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SMetaDaoImpl.java
@@ -0,0 +1,88 @@
+// 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 com.cloud.bridge.persist.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.SMetaVO;
+import com.cloud.bridge.service.core.s3.S3MetaDataEntry;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={SMetaDao.class})
+public class SMetaDaoImpl extends GenericDaoBase<SMetaVO, Long> implements SMetaDao {
+
+	public SMetaDaoImpl() {}
+	
+	@Override
+	public List<SMetaVO> getByTarget(String target, long targetId) {
+	    SearchBuilder <SMetaVO> SearchByTarget = createSearchBuilder();
+	    SearchByTarget.and("Target", SearchByTarget.entity().getTarget(), SearchCriteria.Op.EQ);
+	    SearchByTarget.and("TargetID", SearchByTarget.entity().getTargetId(), SearchCriteria.Op.EQ);
+	    SearchByTarget.done();
+	    Transaction txn = Transaction.open( Transaction.AWSAPI_DB);
+	    try {
+            txn.start();
+            SearchCriteria<SMetaVO> sc = SearchByTarget.create();
+            sc.setParameters("Target", target);
+            sc.setParameters("TargetID", targetId);
+            return listBy(sc);
+	    } finally {
+            txn.close();
+	    }
+
+	}
+	
+	@Override
+	public SMetaVO save(String target, long targetId, S3MetaDataEntry entry) {
+		SMetaVO meta = new SMetaVO();
+		meta.setTarget(target);
+		meta.setTargetId(targetId);
+		meta.setName(entry.getName());
+		meta.setValue(entry.getValue());
+		meta = this.persist(meta);
+		return meta;
+	}
+	
+	@Override
+	public void save(String target, long targetId, S3MetaDataEntry[] entries) {
+		// To redefine the target's metadaa
+	    SearchBuilder <SMetaVO> SearchByTarget = createSearchBuilder();
+	    SearchByTarget.and("Target", SearchByTarget.entity().getTarget(), SearchCriteria.Op.EQ);
+	    SearchByTarget.and("TargetID", SearchByTarget.entity().getTargetId(), SearchCriteria.Op.EQ);
+	    Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+	    try {
+		txn.start();
+		SearchCriteria<SMetaVO> sc = SearchByTarget.create();
+		sc.setParameters("Target", target);
+		sc.setParameters("TargetID", targetId);
+		this.remove(sc);
+
+		if(entries != null) {
+		    for(S3MetaDataEntry entry : entries)
+        		save(target, targetId, entry);
+        	}
+		txn.commit();
+		}finally {
+		    txn.close();
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SObjectDao.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SObjectDao.java b/awsapi/src/com/cloud/bridge/persist/dao/SObjectDao.java
index 3d87cbe..42fcd02 100644
--- a/awsapi/src/com/cloud/bridge/persist/dao/SObjectDao.java
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SObjectDao.java
@@ -1,76 +1,19 @@
-// 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 com.cloud.bridge.persist.dao;
 
-import java.util.ArrayList;
 import java.util.List;
 
-import com.cloud.bridge.model.SBucket;
-import com.cloud.bridge.model.SObject;
-import com.cloud.bridge.persist.EntityDao;
-import com.cloud.bridge.util.EntityParam;
+import com.cloud.bridge.model.SBucketVO;
+import com.cloud.bridge.model.SObjectVO;
+import com.cloud.utils.db.GenericDao;
 
-public class SObjectDao extends EntityDao<SObject> {
-	public SObjectDao() {
-		super(SObject.class);
-	}
+public interface SObjectDao extends GenericDao<SObjectVO, Long> {
 
-	public SObject getByNameKey(SBucket bucket, String nameKey) {
-		return queryEntity("from SObject where bucket=? and nameKey=?", 
-				new Object[] { new EntityParam(bucket), nameKey });
-	}
-	
-	public List<SObject> listBucketObjects(SBucket bucket, String prefix, String marker, int maxKeys) {
-		StringBuffer sb = new StringBuffer();
-		List<Object> params = new ArrayList<Object>();
+    List<SObjectVO> listBucketObjects(SBucketVO bucket, String prefix,
+            String marker, int maxKeys);
 
-		sb.append("from SObject o left join fetch o.items where deletionMark is null and o.bucket=?");
-		params.add(new EntityParam(bucket));
-		
-		if(prefix != null && !prefix.isEmpty()) {
-			sb.append(" and o.nameKey like ?");
-			params.add(new String(prefix + "%"));
-		}
-		
-		if(marker != null && !marker.isEmpty()) {
-			sb.append(" and o.nameKey > ?");
-			params.add(marker);
-		}
-		
-		return queryEntities(sb.toString(), 0, maxKeys, params.toArray());
-	}
-	
-	public List<SObject> listAllBucketObjects(SBucket bucket, String prefix, String marker, int maxKeys) {
-		StringBuffer sb = new StringBuffer();
-		List<Object> params = new ArrayList<Object>();
+    List<SObjectVO> listAllBucketObjects(SBucketVO bucket, String prefix,
+            String marker, int maxKeys);
+
+    SObjectVO getByNameKey(SBucketVO bucket, String nameKey);
 
-		sb.append("from SObject o left join fetch o.items where o.bucket=?");
-		params.add(new EntityParam(bucket));
-		
-		if(prefix != null && !prefix.isEmpty()) {
-			sb.append(" and o.nameKey like ?");
-			params.add(new String(prefix + "%"));
-		}
-		
-		if(marker != null && !marker.isEmpty()) {
-			sb.append(" and o.nameKey > ?");
-			params.add(marker);
-		}
-		
-		return queryEntities(sb.toString(), 0, maxKeys, params.toArray());
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/39aa7d86/awsapi/src/com/cloud/bridge/persist/dao/SObjectDaoImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/persist/dao/SObjectDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/SObjectDaoImpl.java
new file mode 100644
index 0000000..b588877
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/persist/dao/SObjectDaoImpl.java
@@ -0,0 +1,119 @@
+// 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 com.cloud.bridge.persist.dao;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.ejb.Local;
+
+import com.cloud.bridge.model.SBucket;
+import com.cloud.bridge.model.SBucketVO;
+import com.cloud.bridge.model.SObjectItemVO;
+import com.cloud.bridge.model.SObjectVO;
+import com.cloud.bridge.util.EntityParam;
+import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={SObjectDao.class})
+public class SObjectDaoImpl extends GenericDaoBase<SObjectVO, Long> implements SObjectDao {
+    protected final SObjectItemDao itemDao = ComponentLocator.inject(SObjectItemDaoImpl.class);
+    
+	public SObjectDaoImpl() {}
+
+	@Override
+	public SObjectVO getByNameKey(SBucketVO bucket, String nameKey) {
+		SObjectVO object = null; 
+	    SearchBuilder<SObjectVO> SearchByName = createSearchBuilder();
+	    SearchByName.and("SBucketID", SearchByName.entity().getBucketID() , SearchCriteria.Op.EQ);
+	    SearchByName.and("NameKey", SearchByName.entity().getNameKey() , SearchCriteria.Op.EQ);
+	    Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
+	    try {
+            txn.start();
+            SearchCriteria<SObjectVO> sc = SearchByName.create();
+            sc.setParameters("SBucketID", bucket.getId());
+            sc.setParameters("NameKey", nameKey);
+            object = findOneBy(sc);
+            if (null != object) {
+                Set<SObjectItemVO> items = new HashSet<SObjectItemVO>(
+                        itemDao.getItems(object.getId()));
+                object.setItems(items);
+            }
+		return object;
+		
+	    }finally {
+            txn.close();
+	    }
+	    
+	}
+	
+	@Override
+	public List<SObjectVO> listBucketObjects(SBucketVO bucket, String prefix, String marker, int maxKeys) {
+		StringBuffer sb = new StringBuffer();
+		List<Object> params = new ArrayList<Object>();
+		SearchBuilder<SObjectVO> SearchByBucket = createSearchBuilder();
+		List<SObjectVO> objects = new ArrayList<SObjectVO>();
+		
+		SearchByBucket.and("SBucketID", SearchByBucket.entity().getBucketID(), SearchCriteria.Op.EQ);
+		SearchByBucket.and("DeletionMark", SearchByBucket.entity().getDeletionMark(), SearchCriteria.Op.NULL);		
+        Transaction txn = Transaction.currentTxn();  // Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+        try {
+            txn.start();
+            SearchCriteria<SObjectVO> sc = SearchByBucket.create();
+            sc.setParameters("SBucketID", bucket.getId());
+            objects = listBy(sc);
+            for (SObjectVO sObjectVO : objects) {
+                Set<SObjectItemVO> items = new HashSet<SObjectItemVO>(itemDao.getItems(sObjectVO.getId()));
+                sObjectVO.setItems(items);
+            }
+            return objects;
+        }finally {
+        txn.close();
+        }
+	}
+	
+	@Override
+	public List<SObjectVO> listAllBucketObjects(SBucketVO bucket, String prefix, String marker, int maxKeys) {
+		StringBuffer sb = new StringBuffer();
+		List<Object> params = new ArrayList<Object>();
+		SearchBuilder<SObjectVO> getAllBuckets = createSearchBuilder();
+		List<SObjectVO> objects = new ArrayList<SObjectVO>();
+		getAllBuckets.and("SBucketID", getAllBuckets.entity().getBucketID(), SearchCriteria.Op.EQ);
+
+		Transaction txn = Transaction.currentTxn();  // Transaction.open("cloudbridge", Transaction.AWSAPI_DB, true);
+        try {
+            txn.start();
+            SearchCriteria<SObjectVO> sc = getAllBuckets.create();
+            sc.setParameters("SBucketID", bucket.getId());
+            objects = listBy(sc);
+            for (SObjectVO sObjectVO : objects) {
+                Set<SObjectItemVO> items = new HashSet<SObjectItemVO>(itemDao.getItems(sObjectVO.getId()));
+                sObjectVO.setItems(items);
+            }
+            return objects;
+        }finally {
+        txn.close();
+        }
+		
+	}
+}