From 72a02bc17c1adbd92284fd25afeb3a878d51c2d1 Mon Sep 17 00:00:00 2001 From: Arnaud Jelmoni <arnaud.jelmoni@keyconsulting.fr> Date: Tue, 5 Jan 2021 09:39:09 +0000 Subject: [PATCH] TANGOARCH-665 --- configuration/beans.xml | 65 ++++---------- pom.xml | 51 +++++------ .../snap/api/manager/SnapManagerApi.java | 84 ------------------- .../archiving/snap/api/model/Snapshot.java | 50 +++++++++++ .../SnapshotPersistenceManager.java | 2 + .../SnapshotPersistenceManagerFactory.java | 3 +- .../SpringSnapshotPersistenceManagerImpl.java | 9 +- .../spring/dao/AbstractHibernateDAO.java | 18 ++++ .../spring/dao/AbstractHibernateDAOImp.java | 55 ++++++++++++ .../spring/dao/AbstractValDAO.java | 31 +++++-- .../spring/dao/ClasspathDAOBeansLoader.java | 22 +++-- .../spring/dao/DAOBeansLoader.java | 4 + .../persistence/spring/dao/Im1ValDAOImpl.java | 2 + .../persistence/spring/dao/Im2ValDAOImpl.java | 2 + .../spring/dao/ScNum1ValDAOImpl.java | 2 + .../spring/dao/ScNum2ValDAOImpl.java | 2 + .../spring/dao/ScStr1ValDAOImpl.java | 2 + .../spring/dao/ScStr2ValDAOImpl.java | 2 + .../persistence/spring/dao/SnapshotDAO.java | 7 ++ .../spring/dao/SnapshotDAOImp.java | 13 +++ .../persistence/spring/dao/Sp1ValDAOImpl.java | 2 + .../persistence/spring/dao/Sp2ValDAOImpl.java | 2 + .../api/persistence/spring/dao/ValDAO.java | 2 + .../spring/dao/test/AbstractValDAOTest.java | 60 ++++++------- .../dao/test/ClasspathDAOBeansLoaderTest.java | 45 ++++++++++ .../spring/dao/test/ScNum1ValDAOTest.java | 27 +++--- .../spring/dao/test/ScNum2ValDAOTest.java | 29 ++++--- .../spring/dao/test/ScStr1ValDAOTest.java | 28 ++++--- .../spring/dao/test/ScStr2ValDAOTest.java | 27 +++--- .../spring/dao/test/SnapshotDAOTest.java | 35 ++++++++ .../spring/dao/test/Sp1ValDAOTest.java | 29 ++++--- .../spring/dao/test/Sp2ValDAOTest.java | 31 ++++--- src/test/resources/beans.xml | 77 +++++++++++++++++ src/test/resources/valueTables.hbm.xml | 82 ++++++++++++++++++ 34 files changed, 621 insertions(+), 281 deletions(-) create mode 100644 src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java create mode 100644 src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java create mode 100644 src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java create mode 100644 src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java create mode 100644 src/test/resources/beans.xml create mode 100644 src/test/resources/valueTables.hbm.xml diff --git a/configuration/beans.xml b/configuration/beans.xml index 51f1543..9aabfe2 100644 --- a/configuration/beans.xml +++ b/configuration/beans.xml @@ -2,11 +2,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" - xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> - + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> + <context:component-scan base-package="fr.soleil.archiving.snap.api"/> <!-- DATASOURCE DEFINITION VVVVVVV--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" @@ -15,15 +16,15 @@ <property name="maxActive" value="4"/> <property name="maxIdle" value="8"/> - <property name="driverClassName" value="com.mysql.jdbc.Driver" /> - <property name="url" value="jdbc:mysql://localhost/snap?autoReconnect=true" /> - <property name="username" value="snaparchiver" /> - <property name="password" value="snaparchiver" /> + <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> + <property name="url" value="jdbc:oracle:thin:@195.221.4.203:1521:TEST11SE" /> + <property name="username" value="snap" /> + <property name="password" value="snap" /> </bean> <!-- DATASOURCE DEFINITION ^^^^^^--> <!-- HIBERNATE DEFINITION VVVVVVV--> - <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> + <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> @@ -31,14 +32,16 @@ <value>valueTables.hbm.xml</value> </list> </property> + <property name="packagesToScan" value="fr.soleil.archiving.snap.api.model" /> <property name="hibernateProperties"> <value> - hibernate.dialect=org.hibernate.dialect.MySQL5Dialect + hibernate.dialect=org.hibernate.dialect.Oracle10gDialect + hibernate.default_schema=SNAP hibernate.show_sql=true hibernate.format_sql=true hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory - hibernate.current_session_context_class=thread + hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext hibernate.connection.autocommit=false hibernate.connection.release_mode=after_transaction hibernate.generate_statistics=true @@ -49,7 +52,7 @@ <!-- TRANSACTIONS DEFINITIONS VVVVVVV--> <!-- MANAGER --> - <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> + <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> @@ -67,38 +70,6 @@ <aop:advisor advice-ref="txAdvice" pointcut-ref="valDAOOperation"/> </aop:config> <!-- TRANSACTIONS DEFINITIONS ^^^^^^--> - - <!-- DAO BEANS DEFINITION VVVVVVV--> - <bean id="scNum1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScNum1ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - - <bean id="scNum2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScNum2ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - - <bean id="scStr1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScStr1ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - - <bean id="scStr2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.ScStr2ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - - <bean id="sp1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Sp1ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - - <bean id="sp2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Sp2ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - - <bean id="im1ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Im1ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - - <bean id="im2ValDAO" class="fr.soleil.archiving.snap.api.persistence.spring.dao.Im2ValDAOImpl"> - <constructor-arg ref="sessionFactory" /> - </bean> - <!-- DAO BEANS DEFINITION ^^^^^^--> + + </beans> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 256e1af..1f8f96c 100644 --- a/pom.xml +++ b/pom.xml @@ -77,19 +77,26 @@ <artifactId>commonArchivingApi</artifactId> </dependency> <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring</artifactId> - <exclusions> - <exclusion> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - </exclusion> - <exclusion> - <artifactId>commons-logging</artifactId> - <groupId>commons-logging</groupId> - </exclusion> - </exclusions> - </dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-orm</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> @@ -117,24 +124,8 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> + <version>4.12</version> <scope>test</scope> </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-test</artifactId> - <version>2.5.6</version> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - </exclusion> - <exclusion> - <artifactId>commons-logging</artifactId> - <groupId>commons-logging</groupId> - </exclusion> - </exclusions> - </dependency> </dependencies> - </project> diff --git a/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java b/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java index 7a6c709..0df77bc 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java +++ b/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java @@ -319,73 +319,6 @@ public class SnapManagerApi { } } - /** - * This method checks the registration and create the table of the - * attributes in the database - * - * @param attributeNameList - * @return true if the registration works - */ - /* - * private static boolean checkRegistration(String[] attributeNameList) - * throws SnapshotingException { - * - * for ( int i = 0 ; i < attributeNameList.length ; i++ ) { String - * attributeName = attributeNameList[ i ]; try { if ( - * !isRegistred(attributeName) ) { AttributeInfo attributeInfo = - * getAttributeInfo(attributeName); int index = - * attributeName.lastIndexOf("/"); String deviceName = - * attributeName.substring(0 , index); String[] attributeSplitName = - * split_att_name_3_fields(attributeName); java.sql.Timestamp time = new - * java.sql.Timestamp(new java.util.Date().getTime()); SnapAttributeHeavy - * snapAttributeHeavy = new SnapAttributeHeavy(attributeName); - * snapAttributeHeavy.setAttribute_complete_name(attributeName); // - * **************** The whole attribute name (device_name + attribute_name) - * snapAttributeHeavy.setAttribute_device_name(deviceName); - * snapAttributeHeavy.setRegistration_time(time); // **************** - * Attribute registration timestamp - * snapAttributeHeavy.setDomain(attributeSplitName[ 1 ]); // - * **************** domain to which the attribute is associated - * snapAttributeHeavy.setFamily(attributeSplitName[ 2 ]); // - * **************** family to which the attribute is associated - * snapAttributeHeavy.setMember(attributeSplitName[ 3 ]); // - * **************** member to which the attribute is associated - * snapAttributeHeavy.setAttribute_name(attributeSplitName[ 4 ]); // - * **************** attribute name - * snapAttributeHeavy.setData_type(attributeInfo.data_type); // - * **************** Attribute data type - * snapAttributeHeavy.setData_format(attributeInfo.data_format.value()); // - * **************** Attribute data format - * snapAttributeHeavy.setWritable(attributeInfo.writable.value()); // - * **************** Attribute read/write type - * snapAttributeHeavy.setMax_dim_x(attributeInfo.max_dim_x); // - * **************** Attribute Maximum X dimension - * snapAttributeHeavy.setMax_dim_y(attributeInfo.max_dim_y); // - * **************** Attribute Maximum Y dimension - * snapAttributeHeavy.setLevel(attributeInfo.level.value()); // - * **************** Attribute display level - * snapAttributeHeavy.setCtrl_sys(attributeSplitName[ 0 ]); // - * **************** Control system to which the attribute belongs - * snapAttributeHeavy.setArchivable(0); // **************** archivable - * (Property that precises whether the attribute is "on-run-only" - * archivable, or if it is "always" archivable - * snapAttributeHeavy.setSubstitute(0); // **************** substitute - * snapAttributeHeavy.setDescription(attributeInfo.description); - * snapAttributeHeavy.setLabel(attributeInfo.label); - * snapAttributeHeavy.setUnit(attributeInfo.unit); - * snapAttributeHeavy.setStandard_unit(attributeInfo.standard_unit); - * snapAttributeHeavy.setDisplay_unit(attributeInfo.display_unit); - * snapAttributeHeavy.setFormat(attributeInfo.format); - * snapAttributeHeavy.setMin_value(attributeInfo.min_value); - * snapAttributeHeavy.setMax_value(attributeInfo.max_value); - * snapAttributeHeavy.setMin_alarm(attributeInfo.min_alarm); - * snapAttributeHeavy.setMax_alarm(attributeInfo.max_alarm); - * - * if ( m_snapDataBase == null ) return false; else - * m_snapDataBase.registerAttribute(snapAttributeHeavy); - * - * } } catch ( SnapshotingException e ) { throw e; } } return true; } - */ private static String[] split_att_name_3_fields(String att_name) { String host = ""; @@ -467,7 +400,6 @@ public class SnapManagerApi { // exactly those defined in the TangoDatabase (to avoid problems of // case in hibernate modules) - // AttributeInfo att_info = attributeGetInfo(att_complete_name); final int index = att_complete_name.lastIndexOf("/"); String device_name = att_complete_name.substring(0, index); final DeviceProxy deviceProxy = new DeviceProxy(device_name); @@ -756,14 +688,6 @@ public class SnapManagerApi { final List<SnapAttributeExtract> theoricList = getContextAssociatedAttributes(contextID); final List<SnapAttributeExtract> result = new ArrayList<SnapAttributeExtract>(theoricList); snapDataBase.getSnapResults(new ArrayList<SnapAttributeExtract>(theoricList), snapshot.getId_snap()); - // Gets the attributes's values - // for (int i = 0; i < theoricList.size(); i++) { - // final SnapAttributeExtract snapAttributeLight = theoricList.get(i); - // final SnapAttributeExtract snapAttributeExtract = - // snapDataBase.getSnapResult(snapAttributeLight, - // snapshot.getId_snap()); - // arrayList.add(snapAttributeExtract); - // } return result; } @@ -831,12 +755,6 @@ public class SnapManagerApi { final List<SnapAttributeExtract> theoricList = getContextAssociatedAttributes(contextID); final List<SnapAttributeExtract> result = new ArrayList<SnapAttributeExtract>(theoricList); snapDataBase.getSnapResults(result, id_snap); - // for (int i = 0; i < theoricList.size(); i++) { - // final SnapAttributeExtract snapAttributeLight = theoricList.get(i); - // final SnapAttributeExtract snapAttributeExtract = - // snapDataBase.getSnapResult(snapAttributeLight, id_snap); - // arrayList.add(snapAttributeExtract); - // } return result; } @@ -902,7 +820,6 @@ public class SnapManagerApi { throw new SnapshotingException(message, reason, ErrSeverity.PANIC, desc, ""); } } catch (final DevFailed devFailed) { - // devFailed.printStackTrace(); final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.DEV_UNREACH_EXCEPTION; final String reason = "Failed while executing SnapManagerApi.setEquipmentsWithSnapshot() method..."; final String desc = ""; @@ -1087,7 +1004,6 @@ public class SnapManagerApi { throw new SnapshotingException(message, reason, ErrSeverity.PANIC, desc, ""); } } catch (final DevFailed devFailed) { - // devFailed.printStackTrace(); final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.DEV_UNREACH_EXCEPTION; final String reason = "Failed while executing SnapManagerApi.setEquipmentWithCommand() method..."; final String desc = devFailed.getMessage(); diff --git a/src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java b/src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java new file mode 100644 index 0000000..9c6bc1e --- /dev/null +++ b/src/main/java/fr/soleil/archiving/snap/api/model/Snapshot.java @@ -0,0 +1,50 @@ +package fr.soleil.archiving.snap.api.model; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "SNAPSHOT", schema = "SNAP") +public class Snapshot implements Serializable { + /** + * + */ + private static final long serialVersionUID = -5816631000141431971L; + + private int idContext = -1; // Identifier for the related context + private int idSnap = -1; // Identifier for this snapshot + private java.sql.Timestamp time = null; // Timestamp asociated to this + // snapshot + + @Id + @Column(name = "ID_SNAP", unique = true, nullable = false, precision = 18, scale = 0) + public int getIdSnap() { + return idSnap; + } + + public void setIdSnap(int id_snap) { + this.idSnap = id_snap; + } + + @Column(name = "ID_CONTEXT", unique = true, nullable = false, precision = 18, scale = 0) + public int getIdContext() { + return idContext; + } + + public void setIdContext(int id_context) { + this.idContext = id_context; + } + + @Column(name = "TIME", nullable = false) + public java.sql.Timestamp getTime() { + return time; + } + + public void setTime(java.sql.Timestamp time) { + this.time = time; + } +} diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java index 0731361..6f9af66 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManager.java @@ -4,4 +4,6 @@ import fr.soleil.actiongroup.collectiveaction.onattributes.plugin.persistance.Pe public interface SnapshotPersistenceManager extends PersistenceManager { public String getResourceName(); + + void autowired(Object object); } diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java index 743af52..eb4bc2e 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/SnapshotPersistenceManagerFactory.java @@ -35,6 +35,7 @@ public class SnapshotPersistenceManagerFactory { } public SnapshotPersistenceManager getManager(String beansFileName, String userName, String password) { - return new SpringSnapshotPersistenceManagerImpl(beansFileName, userName, password); + return new SpringSnapshotPersistenceManagerImpl(beansFileName, userName, password); } + } diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java index 0c80aa4..9a4126a 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/SpringSnapshotPersistenceManagerImpl.java @@ -27,7 +27,7 @@ public class SpringSnapshotPersistenceManagerImpl implements SnapshotPersistence private final DAOBeansLoader beans; SpringSnapshotPersistenceManagerImpl(final String beansFileName, final String userName, final String password) { - beans = new ClasspathDAOBeansLoader(beansFileName, userName, password); + beans = new ClasspathDAOBeansLoader(beansFileName, userName, password); } @Override @@ -76,6 +76,11 @@ public class SpringSnapshotPersistenceManagerImpl implements SnapshotPersistence */ @Override public String getResourceName() { - return beans.getResourceName(); + return beans.getResourceName(); + } + + @Override + public void autowired(Object object) { + beans.getApplicationContext().getAutowireCapableBeanFactory().autowireBean(object); } } diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java new file mode 100644 index 0000000..0c88230 --- /dev/null +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAO.java @@ -0,0 +1,18 @@ +package fr.soleil.archiving.snap.api.persistence.spring.dao; + +import java.io.Serializable; +import java.util.List; + +public interface AbstractHibernateDAO<T extends Serializable> { + public T findOne(int id); + + public List<T> findAll(); + + public void save(T entity); + + public T update(T entity); + + public void delete(T entity); + + public void deleteById(int id); +} \ No newline at end of file diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java new file mode 100644 index 0000000..fa87ff9 --- /dev/null +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractHibernateDAOImp.java @@ -0,0 +1,55 @@ +package fr.soleil.archiving.snap.api.persistence.spring.dao; + +import java.io.Serializable; +import java.util.List; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.GenericTypeResolver; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public abstract class AbstractHibernateDAOImp<T extends Serializable> implements AbstractHibernateDAO<T> { + private Class<T> clazz; + + @Autowired + private SessionFactory sessionFactory; + + @SuppressWarnings("unchecked") + public AbstractHibernateDAOImp() { + this.clazz = (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), AbstractHibernateDAOImp.class); + } + + @SuppressWarnings("unchecked") + public T findOne(int id) { + return (T) getCurrentSession().get(clazz, id); + } + + @SuppressWarnings("unchecked") + public List<T> findAll() { + return getCurrentSession().createQuery("from " + clazz.getName()).list(); + } + + public void save(T entity) { + getCurrentSession().persist(entity); + } + + @SuppressWarnings("unchecked") + public T update(T entity) { + return (T) getCurrentSession().merge(entity); + } + + public void delete(T entity) { + getCurrentSession().delete(entity); + } + + public void deleteById(int id) { + final T entity = findOne(id); + delete(entity); + } + + protected final Session getCurrentSession() { + return sessionFactory.getCurrentSession(); + } +} \ No newline at end of file diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java index 6808b62..11ba52e 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/AbstractValDAO.java @@ -1,9 +1,10 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; +import org.hibernate.Session; import org.hibernate.SessionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.beans.factory.annotation.Autowired; import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; import fr.soleil.archiving.snap.api.persistence.spring.dto.Val; @@ -11,17 +12,26 @@ import fr.soleil.archiving.snap.api.persistence.spring.dto.Val; public abstract class AbstractValDAO<V extends Val> implements ValDAO<V> { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractValDAO.class); - protected HibernateTemplate hibernateTemplate; + @Autowired + SessionFactory sessionFactory; + + protected Session getCurrentSession() { + return sessionFactory.getCurrentSession(); + } + + public AbstractValDAO() { + + } + + public AbstractValDAO(final SessionFactory sessionFactory) { - public AbstractValDAO(final SessionFactory sessionFactory) { - this.hibernateTemplate = new HibernateTemplate(sessionFactory); } @Override public V create(final V line) { LOGGER.debug("saving hibernate " + line); try { - hibernateTemplate.save(line); + getCurrentSession().save(line); } catch (Exception e) { LOGGER.error("hibernate save error", e); } @@ -35,7 +45,7 @@ public abstract class AbstractValDAO<V extends Val> implements ValDAO<V> { V line = null; try { final Class<V> valueClass = this.getValueClass(); - final Object res = hibernateTemplate.get(valueClass, compositeId); + final Object res = getCurrentSession().get(valueClass, compositeId); line = valueClass.cast(res); } catch (Exception e) { LOGGER.error("hibernate find error", e); @@ -43,5 +53,14 @@ public abstract class AbstractValDAO<V extends Val> implements ValDAO<V> { return line; } + @Override + public void delete(final V item) { + try { + getCurrentSession().delete(item); + } catch (Exception e) { + LOGGER.error("hibernate find error", e); + } + } + protected abstract Class<V> getValueClass(); } diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java index 4c7818e..614eb44 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ClasspathDAOBeansLoader.java @@ -25,13 +25,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.apache.commons.dbcp.BasicDataSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.xml.XmlBeanFactory; -import org.springframework.core.io.ClassPathResource; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; import fr.soleil.archiving.snap.api.persistence.spring.dto.Im1Val; import fr.soleil.archiving.snap.api.persistence.spring.dto.Im2Val; @@ -46,6 +44,7 @@ public class ClasspathDAOBeansLoader implements DAOBeansLoader { final static XLogger logger = XLoggerFactory.getXLogger(ClasspathDAOBeansLoader.class); private static final String DEFAULT_BEANS_FILE_NAME = "beans.xml"; private final String resourceName; + private final ApplicationContext applicationContext; private ValDAO<ScNum1Val> scNum1ValDAO; private ValDAO<ScNum2Val> scNum2ValDAO; @@ -56,23 +55,23 @@ public class ClasspathDAOBeansLoader implements DAOBeansLoader { private ValDAO<Im1Val> im1ValDAO; private ValDAO<Im2Val> im2ValDAO; - public ClasspathDAOBeansLoader(String _resourceName, String userName, String password) { + public ClasspathDAOBeansLoader(String _resourceName, String userName, String password) { logger.entry(_resourceName,userName,password); boolean defaultResource = _resourceName == null || _resourceName.trim().length() == 0; this.resourceName = defaultResource ? DEFAULT_BEANS_FILE_NAME : _resourceName; logger.info("configure hibernate resource: " + resourceName); - BeanFactory factory = new XmlBeanFactory(new ClassPathResource(this.resourceName)); + applicationContext = new ClassPathXmlApplicationContext(this.resourceName); - if (factory.getBean("dataSource") instanceof BasicDataSource) { - BasicDataSource datasource = (BasicDataSource) factory.getBean("dataSource"); + if (applicationContext.getBean("dataSource") instanceof BasicDataSource) { + BasicDataSource datasource = (BasicDataSource) applicationContext.getBean("dataSource"); logger.info("Hibernate dataSource url: " + datasource.getUrl()); logger.info("configure dataSource userName from device: " + userName); logger.info("configure dataSource password from device: " + password); datasource.setUsername(userName); datasource.setPassword(password); } - this.instantiateBeans(factory); + this.instantiateBeans(applicationContext); logger.exit(); } @@ -158,4 +157,9 @@ public class ClasspathDAOBeansLoader implements DAOBeansLoader { public String getResourceName() { return this.resourceName; } + + @Override + public ApplicationContext getApplicationContext() { + return applicationContext; + } } diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java index 0512b58..33ba594 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/DAOBeansLoader.java @@ -24,6 +24,8 @@ */ package fr.soleil.archiving.snap.api.persistence.spring.dao; +import org.springframework.context.ApplicationContext; + import fr.soleil.archiving.snap.api.persistence.spring.dto.Im1Val; import fr.soleil.archiving.snap.api.persistence.spring.dto.Im2Val; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum1Val; @@ -36,6 +38,8 @@ import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp2Val; public interface DAOBeansLoader { public String getResourceName(); + public ApplicationContext getApplicationContext(); + public ValDAO<ScNum1Val> getScNum1ValDAO(); public ValDAO<ScNum2Val> getScNum2ValDAO(); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java index bc98229..ebed92a 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im1ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.Im1Val; +@Service("im1ValDAO") public class Im1ValDAOImpl extends AbstractValDAO<Im1Val> { public Im1ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java index 713a5ae..ae15604 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Im2ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.Im2Val; +@Service("im2ValDAO") public class Im2ValDAOImpl extends AbstractValDAO<Im2Val> { public Im2ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java index 2bed432..20b0891 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum1ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum1Val; +@Service("scNum1ValDAO") public class ScNum1ValDAOImpl extends AbstractValDAO<ScNum1Val> { public ScNum1ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java index 89d57f9..998e592 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScNum2ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum2Val; +@Service("scNum2ValDAO") public class ScNum2ValDAOImpl extends AbstractValDAO<ScNum2Val> { public ScNum2ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java index 40546b3..9485bf2 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr1ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr1Val; +@Service("scStr1ValDAO") public class ScStr1ValDAOImpl extends AbstractValDAO<ScStr1Val> { public ScStr1ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java index 5702f1e..9038f27 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ScStr2ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr2Val; +@Service("scStr2ValDAO") public class ScStr2ValDAOImpl extends AbstractValDAO<ScStr2Val> { public ScStr2ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java new file mode 100644 index 0000000..9400a79 --- /dev/null +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAO.java @@ -0,0 +1,7 @@ +package fr.soleil.archiving.snap.api.persistence.spring.dao; + +import fr.soleil.archiving.snap.api.model.Snapshot; + +public interface SnapshotDAO extends AbstractHibernateDAO<Snapshot> { + +} diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java new file mode 100644 index 0000000..413276d --- /dev/null +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/SnapshotDAOImp.java @@ -0,0 +1,13 @@ +package fr.soleil.archiving.snap.api.persistence.spring.dao; + +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import fr.soleil.archiving.snap.api.model.Snapshot; + +@Repository +@Transactional +public class SnapshotDAOImp extends AbstractHibernateDAOImp<Snapshot> implements SnapshotDAO { + + +} diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java index 8c5c73c..d9ae39b 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp1ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp1Val; +@Service("sp1ValDAO") public class Sp1ValDAOImpl extends AbstractValDAO<Sp1Val> { public Sp1ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java index 98d7db7..9f8ea54 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/Sp2ValDAOImpl.java @@ -1,9 +1,11 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao; import org.hibernate.SessionFactory; +import org.springframework.stereotype.Service; import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp2Val; +@Service("sp2ValDAO") public class Sp2ValDAOImpl extends AbstractValDAO<Sp2Val> { public Sp2ValDAOImpl(SessionFactory sessionFactory) { super(sessionFactory); diff --git a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java index bb960d8..91f1f23 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java +++ b/src/main/java/fr/soleil/archiving/snap/api/persistence/spring/dao/ValDAO.java @@ -33,4 +33,6 @@ public interface ValDAO<V extends Val> { // Defined as executed within a read-only transaction in beans.xml public V findByKey(CompositeId compositeId); + + public void delete(V item); } diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java index 4515979..eff392b 100644 --- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/AbstractValDAOTest.java @@ -1,45 +1,24 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao.test; -import org.junit.Ignore; +import static org.junit.Assert.assertNotNull; + import org.junit.Test; -import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests; +import org.junit.runner.RunWith; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; -import fr.soleil.archiving.snap.api.persistence.SnapshotPersistenceManager; -import fr.soleil.archiving.snap.api.persistence.SnapshotPersistenceManagerFactory; import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO; import fr.soleil.archiving.snap.api.persistence.spring.dto.Val; -@Ignore -public abstract class AbstractValDAOTest<V extends Val> extends AbstractTransactionalDataSourceSpringContextTests { - protected ValDAO<V> dao; - - protected AbstractValDAOTest() { - // This means the names of the daughter classes' DAO setters have to be the same bean names as in beans.xml - super.setAutowireMode(AUTOWIRE_BY_NAME); - } - - // Specifies the Spring configuration to load for this test fixture - @Override - protected String[] getConfigLocations() { - SnapshotPersistenceManagerFactory factory = SnapshotPersistenceManagerFactory.getInstance(); - // will use the default resource name - SnapshotPersistenceManager manager = factory.getManager(null, null, null); - return new String[] { "classpath:" + manager.getResourceName() }; - } - - @Test - public void testInsert() { - V[] lines = this.buildLines(); - for (int i = 0; i < lines.length; i++) { - dao.create(lines[i]); - V inDB = dao.findByKey(lines[i].getCompositeId()); - - this.compare(lines[i], inDB); - } - } - +@Rollback(true) +@ContextConfiguration({ "classpath:beans.xml" }) +@Transactional +@RunWith(SpringJUnit4ClassRunner.class) +public abstract class AbstractValDAOTest<V extends Val> { protected void compare(V original, V copy) { - super.assertNotNull(copy); + assertNotNull(copy); } protected V[] buildLines() { @@ -57,5 +36,18 @@ public abstract class AbstractValDAOTest<V extends Val> extends AbstractTransact protected abstract V buildLine(); + protected abstract ValDAO<V> getDao(); + protected abstract V[] buildEmptyLines(int numberOfLines); + + @Test + public void testInsert() { + V[] lines = this.buildLines(); + for (int i = 0; i < lines.length; i++) { + getDao().create(lines[i]); + V inDB = getDao().findByKey(lines[i].getCompositeId()); + + this.compare(lines[i], inDB); + } + } } diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java new file mode 100644 index 0000000..551984b --- /dev/null +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ClasspathDAOBeansLoaderTest.java @@ -0,0 +1,45 @@ +package fr.soleil.archiving.snap.api.persistence.spring.dao.test; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import fr.soleil.archiving.snap.api.persistence.spring.dao.ClasspathDAOBeansLoader; +import fr.soleil.archiving.snap.api.persistence.spring.dao.DAOBeansLoader; +import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; +import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr1Val; + + +@ContextConfiguration({ "classpath:beans.xml" }) +@Transactional +@RunWith(SpringJUnit4ClassRunner.class) +public class ClasspathDAOBeansLoaderTest { + + @Test + public void construtorTest() { + DAOBeansLoader beans = new ClasspathDAOBeansLoader(null, "snap", "snap"); + assertNotNull(beans.getScStr1ValDAO()); + ScStr1Val line = new ScStr1Val(); + + CompositeId compositeId = new CompositeId(); + int idAtt = 239; + int idSnap = 235; + compositeId.setIdAtt(idAtt); + compositeId.setIdSnap(idSnap); + line.setCompositeId(compositeId); + + String value = "ScStr1Val example value"; + line.setValue(value); + + line = beans.getScStr1ValDAO().create(line); + assertNotNull(beans.getScStr1ValDAO().findByKey(compositeId)); + beans.getScStr1ValDAO().delete(line); + assertNull(beans.getScStr1ValDAO().findByKey(compositeId)); + } + +} diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java index 85e0adf..f7c383e 100644 --- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum1ValDAOTest.java @@ -1,16 +1,24 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao.test; +import static org.junit.Assert.assertEquals; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO; import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum1Val; -import org.junit.Ignore; -@Ignore public class ScNum1ValDAOTest extends AbstractValDAOTest<ScNum1Val> { + + @Autowired + @Qualifier("scNum1ValDAO") + protected ValDAO<ScNum1Val> dao; + @Override protected void compare(ScNum1Val original, ScNum1Val copy) { super.compare(original, copy); - super.assertEquals(original.getValue(), copy.getValue()); + assertEquals(original.getValue(), copy.getValue(), 0); } @Override @@ -30,16 +38,15 @@ public class ScNum1ValDAOTest extends AbstractValDAOTest<ScNum1Val> { return line; } - /** - * @param scNum1ValDAO - * the scNum1ValDAO to set - */ - public void setScNum1ValDAO(ValDAO<ScNum1Val> scNum1ValDAO) { - super.dao = scNum1ValDAO; - } + @Override protected ScNum1Val[] buildEmptyLines(int numberOfLines) { return new ScNum1Val[numberOfLines]; } + + @Override + protected ValDAO<ScNum1Val> getDao() { + return dao; + } } diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java index 499b5cd..387a046 100644 --- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScNum2ValDAOTest.java @@ -1,17 +1,25 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao.test; +import static org.junit.Assert.assertEquals; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO; import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScNum2Val; -import org.junit.Ignore; -@Ignore public class ScNum2ValDAOTest extends AbstractValDAOTest<ScNum2Val> { + + @Autowired + @Qualifier("scNum2ValDAO") + protected ValDAO<ScNum2Val> dao; + @Override protected void compare(ScNum2Val original, ScNum2Val copy) { super.compare(original, copy); - super.assertEquals(original.getReadValue(), copy.getReadValue()); - super.assertEquals(original.getWriteValue(), copy.getWriteValue()); + assertEquals(original.getReadValue(), copy.getReadValue(), 0); + assertEquals(original.getWriteValue(), copy.getWriteValue(), 0); } @Override @@ -33,16 +41,13 @@ public class ScNum2ValDAOTest extends AbstractValDAOTest<ScNum2Val> { return line; } - /** - * @param scNum1ValDAO - * the scNum1ValDAO to set - */ - public void setScNum2ValDAO(ValDAO<ScNum2Val> scNum1ValDAO) { - super.dao = scNum1ValDAO; - } - @Override protected ScNum2Val[] buildEmptyLines(int numberOfLines) { return new ScNum2Val[numberOfLines]; } + + @Override + protected ValDAO<ScNum2Val> getDao() { + return dao; + } } diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java index 5e9f800..0b3f74f 100644 --- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr1ValDAOTest.java @@ -1,16 +1,26 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao.test; +import static org.junit.Assert.assertEquals; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO; import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr1Val; -import org.junit.Ignore; -@Ignore + public class ScStr1ValDAOTest extends AbstractValDAOTest<ScStr1Val> { + + @Autowired + @Qualifier("scStr1ValDAO") + protected ValDAO<ScStr1Val> dao; + + @Override protected void compare(ScStr1Val original, ScStr1Val copy) { super.compare(original, copy); - super.assertEquals(original.getValue(), copy.getValue()); + assertEquals("shoudl be equal", original.getValue(), copy.getValue()); } @Override @@ -30,16 +40,14 @@ public class ScStr1ValDAOTest extends AbstractValDAOTest<ScStr1Val> { return line; } - /** - * @param scNum1ValDAO - * the scNum1ValDAO to set - */ - public void setScStr1ValDAO(ValDAO<ScStr1Val> scNum1ValDAO) { - super.dao = scNum1ValDAO; - } @Override protected ScStr1Val[] buildEmptyLines(int numberOfLines) { return new ScStr1Val[numberOfLines]; } + + @Override + protected ValDAO<ScStr1Val> getDao() { + return dao; + } } diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java index 1fb6907..a852c84 100644 --- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/ScStr2ValDAOTest.java @@ -1,17 +1,24 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao.test; +import static org.junit.Assert.assertEquals; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO; import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; import fr.soleil.archiving.snap.api.persistence.spring.dto.ScStr2Val; -import org.junit.Ignore; -@Ignore public class ScStr2ValDAOTest extends AbstractValDAOTest<ScStr2Val> { + @Autowired + @Qualifier("scStr2ValDAO") + protected ValDAO<ScStr2Val> dao; + @Override protected void compare(ScStr2Val original, ScStr2Val copy) { super.compare(original, copy); - super.assertEquals(original.getReadValue(), copy.getReadValue()); - super.assertEquals(original.getWriteValue(), copy.getWriteValue()); + assertEquals("shoudl be equals", original.getReadValue(), copy.getReadValue()); + assertEquals("shoudl be equals", original.getWriteValue(), copy.getWriteValue()); } @Override @@ -33,16 +40,14 @@ public class ScStr2ValDAOTest extends AbstractValDAOTest<ScStr2Val> { return line; } - /** - * @param scNum1ValDAO - * the scNum1ValDAO to set - */ - public void setScStr2ValDAO(ValDAO<ScStr2Val> scNum1ValDAO) { - super.dao = scNum1ValDAO; - } @Override protected ScStr2Val[] buildEmptyLines(int numberOfLines) { return new ScStr2Val[numberOfLines]; } + + @Override + protected ValDAO<ScStr2Val> getDao() { + return dao; + } } diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java new file mode 100644 index 0000000..ec694a6 --- /dev/null +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/SnapshotDAOTest.java @@ -0,0 +1,35 @@ +package fr.soleil.archiving.snap.api.persistence.spring.dao.test; + +import static org.junit.Assert.assertNotNull; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import fr.soleil.archiving.snap.api.model.Snapshot; +import fr.soleil.archiving.snap.api.persistence.spring.dao.SnapshotDAO; + +@Rollback(true) +@ContextConfiguration({ "classpath:beans.xml" }) +@Transactional +@RunWith(SpringJUnit4ClassRunner.class) +public class SnapshotDAOTest { + @Autowired + SnapshotDAO dao; + + @Test + public void findTest() { + List<Snapshot> s = dao.findAll(); + for (Snapshot item : s) { + System.out.println(item.getIdSnap() + " " + item.getIdContext() + " " + item.getTime()); + } + assertNotNull(s); + } + +} diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java index c7afbc4..904d99c 100644 --- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp1ValDAOTest.java @@ -1,17 +1,25 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao.test; +import static org.junit.Assert.assertEquals; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO; import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp1Val; -import org.junit.Ignore; -@Ignore public class Sp1ValDAOTest extends AbstractValDAOTest<Sp1Val> { + + @Autowired + @Qualifier("sp1ValDAO") + protected ValDAO<Sp1Val> dao; + @Override protected void compare(Sp1Val original, Sp1Val copy) { super.compare(original, copy); - super.assertEquals(original.getValue(), copy.getValue()); - super.assertEquals(original.getDimX(), copy.getDimX()); + assertEquals(original.getValue(), copy.getValue()); + assertEquals(original.getDimX(), copy.getDimX()); } @Override @@ -33,16 +41,13 @@ public class Sp1ValDAOTest extends AbstractValDAOTest<Sp1Val> { return line; } - /** - * @param scNum1ValDAO - * the scNum1ValDAO to set - */ - public void setSp1ValDAO(ValDAO<Sp1Val> scNum1ValDAO) { - super.dao = scNum1ValDAO; - } - @Override protected Sp1Val[] buildEmptyLines(int numberOfLines) { return new Sp1Val[numberOfLines]; } + + @Override + protected ValDAO<Sp1Val> getDao() { + return dao; + } } diff --git a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java index d0c57bb..8637de5 100644 --- a/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java +++ b/src/test/java/fr/soleil/archiving/snap/api/persistence/spring/dao/test/Sp2ValDAOTest.java @@ -1,18 +1,26 @@ package fr.soleil.archiving.snap.api.persistence.spring.dao.test; +import static org.junit.Assert.assertEquals; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + import fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO; import fr.soleil.archiving.snap.api.persistence.spring.dto.CompositeId; import fr.soleil.archiving.snap.api.persistence.spring.dto.Sp2Val; -import org.junit.Ignore; -@Ignore public class Sp2ValDAOTest extends AbstractValDAOTest<Sp2Val> { + + @Autowired + @Qualifier("sp2ValDAO") + protected ValDAO<Sp2Val> dao; + @Override protected void compare(Sp2Val original, Sp2Val copy) { super.compare(original, copy); - super.assertEquals(original.getReadValue(), copy.getReadValue()); - super.assertEquals(original.getWriteValue(), copy.getWriteValue()); - super.assertEquals(original.getDimX(), copy.getDimX()); + assertEquals(original.getReadValue(), copy.getReadValue()); + assertEquals(original.getWriteValue(), copy.getWriteValue()); + assertEquals(original.getDimX(), copy.getDimX()); } @Override @@ -36,16 +44,13 @@ public class Sp2ValDAOTest extends AbstractValDAOTest<Sp2Val> { return line; } - /** - * @param scNum1ValDAO - * the scNum1ValDAO to set - */ - public void setSp2ValDAO(ValDAO<Sp2Val> scNum1ValDAO) { - super.dao = scNum1ValDAO; - } - @Override protected Sp2Val[] buildEmptyLines(int numberOfLines) { return new Sp2Val[numberOfLines]; } + + @Override + protected ValDAO<Sp2Val> getDao() { + return dao; + } } diff --git a/src/test/resources/beans.xml b/src/test/resources/beans.xml new file mode 100644 index 0000000..41180c8 --- /dev/null +++ b/src/test/resources/beans.xml @@ -0,0 +1,77 @@ +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:aop="http://www.springframework.org/schema/aop" + xmlns:tx="http://www.springframework.org/schema/tx" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> + <context:component-scan base-package="fr.soleil.archiving.snap.api"/> + <!-- DATASOURCE DEFINITION VVVVVVV--> + <bean id="dataSource" + class="org.apache.commons.dbcp.BasicDataSource" + destroy-method="close"> + <property name="initialSize" value="8"/> + <property name="maxActive" value="4"/> + <property name="maxIdle" value="8"/> + + <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> + <property name="url" value="jdbc:oracle:thin:@195.221.4.203:1521:TEST11SE" /> + <property name="username" value="snap" /> + <property name="password" value="snap" /> + </bean> + <!-- DATASOURCE DEFINITION ^^^^^^--> + + <!-- HIBERNATE DEFINITION VVVVVVV--> + <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> + <property name="dataSource" ref="dataSource"/> + + <property name="mappingResources"> + <list> + <value>valueTables.hbm.xml</value> + </list> + </property> + <property name="packagesToScan" value="fr.soleil.archiving.snap.api.model" /> + + <property name="hibernateProperties"> + <value> + hibernate.dialect=org.hibernate.dialect.Oracle10gDialect + hibernate.default_schema=SNAP + hibernate.show_sql=true + hibernate.format_sql=true + hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory + hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext + hibernate.connection.autocommit=false + hibernate.connection.release_mode=after_transaction + hibernate.generate_statistics=true + </value> + </property> + </bean> + <!-- HIBERNATE DEFINITION ^^^^^^--> + + <!-- TRANSACTIONS DEFINITIONS VVVVVVV--> + <!-- MANAGER --> + <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> + <property name="sessionFactory" ref="sessionFactory"/> + </bean> + + <tx:annotation-driven transaction-manager="transactionManager"/> + + <!-- DEFINES AN "ADVICE" IE. A WAY TO USE THE TRANSACTION MANAGER AROUND METHODS --> + <tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- the transactional advice (i.e. what 'happens'; see the <aop:advisor/> bean below) --> + <tx:attributes><!-- the transactional semantics... --> + <tx:method name="findBy*" read-only="true"/><!-- all methods starting with 'get' are read-only --> + <tx:method name="*"/><!-- other methods use the default transaction settings --> + </tx:attributes> + </tx:advice> + + <!-- DEFINES WHERE "ADVICES" WILL BE USED--> + <aop:config><!-- ensure that the above transactional advice runs for any execution of an operation defined by the FooService interface --> + <aop:pointcut id="valDAOOperation" expression="execution(* fr.soleil.archiving.snap.api.persistence.spring.dao.ValDAO.*(..))"/> + <aop:advisor advice-ref="txAdvice" pointcut-ref="valDAOOperation"/> + </aop:config> + <!-- TRANSACTIONS DEFINITIONS ^^^^^^--> + + +</beans> \ No newline at end of file diff --git a/src/test/resources/valueTables.hbm.xml b/src/test/resources/valueTables.hbm.xml new file mode 100644 index 0000000..8bf5854 --- /dev/null +++ b/src/test/resources/valueTables.hbm.xml @@ -0,0 +1,82 @@ +<?xml version="1.0"?> +<!DOCTYPE hibernate-mapping PUBLIC + "-//Hibernate/Hibernate Mapping DTD 3.0//EN" + "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + +<hibernate-mapping package="fr.soleil.archiving.snap.api.persistence.spring.dto"> + + <class name="ScNum1Val" table="t_sc_num_1val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="value" column="VALUE"/> + </class> + + <class name="ScNum2Val" table="t_sc_num_2val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="readValue" column="READ_VALUE"/> + <property name="writeValue" column="WRITE_VALUE"/> + </class> + + <class name="ScStr1Val" table="t_sc_str_1val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="value" column="VALUE"/> + </class> + + <class name="ScStr2Val" table="t_sc_str_2val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="readValue" column="READ_VALUE"/> + <property name="writeValue" column="WRITE_VALUE"/> + </class> + + <class name="Sp1Val" table="t_sp_1val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="dimX" column="DIM_X"/> + <property name="value" column="VALUE"/> + </class> + + <class name="Sp2Val" table="t_sp_2val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="dimX" column="DIM_X"/> + <property name="readValue" column="READ_VALUE"/> + <property name="writeValue" column="WRITE_VALUE"/> + </class> + + <class name="Im1Val" table="t_im_1val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="dimX" column="DIM_X"/> + <property name="dimY" column="DIM_Y"/> + <property name="value" column="VALUE"/> + </class> + + <class name="Im2Val" table="t_im_2val"> + <composite-id name="compositeId" class="CompositeId"> + <key-property name="idSnap" column="ID_SNAP"/> + <key-property name="idAtt" column="ID_ATT"/> + </composite-id> + <property name="dimX" column="DIM_X"/> + <property name="dimY" column="DIM_Y"/> + <property name="readValue" column="READ_VALUE"/> + <property name="writeValue" column="WRITE_VALUE"/> + </class> + +</hibernate-mapping> \ No newline at end of file -- GitLab