diff --git a/.classpath b/.classpath index 3f8b7611192bb9a494ade0d2bcc1d358f4d49ba4..bfbe1725010acc11dfee02824a4f84833ba28177 100644 --- a/.classpath +++ b/.classpath @@ -2,7 +2,6 @@ <classpath> <classpathentry kind="src" output="target/classes" path="src/main/java"/> <classpathentry excluding="**" including="**/*.java" kind="src" output="target/classes" path="src/main/resources"/> - <classpathentry kind="src" path="src/test/resources"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> <classpathentry kind="output" path="target/classes"/> diff --git a/.project b/.project index 8449a4332a46e89bafbf7654ef9fa21db72860c6..a4743907b8b54a7b2a121b98404e3a97a2bb4107 100644 --- a/.project +++ b/.project @@ -27,11 +27,4 @@ <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature> </natures> - <linkedResources> - <link> - <name>ArchivingConf</name> - <type>2</type> - <location>C:/SOLEIL_ROOT/tango-soleil-win32-5.5.8RC3/tango/bin/ArchivingConf</location> - </link> - </linkedResources> </projectDescription> diff --git a/pom.xml b/pom.xml index 25b09b537784a089addb167d69b167818b4daf2c..da8c0944c3ecff75c1e107b91f4d19caa8414740 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ <artifactId>hdbtdbArchivingServers</artifactId> <name>hdbtdbArchivingServers</name> - <version>2.2.15</version> + <version>2.2.16</version> <scm> <connection>${scm.connection.svn.tango-cs}:archiving/server/hdbtdbArchivingServers</connection> diff --git a/src/main/java/HdbArchiver/HdbArchiver.java b/src/main/java/HdbArchiver/HdbArchiver.java index 101d3ffe0bc4c58a19b72bf11b4e90a9f00dff53..5e89914784dffab134335cb390c01a0753e0a09b 100644 --- a/src/main/java/HdbArchiver/HdbArchiver.java +++ b/src/main/java/HdbArchiver/HdbArchiver.java @@ -365,6 +365,7 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.Vector; +import java.util.concurrent.Executors; import org.omg.CORBA.SystemException; import org.omg.CORBA.UserException; @@ -640,26 +641,8 @@ public class HdbArchiver extends DeviceImpl implements TangoConst { get_logger().error("ERROR : Database unconnected !!"); } else { setControlMode(safetyPeriod); - try { - final Vector<AttributeLightMode> myCurrentTasks = dbProxy.getArchiverCurrentTasks(device_name); - if (myCurrentTasks.size() > 0) { - final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.basicObjectCreation(); - for (final AttributeLightMode attributeLightMode : myCurrentTasks) { - archivingMessConfig.add(attributeLightMode); - } - launchStartArchivingTask(archivingMessConfig, false, false); - } else { - TangoStateUtils.setOn(this, archivingStatus); - } - } catch (final ArchivingException e) { - TangoStateUtils.setFault(this, e.getMessage()); - get_logger().error(e.toString()); - Util.out2.println(e.toString()); - } catch (final DevFailed devFailed) { - final String message = DBTools.getCompleteMessage(devFailed); - get_logger().error(message); - TangoStateUtils.setFault(this, message); - } + // start archiving in a thread + Executors.newSingleThreadExecutor().submit(new InitDeviceTask()); } } @@ -683,6 +666,29 @@ public class HdbArchiver extends DeviceImpl implements TangoConst { } } + private class InitDeviceTask implements Runnable { + @Override + public void run() { + try { + final Vector<AttributeLightMode> myCurrentTasks = dbProxy.getArchiverCurrentTasks(device_name); + if (myCurrentTasks.size() > 0) { + final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.basicObjectCreation(); + for (final AttributeLightMode attributeLightMode : myCurrentTasks) { + archivingMessConfig.add(attributeLightMode); + } + triggerArchiving(archivingMessConfig.toArray(), false); + } else { + TangoStateUtils.setOn(HdbArchiver.this, archivingStatus); + } + } catch (final DevFailed devFailed) { + // triggerArchiving has thrown + TangoStateUtils.setDisable(HdbArchiver.this, archivingStatus); + } catch (ArchivingException e) { + TangoStateUtils.setFault(HdbArchiver.this, e.getMessage()); + } + } + } + private class StartArchivingRunnable implements Runnable { private final ArchivingMessConfig archivingMessConfig; @@ -704,8 +710,8 @@ public class HdbArchiver extends DeviceImpl implements TangoConst { } /** - * @param safetyPeriod2 - */ + * @param safetyPeriod2 + */ private void setControlMode(final String _safetyPeriod) throws DevFailed { get_logger().info("setControlMode/safetyPeriod/" + _safetyPeriod); final ISaferPeriodCalculator saferPeriodCalculator = SaferPeriodCalculatorFactory.getImpl(_safetyPeriod); diff --git a/src/main/java/TdbArchiver/Collector/DbProxy.java b/src/main/java/TdbArchiver/Collector/DbProxy.java index 6a48b6b67b0920aa4f1b818cfec85df34606cb8b..9af4c7a217ec5ef7cb317f918df79c14b982fca6 100644 --- a/src/main/java/TdbArchiver/Collector/DbProxy.java +++ b/src/main/java/TdbArchiver/Collector/DbProxy.java @@ -69,6 +69,7 @@ package TdbArchiver.Collector; import java.util.Vector; +import fr.esrf.Tango.DevFailed; import fr.esrf.TangoApi.Database; import fr.esrf.TangoDs.Util; import fr.soleil.commonarchivingapi.ArchivingTools.Diary.ILogger; @@ -166,44 +167,21 @@ public class DbProxy { tableName, writable); } - public Vector<AttributeLightMode> getArchiverCurrentTasks(final String archiverName) // throws - // ArchivingException - // , DevFailed - { + public Vector<AttributeLightMode> getArchiverCurrentTasks(final String archiverName) throws DevFailed, + ArchivingException { // System.out.println("DbProxy.getArchiverCurrentTasks"); Vector<AttributeLightMode> archiverCurrentTasks; final boolean facility = manager.getFacility(); - try { - archiverCurrentTasks = manager - .getDataBase() - .getMode() - .getArchiverCurrentTasks( - (facility ? "//" + new Database().get_tango_host() + "/" : "") + archiverName); - System.out.println("Current Tasks (" + archiverCurrentTasks.size() + "): .... \n\r\t"); - for (int i = 0; i < archiverCurrentTasks.size(); i++) { - final AttributeLightMode attributeLightMode = archiverCurrentTasks.elementAt(i); - System.out.println(">>>>>>>>>>>>\t" + i + "\t<<<<<<<<<<<<"); - System.out.println("attributeLightMode.toString() : \r\n" + attributeLightMode.toString() + "\r\n"); - } - return archiverCurrentTasks; - } - /* - * catch ( ArchivingException e ) { System.err.println("ERROR !! " + - * "\r\n" + "\t Origin : \t " + "DbProxy.getArchiverCurrentTasks" + - * "\r\n" + "\t Reason : \t " + e.getClass().getName() + "\r\n" + - * "\t Description : \t " + e.getMessage() + "\r\n" + - * "\t Additional information : \t " + "Unable to get current tasks..." - * + "\r\n"); throw e; } catch ( DevFailed devFailed ) { - * Util.out2.println("ERROR !! " + "\r\n" + "\t Origin : \t " + - * "DbProxy.getArchiverCurrentTasks" + "\r\n" + "\t Reason : \t " + - * "UNKNOWN_ERROR" + "\r\n" + "\t Description : \t " + - * devFailed.getMessage() + "\r\n" + "\t Additional information : \t " + - * "" + "\r\n"); throw devFailed; } - */ - catch (final Exception e) { - e.printStackTrace(); - return null; + archiverCurrentTasks = manager.getDataBase().getMode() + .getArchiverCurrentTasks((facility ? "//" + new Database().get_tango_host() + "/" : "") + archiverName); + System.out.println("Current Tasks (" + archiverCurrentTasks.size() + "): .... \n\r\t"); + for (int i = 0; i < archiverCurrentTasks.size(); i++) { + final AttributeLightMode attributeLightMode = archiverCurrentTasks.elementAt(i); + System.out.println(">>>>>>>>>>>>\t" + i + "\t<<<<<<<<<<<<"); + System.out.println("attributeLightMode.toString() : \r\n" + attributeLightMode.toString() + "\r\n"); } + return archiverCurrentTasks; + } public void deleteOldRecords(final long time, final String[] attributeList) throws ArchivingException { diff --git a/src/main/java/TdbArchiver/TdbArchiver.java b/src/main/java/TdbArchiver/TdbArchiver.java index 745373804b2d0b4b78539e69ad29b68092fcbbe4..83788a076598b1a1025a2e393f068258477ec99f 100644 --- a/src/main/java/TdbArchiver/TdbArchiver.java +++ b/src/main/java/TdbArchiver/TdbArchiver.java @@ -392,6 +392,7 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.Vector; +import java.util.concurrent.Executors; import org.omg.CORBA.SystemException; import org.omg.CORBA.UserException; @@ -652,24 +653,7 @@ public class TdbArchiver extends DeviceImpl implements TangoConst { TangoStateUtils.setFault(this, "database connection error"); get_logger().error("ERROR : Database unconnected !!"); } else { - try { - final Vector<AttributeLightMode> myCurrentTasks = dbProxy.getArchiverCurrentTasks(device_name); - if (myCurrentTasks != null && myCurrentTasks.size() > 0) { - final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.basicObjectCreation(); - for (int i = 0; i < myCurrentTasks.size(); i++) { - archivingMessConfig.add(myCurrentTasks.elementAt(i)); - } - - final boolean forceThreadedMode = false; - startArchiving(archivingMessConfig, forceThreadedMode, false); - } else { - TangoStateUtils.setOn(this, archivingStatus); - } - } catch (final DevFailed devFailed) { - final String message = DBTools.getCompleteMessage(devFailed); - get_logger().error(message); - TangoStateUtils.setFault(this, message); - } + Executors.newSingleThreadExecutor().submit(new InitDeviceTask()); } } @@ -708,6 +692,29 @@ public class TdbArchiver extends DeviceImpl implements TangoConst { } } + private class InitDeviceTask implements Runnable { + @Override + public void run() { + try { + final Vector<AttributeLightMode> myCurrentTasks = dbProxy.getArchiverCurrentTasks(device_name); + if (myCurrentTasks.size() > 0) { + final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.basicObjectCreation(); + for (final AttributeLightMode attributeLightMode : myCurrentTasks) { + archivingMessConfig.add(attributeLightMode); + } + triggerArchiving(archivingMessConfig.toArray(), false); + } else { + TangoStateUtils.setOn(TdbArchiver.this, archivingStatus); + } + } catch (final DevFailed devFailed) { + // triggerArchiving has thrown + TangoStateUtils.setDisable(TdbArchiver.this, archivingStatus); + } catch (ArchivingException e) { + TangoStateUtils.setFault(TdbArchiver.this, e.getMessage()); + } + } + } + private class StartArchivingRunnable implements Runnable { private final ArchivingMessConfig archivingMessConfig; private final boolean updateAMTTable; diff --git a/src/test/resources/log4j.xml b/src/test/resources/log4j.xml deleted file mode 100644 index 89b5ee06f20b4ddccc50bd5fe1182d96a67c88a8..0000000000000000000000000000000000000000 --- a/src/test/resources/log4j.xml +++ /dev/null @@ -1,105 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> - -<!-- An example log4j configuration xml file for log4jdbc --> -<!-- Logging levels are: --> -<!-- DEBUG < INFO < WARN < ERROR < FATAL --> - -<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> - - <appender name="stdout-appender" class="org.apache.log4j.ConsoleAppender"> - <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %c{1}: %m%n"/> - </layout> - </appender> - - <appender name="sql-appender" class="org.apache.log4j.FileAppender"> - <param name="File" value="./logs/sql.log"/> - <param name="Append" value="false"/> - <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="-----> %d{yyyy-MM-dd HH:mm:ss.SSS} <%t> %m%n%n"/> - </layout> - </appender> - - <appender name="sql-timing-appender" class="org.apache.log4j.FileAppender"> - <param name="File" value="./logs/sqltiming.log"/> - <param name="Append" value="false"/> - <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="-----> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n"/> - </layout> - </appender> - - <appender name="jdbc-appender" class="org.apache.log4j.FileAppender"> - <param name="File" value="./logs/jdbc.log"/> - <param name="Append" value="false"/> - <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n"/> - </layout> - </appender> - - <appender name="jdbc-connection" class="org.apache.log4j.FileAppender"> - <param name="File" value="./logs/connection.log"/> - <param name="Append" value="false"/> - <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n"/> - </layout> - </appender> - - <!-- - The Following 5 logs can be turned on and off while the server is running - LIVE in order to trace the SQL and/or all JDBC coming out of the application. - - To turn a log on, set the level value to INFO or DEBUG (to see class name and - line number information in the log) The DEBUG setting is much more inefficient - but the output is much more useful. - - To turn off JDBC logging completely, you must set all 5 logs to a level higher - than ERROR (FATAL is suggested.) - --> - - <!-- log SQL (pre-execution) plus exceptions caused by SQL --> - <logger name="jdbc.sqlonly" additivity="false"> - <level value="debug"/> - <appender-ref ref="stdout-appender"/> - </logger> - - <!-- log SQL with timing information, post execution --> - <logger name="jdbc.sqltiming" additivity="false"> - <level value="error"/> - <appender-ref ref="stdout-appender"/> - </logger> - - <!-- only use the two logs below to trace ALL JDBC information, - NOTE: This can be very voluminous! --> - - <!-- log all jdbc calls except ResultSet calls --> - <logger name="jdbc.audit" additivity="false"> - <level value="error"/> - <appender-ref ref="stdout-appender"/> - </logger> - - <!-- log the jdbc ResultSet calls --> - <logger name="jdbc.resultset" additivity="false"> - <level value="error"/> - <appender-ref ref="stdout-appender"/> - </logger> - - <!-- log connection open/close events and dump of all open connection numbers --> - <logger name="jdbc.connection" additivity="false"> - <level value="error"/> - <appender-ref ref="stdout-appender"/> - </logger> - - <!-- this log is for internal debugging of log4jdbc, itself --> - <!-- debug logging for log4jdbc itself --> - <logger name="log4jdbc.debug" additivity="false"> - <level value="error"/> - <appender-ref ref="stdout-appender"/> - </logger> - - <!-- by default, log everything to the console with a level of WARN or higher --> - <root> - <level value="error"/> - <appender-ref ref="stdout-appender"/> - </root> -</log4j:configuration> \ No newline at end of file