Eli Mesika has uploaded a new change for review.

Change subject: core: using JPA for engine backup awareness
......................................................................

core: using JPA for engine backup awareness

Change-Id: Ia0aa9c4d0c8c0a5f7b40a022d7670f30c5fd5b77
Signed-off-by: emesika <emes...@redhat.com>
---
M backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java
M packaging/dbscripts/engine_backup_log_sp.sql
7 files changed, 139 insertions(+), 69 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/40091/1

diff --git 
a/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml 
b/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml
index c172996..ade0ab2 100644
--- a/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml
+++ b/backend/manager/modules/bll/src/main/resources/META-INF/persistence.xml
@@ -6,10 +6,11 @@
         <provider>org.hibernate.ejb.HibernatePersistence</provider>
         <non-jta-data-source>java:/ENGINEDataSource</non-jta-data-source>
         <class>org.ovirt.engine.core.common.businessentities.Bookmark</class>
+        
<class>org.ovirt.engine.core.common.businessentities.EngineBackupLog</class>
         <properties>
             <property name="hibernate.dialect" 
value="org.hibernate.dialect.PostgreSQLDialect" />
             <property name="jboss.entity.manager.jndi.name" 
value="java:/ovirtEM"/>
             <property name="jboss.entity.manager.factory.jndi.name" 
value="java:/ovirtEMF"/>
         </properties>
     </persistence-unit>
-</persistence>
\ No newline at end of file
+</persistence>
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java
index 9990dbe..c60befc 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLog.java
@@ -3,15 +3,37 @@
 
 import org.ovirt.engine.core.common.utils.ToStringBuilder;
 
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Objects;
 
-public class EngineBackupLog extends IVdcQueryable implements Serializable {
+@Entity
+@Table(name = "engine_backup_log")
+@IdClass(EngineBackupLogId.class)
+@NamedQueries({
+        @NamedQuery(name = "EngineBackupLog.getLatest", query = "select e from 
EngineBackupLog e where e.dbName = :dbName and passed = true order by doneAt 
DESC")
+})
+public class EngineBackupLog extends IVdcQueryable implements Serializable, 
BusinessEntity<EngineBackupLogId> {
 
+    @Id
+    @Column(name="db_name")
     private String dbName;
+
+    @Id
+    @Column(name="done_at")
     private Date doneAt;
+
+    @Column(name="is_passed")
     private boolean passed;
+
+    @Column(name="output_message")
     private String outputMessage;
 
     public String getDbName() {
@@ -84,4 +106,16 @@
                 .append("outputMessage", outputMessage)
                 .build();
     }
+
+    @Override public EngineBackupLogId getId() {
+        EngineBackupLogId key = new EngineBackupLogId();
+        key.setDbName(dbName);
+        key.setDoneAt(doneAt);
+        return key;
+    }
+
+    @Override public void setId(EngineBackupLogId id) {
+        dbName = id.getDbName();
+        doneAt = id.getDoneAt();
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java
new file mode 100644
index 0000000..5f1b2e1
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EngineBackupLogId.java
@@ -0,0 +1,49 @@
+package org.ovirt.engine.core.common.businessentities;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class EngineBackupLogId implements Serializable {
+    private static final long serialVersionUID = 1740373688528083410L;
+    private String dbName;
+    private Date doneAt;
+
+    public String getDbName() {
+        return dbName;
+    }
+
+    public void setDbName(String dbName) {
+        this.dbName = dbName;
+    }
+
+    public Date getDoneAt() {
+        return doneAt;
+    }
+
+    public void setDoneAt(Date doneAt) {
+        this.doneAt = doneAt;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + dbName.hashCode();
+        result = prime * result + doneAt.hashCode();
+        return  result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        EngineBackupLog other = (EngineBackupLog)obj;
+        return (dbName.equals(other.getDbName()) && 
doneAt.equals(other.getDoneAt()));
+    }
+
+
+}
+
+
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java
index 8a10670..4938c1c 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDao.java
@@ -1,13 +1,12 @@
 package org.ovirt.engine.core.dao;
 
 import org.ovirt.engine.core.common.businessentities.EngineBackupLog;
+import org.ovirt.engine.core.common.businessentities.EngineBackupLogId;
 
-public interface EngineBackupLogDao extends DAO {
+public interface EngineBackupLogDao extends GenericDao<EngineBackupLog, 
EngineBackupLogId> {
 
     /**
      * Gets the last successful engine backup record
      */
     EngineBackupLog getLastSuccessfulEngineBackup(String dbName);
-
-    void save(EngineBackupLog engineBackupLog);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java
index c50f2b8..72c5531 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/EngineBackupLogDaoDbFacadeImpl.java
@@ -1,49 +1,28 @@
 package org.ovirt.engine.core.dao;
 
 import org.ovirt.engine.core.common.businessentities.EngineBackupLog;
-import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils;
-import org.springframework.jdbc.core.RowMapper;
-import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+import org.ovirt.engine.core.common.businessentities.EngineBackupLogId;
+import org.ovirt.engine.core.dao.jpa.AbstractJpaDao;
 
 import javax.inject.Named;
 import javax.inject.Singleton;
-import java.sql.ResultSet;
-import java.sql.SQLException;
+import java.util.List;
 
 @Named
 @Singleton
-public class EngineBackupLogDaoDbFacadeImpl extends BaseDAODbFacade implements 
EngineBackupLogDao {
+public class EngineBackupLogDaoDbFacadeImpl extends 
AbstractJpaDao<EngineBackupLog, EngineBackupLogId> implements 
EngineBackupLogDao {
 
-    private static class EngineBackupLogRowMapper implements 
RowMapper<EngineBackupLog> {
-        public static final EngineBackupLogRowMapper INSTANCE = new 
EngineBackupLogRowMapper();
-
-        @Override
-        public EngineBackupLog mapRow(ResultSet rs, int rowNum) throws 
SQLException {
-            EngineBackupLog entity = new EngineBackupLog();
-            entity.setDbName(rs.getString("db_name"));
-            
entity.setDoneAt(DbFacadeUtils.fromDate(rs.getTimestamp("done_at")));
-            entity.setPassed(rs.getBoolean("is_passed"));
-            entity.setOutputMessage(rs.getString("output_message"));
-            return entity;
-        }
+    protected EngineBackupLogDaoDbFacadeImpl() {
+        super(EngineBackupLog.class);
     }
 
     @Override
     public EngineBackupLog getLastSuccessfulEngineBackup(String dbName) {
-        return getCallsHandler().executeRead("GetLastSuccessfulEngineBackup", 
EngineBackupLogRowMapper.INSTANCE,
-               getCustomMapSqlParameterSource().addValue("db_name", dbName));
-    }
-
-
-    @Override
-    public void save(EngineBackupLog engineBackupLog) {
-
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("db_name", engineBackupLog.getDbName())
-                .addValue("done_at", engineBackupLog.getDoneAt())
-                .addValue("status", engineBackupLog.isPassed() ? 1 : -1)
-                .addValue("output_message", 
engineBackupLog.getOutputMessage());
-
-        getCallsHandler().executeModification("LogEngineBackupEvent", 
parameterSource);
+        List<EngineBackupLog> logs = 
multipleResults(entityManager.createNamedQuery("EngineBackupLog.getLatest", 
EngineBackupLog.class).setParameter("dbName", dbName));
+        if (logs != null && logs.size() > 0) {
+            return logs.get(0);
+        } else {
+            return null;
+        }
     }
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java
index f0756db..c2451cd 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/EngineBackupLogDaoTest.java
@@ -3,8 +3,10 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.ovirt.engine.core.common.businessentities.EngineBackupLog;
+import org.ovirt.engine.core.common.businessentities.EngineBackupLogId;
 
 import java.util.Calendar;
+import java.util.Date;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
@@ -12,10 +14,11 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class EngineBackupLogDaoTest extends BaseDAOTestCase {
+public class EngineBackupLogDaoTest extends 
BaseHibernateDaoTestCase<EngineBackupLogDao, EngineBackupLog, 
EngineBackupLogId> {
 
     private EngineBackupLogDao dao;
     private EngineBackupLog existingEngineBackupLog;
+    private EngineBackupLog newEntity;
     private final static String DB_NAME = "engine";
     private final static String NON_EXISTING_DB_NAME = "invalid";
 
@@ -23,8 +26,13 @@
     @Before
     public void setUp() throws Exception {
         super.setUp();
-
         dao = dbFacade.getEngineBackupLogDao();
+        existingEngineBackupLog = dao.getLastSuccessfulEngineBackup(DB_NAME);
+        newEntity = new EngineBackupLog();
+        newEntity.setDbName("asd");
+        newEntity.setOutputMessage("asd");
+        newEntity.setDoneAt(new Date());
+        newEntity.setPassed(true);
     }
 
     @Test
@@ -41,7 +49,6 @@
 
     @Test
     public void testAddingNewUnsuccessfulBackupEvent() {
-        existingEngineBackupLog = dao.getLastSuccessfulEngineBackup(DB_NAME);
         EngineBackupLog engineBackupLog = new EngineBackupLog();
         engineBackupLog.setDbName(DB_NAME);
         engineBackupLog.setDoneAt(Calendar.getInstance().getTime());
@@ -55,7 +62,6 @@
 
     @Test
     public void testAddingNewSuccessfulBackupEvent() {
-        existingEngineBackupLog = dao.getLastSuccessfulEngineBackup(DB_NAME);
         EngineBackupLog engineBackupLog = new EngineBackupLog();
         engineBackupLog.setDbName(DB_NAME);
         engineBackupLog.setDoneAt(Calendar.getInstance().getTime());
@@ -68,4 +74,29 @@
         assertTrue(entry.isPassed());
     }
 
+    @Override protected EngineBackupLogDao getDao() {
+        return dao;
+    }
+
+    @Override protected EngineBackupLog getExistingEntity() {
+        return existingEngineBackupLog;
+    }
+
+    @Override protected EngineBackupLog getNonExistentEntity() {
+        return newEntity;
+    }
+
+    @Override protected int getAllEntitiesCount() {
+        return 1;
+    }
+
+    @Override protected EngineBackupLog modifyEntity(EngineBackupLog entity) {
+        entity.setOutputMessage("test");
+        return entity;
+    }
+
+    @Override protected void verifyEntityModification(EngineBackupLog result) {
+        assertEquals("test", result.getOutputMessage());
+
+    }
 }
diff --git a/packaging/dbscripts/engine_backup_log_sp.sql 
b/packaging/dbscripts/engine_backup_log_sp.sql
index a2a6608..a639dd8 100644
--- a/packaging/dbscripts/engine_backup_log_sp.sql
+++ b/packaging/dbscripts/engine_backup_log_sp.sql
@@ -1,28 +1,3 @@
-CREATE OR REPLACE FUNCTION InsertEngineBackupHistory(v_db_name VARCHAR(64),
-     v_done_at TIMESTAMP WITH TIME ZONE ,
-     v_is_passed BOOLEAN,
-     v_output_message TEXT)
-
-RETURNS VOID
-   AS $procedure$
-BEGIN
-INSERT INTO engine_backup_log(db_name, done_at,is_passed, output_message)
-       VALUES(v_db_name, v_done_at, v_is_passed, v_output_message);
-END; $procedure$
-LANGUAGE plpgsql;
-
-CREATE OR REPLACE FUNCTION GetLastSuccessfulEngineBackup(v_db_name VARCHAR(64))
-RETURNS SETOF engine_backup_log STABLE
-   AS $procedure$
-BEGIN
-     RETURN QUERY SELECT *
-     FROM engine_backup_log
-     WHERE db_name = v_db_name and is_passed
-     ORDER BY db_name, done_at DESC
-     LIMIT 1;
-END; $procedure$
-LANGUAGE plpgsql;
-
 -- The following SP is used by engine-backup to report engine-backup activity
 -- v_status can be :
 -- -1 backup failed
@@ -37,7 +12,8 @@
      AS $procedure$
 BEGIN
     IF v_status = -1 THEN
-        PERFORM InsertEngineBackupHistory(v_db_name, v_done_at, false, 
v_output_message);
+        INSERT INTO engine_backup_log((db_name, done_at,is_passed, 
output_message)
+        VALUES(v_db_name, v_done_at, false, v_output_message);
 
         INSERT INTO audit_log(log_time, log_type_name, log_type, severity, 
message)
         VALUES(v_done_at, 'ENGINE_BACKUP_FAILED', 9026, 2, v_output_message);
@@ -46,7 +22,8 @@
         INSERT INTO audit_log(log_time, log_type_name, log_type, severity, 
message)
         VALUES(v_done_at, 'ENGINE_BACKUP_STARTED', 9024, 0, v_output_message);
     ELSIF v_status = 1 THEN
-        PERFORM InsertEngineBackupHistory(v_db_name, v_done_at, true, 
v_output_message);
+        INSERT INTO engine_backup_log((db_name, done_at,is_passed, 
output_message)
+        VALUES(v_db_name, v_done_at, true, v_output_message);
 
         -- Clean alerts
         PERFORM DeleteBackupRelatedAlerts();


-- 
To view, visit https://gerrit.ovirt.org/40091
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia0aa9c4d0c8c0a5f7b40a022d7670f30c5fd5b77
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Eli Mesika <emes...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to