git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 14 Sep 2020 08:45:06 +0000 (08:45 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 14 Sep 2020 08:45:06 +0000 (08:45 +0000)
27 files changed:
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/HSMMigrateStepTest.java
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FILEZILLA_PASARESTORETransferToStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/ForkDownloadStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ForkUploadStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataPersisterStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/PeableBeachMissingMaterialCheckerStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TransferFromFTPStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/TransferFromTSMStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TransferToFTPStep.java [new file with mode: 0644]
server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java
server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ConnectionPool.java [deleted file]
server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ConnectionPoolProperties.java [deleted file]
server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ContextPool.java [deleted file]
server/user.jobengine.osgi.commons/src/user/commons/pool/orig/PoolException.java [deleted file]
server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ResourcePool.java [deleted file]
server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java
server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java
server/user.jobengine.osgi.db/src/user/commons/pool/ResourcePool.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/pages/jobselector.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobSelectorModel.java

index 5fa41f5f526a2a8bd57d95b8a4de6da5f79f4b47..2655f7ace4949a4a64feebe928f78f5d362d17a2 100644 (file)
@@ -5,7 +5,6 @@ import static org.junit.Assert.assertNull;
 \r
 import java.nio.file.Files;\r
 import java.nio.file.Paths;\r
-import java.util.LinkedHashSet;\r
 import java.util.List;\r
 \r
 import org.junit.BeforeClass;\r
@@ -30,42 +29,29 @@ public class HSMMigrateStepTest {
 \r
        @Test\r
        public void createMigrateReport() throws Exception {\r
-               LinkedHashSet<Object> success = new LinkedHashSet<>();\r
-               List<String> migrated = Files.readAllLines(Paths.get("/opt/MV-migrate-status/migrated.txt"));\r
+               List<String> migrated = Files.readAllLines(Paths.get("/opt/MV-migrate-status/select_distinct_houseid__from_MEDIAFILE.csv"));\r
                System.out.println("Starting");\r
-               for (String m : migrated) {\r
-                       String name = m.trim();\r
-                       int indexOf = name.indexOf("-");\r
-                       if (indexOf > -1) {\r
-                               name = name.substring(9);\r
-                               if (success.contains(name))\r
-                                       System.out.println("Error " + m.trim());\r
-                               else\r
-                                       success.add(name);\r
-                       }\r
-                       //                      System.out.println(name);\r
-               }\r
+               //Files.write(Paths.get("/opt/MV-migrate-status/migrated-clean.txt"), success);\r
+\r
+               StringBuilder sb = new StringBuilder();\r
 \r
                List<String> tomigrate = Files.readAllLines(Paths.get("/opt/MV-migrate-status/to-migrate.txt"));\r
                int nosuccesscount = 0;\r
                for (String t : tomigrate) {\r
                        String name = t.trim();\r
                        name = name.substring(2);\r
-                       int indexOf = name.indexOf(".");\r
-                       if (indexOf > -1) {\r
-                               indexOf = name.lastIndexOf("/");\r
-                               name = name.substring(indexOf + 1);\r
-                               if (!success.contains(name)) {\r
-                                       System.out.println(name);\r
-                                       nosuccesscount++;\r
-                               }\r
+                       int indexOf = name.lastIndexOf("/");\r
+                       name = name.substring(indexOf + 1);\r
+                       if (!migrated.contains(name)) {\r
+                               sb.append("Missing " + name + "\r\n");\r
+                               nosuccesscount++;\r
                        }\r
                }\r
 \r
+               Files.write(Paths.get("/opt/MV-migrate-status/report.txt"), sb.toString().getBytes());\r
                System.out.println("Success " + migrated.size());\r
                System.out.println("No success " + nosuccesscount);\r
-               System.out.println(100 - (nosuccesscount * 100 / migrated.size()));\r
-\r
+               System.out.println((float) nosuccesscount * 100 / migrated.size() + "% missing");\r
        }\r
 \r
        private HSMMigrateStep createSUT() {\r
index 622fd8dc136a14ccf0b4b6633d29cc9b7ba14cdc..8ac626b5df43f487469b8e9a28ec89f2abc3aa73 100644 (file)
@@ -10,12 +10,15 @@ import java.util.Arrays;
 import java.util.Collection;\r
 import java.util.Collections;\r
 import java.util.Date;\r
+import java.util.HashMap;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.Set;\r
 import java.util.TreeMap;\r
 import java.util.TreeSet;\r
 \r
 import org.apache.commons.io.FilenameUtils;\r
+import org.apache.commons.lang.StringUtils;\r
 import org.junit.Test;\r
 \r
 import user.jobengine.db.Media;\r
@@ -281,4 +284,84 @@ public class SmallTests {
                String mexio = "2020-09-03T17:52:59.098+0200";\r
                System.out.println(mc.compareTo(mexio));\r
        }\r
+\r
+       @Test\r
+       public void test94() throws Exception {\r
+               List<String> uploads = Files.readAllLines(Paths.get("/opt/AMC/upload-errors.csv"));\r
+               //List<String> downloads = Files.readAllLines(Paths.get("/opt/AMC/download-errors.csv"));\r
+\r
+               Map<String, String> ups = new HashMap<>();\r
+\r
+               boolean first = true;\r
+               for (String upload : uploads) {\r
+                       if (first) {\r
+                               first = false;\r
+                               continue;\r
+                       }\r
+                       String[] upfields = upload.split(";");\r
+                       String related = upfields[3];\r
+\r
+                       String content = ups.get(related);\r
+\r
+                       if (upload.contains("FINISHED") && upload.contains("NEXIO"))\r
+                               continue;\r
+\r
+                       if (content == null)\r
+                               content = upload + "\r\n";\r
+                       else\r
+                               content += upload + "\r\n";\r
+\r
+                       ups.put(related, content);\r
+               }\r
+\r
+               System.out.println("Start");\r
+               int countTouched = 0;\r
+               int countMultiTouched = 0;\r
+               for (String related : ups.keySet()) {\r
+                       String content = ups.get(related);\r
+                       int countMatches = StringUtils.countMatches(content, "EXECUTING");\r
+                       if (countMatches == 0)\r
+                               continue;\r
+\r
+                       countMatches = StringUtils.countMatches(content, "NEXIO");\r
+                       if (countMatches == 0)\r
+                               continue;\r
+\r
+                       countMatches = StringUtils.countMatches(content, "MEDIACUBE_UPLOADS ->");\r
+                       if (countMatches == 0)\r
+                               continue;\r
+\r
+                       System.out.println(">>>" + related);\r
+                       countTouched++;\r
+                       System.out.println(content);\r
+                       System.out.println("...");\r
+\r
+                       //                      if (countMatches > 1) {\r
+                       //                              countMultiTouched++;\r
+                       //                      }\r
+\r
+               }\r
+               System.out.println(countTouched);\r
+               //              System.out.println(countMultiTouched);\r
+       }\r
+\r
+       @Test\r
+       public void test95() throws Exception {\r
+               DirectoryStream<Path> directoryStream = null;\r
+\r
+               List<Path> escortFiles = new ArrayList<>();\r
+               directoryStream = Files.newDirectoryStream(Paths.get("/_video"));\r
+               for (Path escortFile : directoryStream) {\r
+                       if (escortFile.toFile().isDirectory())\r
+                               continue;\r
+                       escortFiles.add(escortFile);\r
+               }\r
+               escortFiles.sort((p1, p2) -> {\r
+                       return Long.valueOf(p1.toFile().lastModified()).compareTo(p2.toFile().lastModified());\r
+               });\r
+\r
+               for (Path p : escortFiles) {\r
+                       System.out.println(p.getFileName());\r
+               }\r
+       }\r
 }\r
index dae688609e276f48bb904e0d86563076176e86f5..cf9d035802a85be39ae158b2f79d424f4d93dac2 100644 (file)
@@ -29,8 +29,9 @@ public class CancelableStep extends JobStep {
                //              getJobRuntime().setDescription(String.valueOf(param));\r
 \r
                try {\r
+                       //getJobRuntime().setRelated("xxx");\r
                        //logger.info(new MediaCubeMarker("vasary@elgekko.net", "TESZT"), "Heloka");\r
-                       logger.error(getSessionMarker(), "Heloka");\r
+                       //logger.error(getSessionMarker(), "Heloka");\r
                        for (int i = 0; i < count; i++) {\r
                                if (getJobRuntime().isWaitingCancel())\r
                                        break;\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FILEZILLA_PASARESTORETransferToStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FILEZILLA_PASARESTORETransferToStep.java
new file mode 100644 (file)
index 0000000..d69a6ed
--- /dev/null
@@ -0,0 +1,11 @@
+package user.jobengine.server.steps;\r
+\r
+import user.commons.StoreUri;\r
+\r
+public class FILEZILLA_PASARESTORETransferToStep extends TransferStep {\r
+       @Override\r
+       @StepEntry\r
+       public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
+               return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
+       }\r
+}\r
index 7923ae65fa42b119123a08f221c3c8753eaa3c6f..addb9f752bd8ad07b7ca810164e17a2608bb2ec8 100644 (file)
@@ -9,14 +9,17 @@ import java.util.ArrayList;
 import java.util.HashMap;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.Set;\r
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
 import user.commons.DownloadableMedia;\r
 import user.commons.JobStatus;\r
+import user.commons.MediaCubeMarker;\r
 import user.commons.StoreUri;\r
 import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.Store;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 \r
@@ -25,6 +28,9 @@ public class ForkDownloadStep extends JobStep {
 \r
        @StepEntry\r
        public Object[] execute(String tempStoreName, String template, String expectedColorSpace, int limit) throws Exception {\r
+\r
+               sendStatusReport();\r
+\r
                DirectoryStream<Path> directoryStream = null;\r
                int count = limit;\r
                int allCount = 0;\r
@@ -44,14 +50,8 @@ public class ForkDownloadStep extends JobStep {
                                escortFiles.add(escortFile);\r
                        }\r
                        allCount = escortFiles.size();\r
-                       //Comparison method violates its general contract! miatt try-catch\r
                        escortFiles.sort((p1, p2) -> {\r
-                               int result = 0;\r
-                               try {\r
-                                       result = p1.toFile().lastModified() > p2.toFile().lastModified() ? 1 : -1;\r
-                               } catch (Exception e) {\r
-                               }\r
-                               return result;\r
+                               return Long.valueOf(p1.toFile().lastModified()).compareTo(p2.toFile().lastModified());\r
                        });\r
 \r
                        if (allCount > 0) {\r
@@ -104,9 +104,9 @@ public class ForkDownloadStep extends JobStep {
                if (EscortFiles.isCatchedFileExists(escortFile))\r
                        return false;\r
 \r
-               String fileName = escortFile.getFileName().toString();\r
+               String escortFileName = escortFile.getFileName().toString();\r
                //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON\r
-               long dotCount = fileName.chars().filter(ch -> ch == '.').count();\r
+               long dotCount = escortFileName.chars().filter(ch -> ch == '.').count();\r
                if (dotCount < 3)\r
                        return false;\r
 \r
@@ -117,13 +117,17 @@ public class ForkDownloadStep extends JobStep {
                                return false;\r
                        }\r
 \r
-                       logger.info(getMarker(), "Starting {} for {}", template, fileName);\r
-\r
                        StoreUri sourceStoreUri = getManager().getStoreUri(downloadable.getLong("sourceStoreUriId"));\r
                        StoreUri targetStoreUri = getManager().getStoreUri(downloadable.getLong("targetStoreUriId"));\r
+\r
+                       Store targetStore = getManager().getStore(targetStoreUri.getStoreId());\r
+                       template = targetStore.getName() + "-" + template;\r
+                       logger.info(getMarker(), "Starting {} for {}", template, escortFileName);\r
+\r
+                       String sourceFileName = downloadable.getString("fileName");\r
                        Map<String, Object> parameters = new HashMap<>();\r
                        parameters.put("sourceStoreUri", sourceStoreUri);\r
-                       parameters.put("fileName", downloadable.getString("fileName"));\r
+                       parameters.put("fileName", sourceFileName);\r
                        parameters.put("tempStoreUri", tempStoreUri);\r
                        parameters.put("targetStoreUri", targetStoreUri);\r
                        parameters.put("expectedFrameNumber", downloadable.getLong("frames"));\r
@@ -131,15 +135,21 @@ public class ForkDownloadStep extends JobStep {
                        parameters.put("expectedColorSpace", downloadable.getString("colorSpace"));\r
                        parameters.put("escortFile", escortFile.toAbsolutePath().toString());\r
 \r
-                       //IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
+                       int priority = 50;\r
+\r
+                       //megszakitasok miatt a mar lejott mozikat vegyuk elore 20.09.09\r
+                       if (targetExists(tempStoreUri, sourceFileName))\r
+                               priority = 51;\r
+\r
+                       //parameterek: IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
                        IJobRuntime child = getEngine().submit(null, e -> {\r
                                if (e.getStatus().equals(JobStatus.CANCELED))\r
                                        EscortFiles.removeCatchedFile(escortFile);\r
-                       }, template, "Archiválás", 0, IJobEngine.DEFAULT_OWNER, parameters);\r
+                       }, template, "Archiválás", priority, IJobEngine.DEFAULT_OWNER, parameters);\r
                        if (child == null)\r
                                throw new Exception("Submit error.");\r
 \r
-                       child.setDescription(fileName);\r
+                       child.setDescription(sourceFileName);\r
                        child.setRelated(downloadable.getString("title"));\r
                        EscortFiles.createCatchedFile(escortFile);\r
 \r
@@ -150,4 +160,37 @@ public class ForkDownloadStep extends JobStep {
 \r
                return true;\r
        }\r
+\r
+       private void sendStatusReport() {\r
+               IJobEngine engine = getEngine();\r
+               int jobCount = 0;\r
+               StringBuilder sb = new StringBuilder();\r
+               Map<Long, IJobRuntime> jobs = engine.getJobs();\r
+               if (jobs != null) {\r
+                       Set<Long> keys = jobs.keySet();\r
+                       jobCount = keys.size();\r
+                       for (Long key : keys) {\r
+                               IJobRuntime runtime = jobs.get(key);\r
+                               if (JobStatus.SUSPENDED.equals(runtime.getStatus()))\r
+                                       sb.append(runtime.getRelated() + " SUSPENDED: " + runtime.getDescription() + "</br>");\r
+                       }\r
+               }\r
+               MediaCubeMarker marker = new MediaCubeMarker();\r
+               marker.setSubject("AMC MediaCube feldolgozási sor  " + jobCount);\r
+               logger.info(marker, sb.toString());\r
+       }\r
+\r
+       private boolean targetExists(StoreUri storeUri, String fileName) {\r
+               try {\r
+                       Path targetFile = Paths.get(storeUri.toString(true), fileName);\r
+                       if (targetFile.toFile().exists()) {\r
+                               logger.info(getMarker(), "Retrieved file {} exists", fileName);\r
+                               return true;\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.error(getMarker(), e.getMessage());\r
+               }\r
+               logger.info(getMarker(), "Retrieved file {} not exists yet", fileName);\r
+               return false;\r
+       }\r
 }\r
index c6544ce60ef907d44c5755b20640d99fb0f7b45b..70da7b5e50530fcec73bd0a5a9c42556e05f84ce 100644 (file)
@@ -19,6 +19,7 @@ import user.commons.StoreUri;
 import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.Store;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 \r
@@ -47,8 +48,13 @@ public class ForkUploadStep extends JobStep {
                        }\r
                        allCount = escortFiles.size();\r
                        //a file neve az adasbakerules idopontjaval kezdodik\r
+                       //                      escortFiles.sort((p1, p2) -> {\r
+                       //                              return p1.compareTo(p2);\r
+                       //                      });\r
+\r
+                       //200911 megis inkabb a letrehozas idopontja legyen\r
                        escortFiles.sort((p1, p2) -> {\r
-                               return p1.compareTo(p2);\r
+                               return Long.valueOf(p1.toFile().lastModified()).compareTo(p2.toFile().lastModified());\r
                        });\r
 \r
                        if (allCount > 0) {\r
@@ -114,9 +120,9 @@ public class ForkUploadStep extends JobStep {
                if (EscortFiles.isCatchedFileExists(escortFile))\r
                        return false;\r
 \r
-               String fileName = escortFile.getFileName().toString();\r
+               String escortFileName = escortFile.getFileName().toString();\r
                //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON\r
-               long dotCount = fileName.chars().filter(ch -> ch == '.').count();\r
+               long dotCount = escortFileName.chars().filter(ch -> ch == '.').count();\r
                if (dotCount < 3)\r
                        return false;\r
 \r
@@ -124,20 +130,24 @@ public class ForkUploadStep extends JobStep {
                        DownloadableMedia downloadable = EscortFiles.decode(escortFile);\r
 \r
                        if (downloadable == null) {\r
-                               logger.error(getSessionMarker(), "Can't encode {}", escortFile);\r
+                               logger.error(getSessionMarker(), "Can't decode {}", escortFile);\r
                                return false;\r
                        }\r
-                       logger.info(getMarker(), "Starting {} for {}", template, fileName);\r
 \r
                        StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
                        StoreUri targetStoreUri = getManager().getStoreUri(downloadable.getLong("targetStoreUriId"));\r
 \r
+                       Store targetStore = getManager().getStore(targetStoreUri.getStoreId());\r
+                       template = targetStore.getName() + "-" + template;\r
+                       logger.info(getMarker(), "Starting {} for {}", template, escortFileName);\r
+\r
                        String tsmFileName = getTSMFileName(downloadable.getLong("mediaId"), sourceStoreUri);\r
+                       String targetFileName = downloadable.getString("fileName");\r
 \r
                        Map<String, Object> parameters = new HashMap<>();\r
                        parameters.put("sourceStoreUri", sourceStoreUri);\r
                        parameters.put("tsmFileName", tsmFileName);\r
-                       parameters.put("fileName", downloadable.getString("fileName"));\r
+                       parameters.put("fileName", targetFileName);\r
                        parameters.put("tempStoreUri", tempStoreUri);\r
                        parameters.put("targetStoreUri", targetStoreUri);\r
                        parameters.put("expectedFrameNumber", downloadable.getLong("frames"));\r
@@ -145,8 +155,17 @@ public class ForkUploadStep extends JobStep {
                        parameters.put("expectedColorSpace", downloadable.getString("colorSpace"));\r
                        parameters.put("escortFile", escortFile.toAbsolutePath().toString());\r
 \r
-                       int priority = downloadable.containsKey("priority") ? downloadable.getInt("priority") : 0;\r
-                       //IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
+                       //int priority = downloadable.containsKey("priority") ? downloadable.getInt("priority") : 0;\r
+                       //mindenki egyforman induljon 20.09.07\r
+                       //a NEXIO egy kicsit fontosabb 20.09.08. megsem 20.09.09\r
+                       //int priority = escortFile.toString().contains("NEXIO") ? 51 : 50;\r
+                       //megszakitasok miatt a mar lejott mozikat vegyuk elore 20.09.09\r
+\r
+                       int priority = 50;\r
+                       if (targetExists(tempStoreUri, targetFileName))\r
+                               priority = 51;\r
+\r
+                       //parameterek: IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
                        IJobRuntime child = getEngine().submit(null, e -> {\r
                                if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
                                        EscortFiles.removeCatchedFile(escortFile);\r
@@ -154,7 +173,7 @@ public class ForkUploadStep extends JobStep {
                        if (child == null)\r
                                throw new Exception("Submit error.");\r
 \r
-                       child.setDescription(fileName);\r
+                       child.setDescription(escortFileName);\r
 \r
                        child.setRelated(downloadable.getString("title"));\r
                        EscortFiles.createCatchedFile(escortFile);\r
@@ -165,4 +184,18 @@ public class ForkUploadStep extends JobStep {
 \r
                return true;\r
        }\r
+\r
+       private boolean targetExists(StoreUri storeUri, String fileName) {\r
+               try {\r
+                       Path targetFile = Paths.get(storeUri.toString(true), fileName);\r
+                       if (targetFile.toFile().exists()) {\r
+                               logger.info(getMarker(), "Retrieved file {} exists", fileName);\r
+                               return true;\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.error(getMarker(), e.getMessage());\r
+               }\r
+               logger.info(getMarker(), "Retrieved file {} not exists yet", fileName);\r
+               return false;\r
+       }\r
 }\r
index c8cb85f26c6f70328fdc2156811cd94fec65f115..007ad6c000d12130e03137b77f3a25369568a9f8 100644 (file)
@@ -36,6 +36,10 @@ public class MetadataPersisterStep extends JobStep {
 \r
                                IItemManager manager = getManager();\r
 \r
+                               if (mediaId == 0) {\r
+                                       mediaId = tryGetMediaId(title, mediaId);\r
+                               }\r
+\r
                                //TODO ha van mediaId, akkor update!!!!!!!!!\r
 \r
                                if (mediaId == 0) {\r
@@ -59,6 +63,8 @@ public class MetadataPersisterStep extends JobStep {
                                        media.add();\r
                                        mediaFile.setMediaId(media.getId());\r
                                        mediaFile.setLastModified(modified);\r
+                                       //TODO\r
+                                       //mediaFile.setFileSize(fileSize);\r
                                        mediaFile.add();\r
                                } else {\r
                                        Media media = manager.getMedia(mediaId);\r
@@ -68,6 +74,8 @@ public class MetadataPersisterStep extends JobStep {
                                        media.setCreated(created);\r
                                        manager.modify(media);\r
                                        MediaFile mediaFile = manager.getSystemMediaFile(media);\r
+                                       //TODO\r
+                                       //mediaFile.setFileSize(fileSize);\r
                                        mediaFile.setLastModified(modified);\r
                                        manager.modify(mediaFile);\r
                                }\r
@@ -81,4 +89,17 @@ public class MetadataPersisterStep extends JobStep {
                return null;\r
        }\r
 \r
+       private long tryGetMediaId(String title, long mediaId) {\r
+               Media media = null;\r
+               //duplikatum miatt\r
+               try {\r
+                       media = getManager().getMedia(title);\r
+                       if (media != null)\r
+                               mediaId = media.getId();\r
+               } catch (Exception e) {\r
+                       logger.error(getMarker(), "Media with title {} is not available. System message is: {}", title, e.getMessage());\r
+               }\r
+               return mediaId;\r
+       }\r
+\r
 }\r
index 1c64232f9dc1774ffd3bf21a34084763214cf3bc..a99e9abbdba8c5e42e0e6f5c5ee4408463f52d72 100644 (file)
@@ -50,13 +50,22 @@ public class PeableBeachMissingMaterialCheckerStep extends JobStep {
                                        return null;\r
                                }\r
                                String lookupStoreName = String.valueOf(lookup);\r
+\r
                                StoreUri lookupStoreUri = getManager().getStoreUri(lookupStoreName, RemoteStoreProtocol.LOCAL);\r
-                               List<String> lookupContent = getPoolContent(lookupStoreUri);\r
+                               logger.info(getMarker(), "Checking pool {}", lookupStoreName);\r
+                               List<String> lookupContent = getPoolContent(lookupStoreName, lookupStoreUri);\r
                                poolContent.addAll(lookupContent);\r
                                processed++;\r
                                progress = processed * 50 / count;\r
                                setProgress(progress);\r
                        }\r
+                       /*\r
+                                               if (1 == 1) {\r
+\r
+                                                       logger.info(getMarker(), "Kikapcsolva");\r
+                                                       return null;\r
+                                               }\r
+                       */\r
 \r
                        PBQuery query = new PBQuery();\r
                        query.init(primaryEndPoint, primaryUserName, primaryPassword, secondaryEndPoint, secondaryUserName, secondaryPassword, rangeForwardHours);\r
@@ -65,6 +74,11 @@ public class PeableBeachMissingMaterialCheckerStep extends JobStep {
 \r
                        if (medias != null && medias.size() > 0) {\r
                                count = medias.size();\r
+\r
+                               for (MMMedia media : medias) {\r
+                                       logger.info(getMarker(), "API response contains {}", media.getName());\r
+                               }\r
+\r
                                for (MMMedia media : medias) {\r
                                        if (getJobRuntime().isWaitingCancel()) {\r
                                                cancel();\r
@@ -89,16 +103,26 @@ public class PeableBeachMissingMaterialCheckerStep extends JobStep {
                return null;\r
        }\r
 \r
-       private List<String> getPoolContent(StoreUri targetStoreUri) throws Exception {\r
+       private List<String> getPoolContent(String storeName, StoreUri targetStoreUri) throws Exception {\r
                List<String> poolContent = new ArrayList<>();\r
                List<RemoteFile> remoteFiles = targetStoreUri.getRemoteFiles();\r
-               if (remoteFiles != null)\r
-                       remoteFiles.forEach(i -> {\r
-                               String name = i.getName();\r
-                               poolContent.add(name.substring(0, name.lastIndexOf(".")));\r
-                       });\r
+               if (remoteFiles != null) {\r
+                       for (RemoteFile rf : remoteFiles) {\r
+                               try {\r
+                                       String name = rf.getName();\r
+                                       int pos = name.lastIndexOf(".");\r
+                                       if (pos > -1) {\r
+                                               name = name.substring(0, pos);\r
+                                               //logger.info(getMarker(), "Adding {}", name);\r
+                                               poolContent.add(name);\r
+                                       }\r
+                               } catch (Exception e) {\r
+                                       logger.error(e.getMessage());\r
+                               }\r
 \r
-               logger.info(getMarker(), "Pool contains {} items", poolContent == null ? 0 : poolContent.size());\r
+                       }\r
+               }\r
+               logger.info(getMarker(), "Pool {} contains {} items", storeName, poolContent == null ? 0 : poolContent.size());\r
                return poolContent;\r
        }\r
 \r
@@ -115,7 +139,15 @@ public class PeableBeachMissingMaterialCheckerStep extends JobStep {
 \r
        private void processRecord(MMMedia mmedia, StoreUri sourceStoreUri, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) {\r
                //TODO kisbetu/nagybetu problema kezelese\r
-               Media media = getManager().getMedia(mmedia.getName());\r
+\r
+               Media media = null;\r
+               //duplikatum miatt\r
+               try {\r
+                       media = getManager().getMedia(mmedia.getName());\r
+               } catch (Exception e) {\r
+                       logger.error(getMarker(), "Can't identify missing material {}. System message is: {}", mmedia.getName(), e.getMessage());\r
+                       return;\r
+               }\r
 \r
                String fileName = normalizeName(mmedia.getName());\r
 \r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferFromFTPStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferFromFTPStep.java
new file mode 100644 (file)
index 0000000..3142133
--- /dev/null
@@ -0,0 +1,11 @@
+package user.jobengine.server.steps;\r
+\r
+import user.commons.StoreUri;\r
+\r
+public class TransferFromFTPStep extends TransferStep {\r
+       @Override\r
+       @StepEntry\r
+       public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
+               return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
+       }\r
+}\r
index 3521d3f6eed32a44096fbe927474e27d19577d2a..8eb982d21e392ae3a0cb7686ec8fb3912ef0370c 100644 (file)
@@ -1,17 +1,31 @@
 package user.jobengine.server.steps;\r
 \r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
 import user.commons.StoreUri;\r
 \r
 public class TransferFromTSMStep extends TransferStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
        @Override\r
        @StepEntry\r
        public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
-               return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
-       }\r
-\r
-       @Override\r
-       protected String getTmpExtension() {\r
-               return null;\r
+               Object[] result = null;\r
+               try {\r
+                       Path targetFile = Paths.get(targetStoreUri.toString(true), targetFileName);\r
+                       if (targetFile.toFile().exists()) {\r
+                               logger.info(getMarker(), "Using previously retrived file {}", targetFile);\r
+                       } else {\r
+                               result = super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.error(getMarker(), e.getMessage());\r
+               }\r
+               return result;\r
        }\r
 \r
 }\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferToFTPStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferToFTPStep.java
new file mode 100644 (file)
index 0000000..b42d5d5
--- /dev/null
@@ -0,0 +1,11 @@
+package user.jobengine.server.steps;\r
+\r
+import user.commons.StoreUri;\r
+\r
+public class TransferToFTPStep extends TransferStep {\r
+       @Override\r
+       @StepEntry\r
+       public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
+               return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
+       }\r
+}\r
index 1947f94c232310465aed3dd73e45e76b95d2663a..e7c0f8ad3bfd526a7f08253912b833f9eaeceea1 100644 (file)
@@ -157,7 +157,8 @@ public class StoreUri extends EntityBase implements Serializable {
                                if (outputLister != null)
                                        outputLister.cleanUp();
                        } catch (Exception e) {
-                               logger.error("Additional error!", e);
+                               logger.error("Error closing copy: {}", targetName);
+                               throw e;
                        }
                }
                result.setSize(uploadedBytes);
diff --git a/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ConnectionPool.java b/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ConnectionPool.java
deleted file mode 100644 (file)
index bcae09f..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-package user.commons.pool.orig;\r
-\r
-import java.sql.Connection;\r
-import java.sql.DriverManager;\r
-import java.sql.SQLException;\r
-\r
-\r
-/**\r
- * <b>Adatbázis kapcsolat erõforrás kezelõ.</b>\r
- * \r
- */\r
-public class ConnectionPool extends ResourcePool {\r
-       public ConnectionPool(ConnectionPoolProperties properties) {\r
-               super(properties);\r
-       }\r
-       \r
-       public Connection borrowObject() {\r
-               return (Connection) super.borrowObject();  \r
-       }\r
-\r
-       protected boolean checkObject(Object resourceObject) {\r
-               Connection connection = (Connection) resourceObject;\r
-               boolean closed = false; \r
-               try {\r
-                       closed = connection.isClosed();\r
-               } catch (SQLException e) {\r
-               }\r
-               return closed; \r
-       }\r
-\r
-       protected Connection createObject() {\r
-               ConnectionPoolProperties cpp = (ConnectionPoolProperties) this.getProperties();\r
-               Connection connection = null;\r
-               try {\r
-                       Class.forName(cpp.getDriverName());\r
-                       DriverManager.setLoginTimeout(cpp.getTimeout());\r
-                       connection = DriverManager.getConnection(cpp.getUrl(), cpp.getUserName(), cpp.getPassword());\r
-                       connection.setAutoCommit(cpp.getAutoCommit());\r
-               } catch (Exception e) {\r
-                       throw new PoolException(e.getMessage());\r
-               }\r
-               return connection;\r
-       }\r
-\r
-       protected void releaseObject(Object resourceObject) {\r
-               validateObject(resourceObject);\r
-               Connection connection = (Connection) resourceObject;\r
-               try {\r
-                       if (connection == null)\r
-                               return;\r
-                       if (connection.isClosed() == false) {\r
-                               connection.close();\r
-                       }\r
-                       connection = null;\r
-               } catch (Exception e) {\r
-                       throw new PoolException(e.getMessage());\r
-               }\r
-       }\r
-       \r
-       public void lendObject(Connection connection) {\r
-               super.lendObject(connection);  \r
-       }\r
-\r
-       protected void validateObject(Object resourceObject) {\r
-               super.validateObject(resourceObject);\r
-               if (!(resourceObject instanceof Connection)) {\r
-                       throw new IllegalArgumentException("Only Connection class is acceptable.");\r
-               }\r
-       }\r
-}\r
diff --git a/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ConnectionPoolProperties.java b/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ConnectionPoolProperties.java
deleted file mode 100644 (file)
index 94b4f75..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-package user.commons.pool.orig;\r
-\r
-import user.commons.CommonsProperties;\r
-\r
-public class ConnectionPoolProperties extends CommonsProperties {\r
-       static public final String AUTOCOMMIT = "AutoCommit"; \r
-       static public final String DRIVERNAME = "DriverName"; \r
-       static public final String PASSWORD = "Password"; \r
-       static public final String TIMEOUT = "Timeout"; \r
-       static public final String URL = "ConnectionUrl"; \r
-       static public final String USERNAME = "UserName"; \r
-\r
-       public ConnectionPoolProperties(String driver, String url, String userName, String password, boolean autoCommit, int timeout) {\r
-               CommonsProperties.checkParameter(DRIVERNAME, driver);\r
-               CommonsProperties.checkParameter(URL, url);\r
-               CommonsProperties.checkParameter(USERNAME, userName);\r
-               CommonsProperties.checkParameter(PASSWORD, password);\r
-               CommonsProperties.checkParameter(AUTOCOMMIT, autoCommit);\r
-               CommonsProperties.checkParameter(TIMEOUT, timeout);\r
-               super.add(DRIVERNAME, driver);\r
-               super.add(URL, url);\r
-               super.add(USERNAME, userName);\r
-               super.add(PASSWORD, password);\r
-               super.add(AUTOCOMMIT, autoCommit);\r
-               super.add(TIMEOUT, timeout);\r
-       }\r
-       \r
-       public boolean getAutoCommit(){\r
-               return getBool(AUTOCOMMIT);\r
-       }\r
-       \r
-       public String getDriverName(){\r
-               return getString(DRIVERNAME);\r
-       }\r
-       \r
-       public String getPassword(){\r
-               return getString(PASSWORD);\r
-       }\r
-       \r
-       public int getTimeout() {\r
-               return getInt(TIMEOUT);\r
-       }\r
-\r
-       public String getUrl(){\r
-               return getString(URL);\r
-       }\r
-\r
-       public String getUserName(){\r
-               return getString(USERNAME);\r
-       }\r
-}\r
diff --git a/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ContextPool.java b/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ContextPool.java
deleted file mode 100644 (file)
index 5deca66..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-package user.commons.pool.orig;\r
-\r
-\r
-/*\r
-import java.lang.reflect.InvocationTargetException;\r
-import java.sql.Connection;\r
-import java.sql.DriverManager;\r
-import java.sql.SQLException;\r
-\r
-import sqlj.runtime.ref.DefaultContext;\r
-*/\r
-/**\r
- * <b>Adatbázis kontextus erõforrás kezelõ.</b>\r
- * \r
- */\r
-public class ContextPool extends ResourcePool {\r
-       public ContextPool(ConnectionPoolProperties properties) {\r
-               super(properties);\r
-       }\r
-/*     \r
-       public DefaultContext borrowObject() {\r
-               DefaultContext context = (DefaultContext) super.borrowObject();\r
-               DefaultContext.setDefaultContext(context);\r
-               return context;\r
-       }\r
-\r
-       protected boolean checkObject(Object resourceObject) {\r
-               DefaultContext context = (DefaultContext) resourceObject;\r
-               return context.isClosed(); \r
-       }\r
-\r
-       protected DefaultContext createObject() {\r
-               ConnectionPoolProperties cpp = (ConnectionPoolProperties) this.getProperties();\r
-               Connection connection = null;\r
-               DefaultContext context = null;\r
-               try {\r
-                       Class.forName(cpp.getDriverName());\r
-               } catch (ClassNotFoundException e) {\r
-                       throw new PoolException(e.getMessage());\r
-               }\r
-               \r
-               try {\r
-                       DriverManager.setLoginTimeout(cpp.getTimeout());\r
-                       connection = DriverManager.getConnection(cpp.getUrl(), cpp.getUserName(), cpp.getPassword());\r
-                       connection.setAutoCommit(cpp.getAutoCommit());\r
-                       context = new DefaultContext(connection);\r
-               } catch (SQLException e) {\r
-                       throw new PoolException(e.getMessage());\r
-               } catch (RuntimeException e) {\r
-                       Throwable cause = e.getCause();\r
-                       if(cause instanceof InvocationTargetException) {\r
-                               Throwable targetException = ((InvocationTargetException)cause).getTargetException();\r
-                               targetException.printStackTrace();\r
-                       }\r
-               }\r
-               return context;\r
-       }\r
-\r
-       protected void releaseObject(Object value) {\r
-               validateObject(value);\r
-               DefaultContext context = (DefaultContext) value;\r
-               try {\r
-                       if (context == null)\r
-                               return;\r
-                       if (context.isClosed() == false) {\r
-                               context.close();\r
-                       }\r
-                       context = null;\r
-               } catch (Exception e) {\r
-                       throw new PoolException(e.getMessage());\r
-               }\r
-       }\r
-       \r
-       public void lendObject(DefaultContext context) {\r
-               super.lendObject(context);  \r
-       }\r
-\r
-       protected void validateObject(Object resourceObject) {\r
-               super.validateObject(resourceObject);\r
-               if (!(resourceObject instanceof DefaultContext)) {\r
-                       throw new IllegalArgumentException("Only DefaultContext class is acceptable.");\r
-               }\r
-       }\r
-*/\r
-\r
-       @Override\r
-       protected boolean checkObject(Object resourceObject) {\r
-               // TODO Auto-generated method stub\r
-               return false;\r
-       }\r
-\r
-       @Override\r
-       protected Object createObject() {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
-       }\r
-\r
-       @Override\r
-       protected void releaseObject(Object resourceObject) {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
-}\r
diff --git a/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/PoolException.java b/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/PoolException.java
deleted file mode 100644 (file)
index ed59f50..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-package user.commons.pool.orig;\r
-\r
-/**\r
- * Pool kivétel. \r
- */\r
-public class PoolException extends RuntimeException {\r
-       private static final long serialVersionUID = 874798532700307318L;\r
-\r
-       public PoolException(String message) {\r
-               super(message);\r
-       }\r
-}\r
diff --git a/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ResourcePool.java b/server/user.jobengine.osgi.commons/src/user/commons/pool/orig/ResourcePool.java
deleted file mode 100644 (file)
index fbd845c..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-package user.commons.pool.orig;\r
-\r
-import java.util.LinkedList;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-import user.commons.CommonsProperties;\r
-\r
-/**\r
- * <b>Er�forr�s kezel�.</b>\r
- * <br>\r
- * Az implement�ci�ban meghat�rozott t�pus� er�forr�s objektumb�l \r
- * ig�ny szerint l�trehoz annyit, amennyi enged�lyezett.\r
- * <br>\r
- * Az er�forr�s objektumok k�lcs�n�zhet�ek, visszaadhat�ak \r
- * thread-safe m�don. \r
- * <br>\r
- * Mind�g a legr�gebben haszn�lt objektumot k�lcs�nzi ki.\r
- * <br>\r
- * Ha elfogy a k�lcs�n�zhet� objektum, v�rakoztat.\r
- */\r
-\r
-abstract public class ResourcePool {\r
-       private static final Logger logger = LogManager.getLogger();\r
-       static public final String POOLSIZE = "PoolSize";\r
-       protected LinkedList<Object> pool = null;\r
-       private CommonsProperties properties = null;\r
-       private int resourceCounter = 0;\r
-\r
-       /**\r
-        * Konstruktor a pool l�trehoz�s�ra.\r
-        * @param properties\r
-        * Be�ll�t�sok.\r
-        */\r
-       protected ResourcePool(CommonsProperties properties) {\r
-               if (properties == null)\r
-                       throw new NullPointerException("Pool property map cannot be null.");\r
-               this.properties = properties;\r
-               resourceCounter = this.properties.getInt(POOLSIZE);\r
-       }\r
-\r
-       /**\r
-        * Er�forr�s objektum k�lcs�nz�se.\r
-        * @return\r
-        * Kik�lcs�nz�tt er�forr�s objektum. \r
-        * Visszet�r�s el�tt a checkObject-el ellen�rzi, hogy haszn�lhat� e az objektum.\r
-        * Ha nem �jat, hoz l�tre. \r
-        */\r
-       protected Object borrowObject() {\r
-               if (pool == null)\r
-                       pool = new LinkedList<Object>();\r
-\r
-               Object resourceObject = null;\r
-\r
-               for (;;) {\r
-                       synchronized (this) {\r
-                               resourceObject = pool.poll();\r
-                       }\r
-                       if (resourceObject != null)\r
-                               break;\r
-                       if (resourceCounter > 0) {\r
-                               synchronized (this) {\r
-                                       resourceObject = createObject();\r
-                                       resourceCounter--;\r
-                               }\r
-                               break;\r
-                       }\r
-\r
-                       System.out.println("Waiting for resource.");\r
-                       try {\r
-                               Thread.sleep(1000);\r
-                       } catch (InterruptedException e) {\r
-                       }\r
-               }\r
-\r
-               if (resourceObject != null && checkObject(resourceObject) == true) {\r
-                       synchronized (this) {\r
-                               System.out.println("Resource not passed the check. Recreating.");\r
-                               if (pool.contains(resourceObject))\r
-                                       pool.remove(resourceObject);\r
-                               resourceObject = createObject();\r
-                       }\r
-               }\r
-               logger.trace(String.format("Borrow, pool size: %1$d, counter: %2$d", pool.size(), resourceCounter));\r
-               return resourceObject;\r
-       }\r
-\r
-       /**\r
-        * Ellen�rzi, hogy haszn�lhat� e az objektum.\r
-        * Implement�ci� f�gg�!\r
-        * @param resourceObject\r
-        * Ellen�rizend� objektum.\r
-        * @return\r
-        * <b>true</b> ha m�r nem haszn�lhat� \r
-        */\r
-       abstract protected boolean checkObject(Object resourceObject);\r
-\r
-       /**\r
-        * Az �sszes nem kik�lcs�nz�tt er�forr�s objektumot, \r
-        * a releaseObject h�v�ssal felszabad�tja.  \r
-        */\r
-       public void close() {\r
-               if (pool == null)\r
-                       return;\r
-               Object resourceObject = null;\r
-               synchronized (this) {\r
-                       while ((resourceObject = pool.poll()) != null) {\r
-                               releaseObject(resourceObject);\r
-                       }\r
-               }\r
-               pool = null;\r
-       }\r
-\r
-       /**\r
-        * L�trehozza az er�forr�s objektumot.\r
-        * Implement�ci� f�gg�!\r
-        * @return\r
-        * A l�trehozott er�forr�s objektum. \r
-        */\r
-       abstract protected Object createObject();\r
-\r
-       /**\r
-        * Param�terek lek�rdez�se. \r
-        * @return\r
-        * CommonsProperties t�pus� param�ter objektum.\r
-        */\r
-       protected CommonsProperties getProperties() {\r
-               return properties;\r
-       }\r
-\r
-       /**\r
-        * K�lcs�nvett er�forr�s objektum visszaszolg�ltat�sa.\r
-        * T�pus �s null pointer elle�rz�s a validateObject seg�ts�g�vel.\r
-        * @param value\r
-        * Er�forr�s objektum.\r
-        */\r
-       protected void lendObject(Object value) {\r
-               if (pool == null) {\r
-                       throw new IllegalStateException("Pool never initialized, or closed. Did you missed something?");\r
-               }\r
-               validateObject(value);\r
-               synchronized (this) {\r
-                       pool.add(value);\r
-               }\r
-               logger.trace(String.format("Lend, pool size: %1$d, counter: %2$d", pool.size(), resourceCounter));\r
-       }\r
-\r
-       /**\r
-        * Er�forr�s objektum felszabad�t�sa (kapcsolat lez�r�s, \r
-        * haszn�lt er�forr�sok felszabad�t�sa).\r
-        * Implement�ci� f�gg�!\r
-        * @param resourceObject\r
-        * A sz�ban forg� objektum.\r
-        */\r
-       abstract protected void releaseObject(Object resourceObject);\r
-\r
-       /**\r
-        * Ellen�rzi, hogy az objektum t�pusa megfelel� e. \r
-        */\r
-       protected void validateObject(Object value) {\r
-               if (value == null) {\r
-                       throw new NullPointerException("Object is null.");\r
-               }\r
-       }\r
-}\r
index d2408657b314bcd3d88b9c7e47147387519b355e..57eea5dcd448a2909ec052b1f8a01b87ef181fd7 100644 (file)
@@ -64,7 +64,6 @@ public class FtpDirectoryLister implements IDirectoryLister {
                        }\r
                        try {\r
                                ftpClient.logout();\r
-                               ftpClient.quit();\r
                                ftpClient.disconnect();\r
                                ftpClient = null;\r
                        } catch (Exception e) {\r
index ab9e44fea51475b245ffc74509fdd00815e4e12c..64504ee02fa6a09b28997d4a5d2a31ad7746d03f 100644 (file)
@@ -4,6 +4,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;\r
 import java.sql.DriverManager;\r
 import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
 import java.sql.Statement;\r
 import java.util.Properties;\r
 \r
@@ -35,14 +36,27 @@ public class ContextPool extends ResourcePool {
                DefaultContext context = (DefaultContext) resourceObject;\r
                boolean result = false;\r
                String sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1";\r
-               try (Statement stmt = context.getConnection().createStatement()) {\r
-                       try (ResultSet resultSet = stmt.executeQuery(sql)) {\r
-                               result = true;\r
-                       } catch (Exception e2) {\r
-                               throw e2;\r
-                       }\r
+               Statement stmt = null;\r
+               ResultSet rs = null;\r
+               try {\r
+                       stmt = context.getConnection().createStatement();\r
+                       rs = stmt.executeQuery(sql);\r
+                       result = true;\r
                } catch (Exception e1) {\r
                        logger.catching(e1);\r
+                       if (rs != null)\r
+                               try {\r
+                                       rs.close();\r
+                               } catch (SQLException e) {\r
+                                       logger.catching(e);\r
+                               }\r
+                       if (stmt != null)\r
+                               try {\r
+                                       stmt.close();\r
+                               } catch (SQLException e) {\r
+                                       logger.catching(e);\r
+                               }\r
+\r
                }\r
                return result;\r
        }\r
@@ -91,13 +105,10 @@ public class ContextPool extends ResourcePool {
                try {\r
                        if (context == null)\r
                                return;\r
-\r
-                       if (context.isClosed() == false) {\r
-                               context.close();\r
-                       }\r
-                       context = null;\r
+                       context.close();\r
                } catch (Exception e) {\r
-                       throw new PoolException(e.getMessage());\r
+                       logger.catching(e);\r
+                       //throw new PoolException(e.getMessage());\r
                }\r
        }\r
 \r
index dec0e4917c0bcd601018252a280e555ef6dcdf81..24e686d1ad1774fe5cfe89325afc1e8ec5dc572c 100644 (file)
@@ -68,9 +68,10 @@ abstract public class ResourcePool {
                        }\r
                }\r
 \r
-               if (resourceObject != null && checkObject(resourceObject) == true) {\r
+               if (resourceObject != null && !checkObject(resourceObject)) {\r
+                       logger.debug("Resource not passed the check. Recreating.");\r
+                       releaseObject(resourceObject);\r
                        synchronized (this) {\r
-                               logger.debug("Resource not passed the check. Recreating.");\r
                                if (pool.contains(resourceObject))\r
                                        pool.remove(resourceObject);\r
                                resourceObject = createObject();\r
index 709444e1c85929e2769e146892d5331e4399a1b2..26464c20e08d37becef15299eb35f6523016d86c 100644 (file)
@@ -72,7 +72,7 @@ public class ItemManager extends MemoryCache implements IItemManager {
 \r
        private Map<Class<? extends IEntityBase>, IEntityBaseDAO> baseDAOs = new Hashtable<Class<? extends IEntityBase>, IEntityBaseDAO>();\r
        private IChangeHandler itemTypeChangeFactory;\r
-       private int connectionPoolSize = 5;\r
+       private int connectionPoolSize = 10;\r
 \r
        private ContextPool contextPool = null;\r
        String dbDriver = "com.ibm.db2.jcc.DB2Driver";\r
@@ -84,6 +84,7 @@ public class ItemManager extends MemoryCache implements IItemManager {
        private SignalServer signalServer;\r
        private boolean useLucene;\r
        private IMediaFinder finder;\r
+       private Connection connection;\r
 \r
        public ItemManager() {\r
                initializeItemManager(signalServer);\r
@@ -124,7 +125,7 @@ public class ItemManager extends MemoryCache implements IItemManager {
        @Override\r
        public void connect() {\r
                traceIn();\r
-               ConnectionPoolProperties properties = new ConnectionPoolProperties(dbDriver, dbUrl, dbUser, dbPassword, false, 1000);\r
+               ConnectionPoolProperties properties = new ConnectionPoolProperties(dbDriver, dbUrl, dbUser, dbPassword, false, 2000);\r
                properties.add(ResourcePool.POOLSIZE, connectionPoolSize);\r
                contextPool = new ContextPool(properties);\r
 \r
@@ -522,12 +523,13 @@ public class ItemManager extends MemoryCache implements IItemManager {
        @Override\r
        public void executeQuery(String query, IResultSetConsumer consumer, IStatementDecorator decorator) {\r
                DefaultContext context = getDbContext();\r
-               Connection connection = context.getConnection();\r
                try {\r
+                       connection = context.getConnection();\r
                        executeQuery(connection, query, consumer, decorator);\r
                } catch (Exception e) {\r
                } finally {\r
-                       putDbContext(context);\r
+                       if (context != null)\r
+                               putDbContext(context);\r
                }\r
        }\r
 \r
@@ -560,8 +562,9 @@ public class ItemManager extends MemoryCache implements IItemManager {
        @Override\r
        public void executeUpdate(String query, IStatementDecorator decorator) {\r
                DefaultContext context = getDbContext();\r
-               Connection connection = context.getConnection();\r
+               Connection connection = null;\r
                try {\r
+                       connection = context.getConnection();\r
                        executeUpdate(connection, query, decorator);\r
                } catch (Exception e) {\r
                } finally {\r
index 0f1b6aa61caca65532f5d27664923160f8728b4d..a8ed2672e43aa2b17b2369959079e8c1613ded01 100644 (file)
@@ -1,15 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>\r
 <?init class="user.jobengine.zk.util.AdminAuthInitiator"?>\r
-<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute">\r
+<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute" xmlns:x="xhtml">\r
        <style>\r
                .z-progressmeter { height: 16px; border: 1px solid #cfcfcf; background: #fff 0 0 repeat-x; text-align: left; overflow: hidden; // background-image:\r
                url(/zkau/web/1bf94a1d/zul/img/misc/prgmeter-anim.gif); }\r
        </style>\r
+       \r
        <!-- csak igy jo a list sebessege -->\r
        <custom-attributes org.zkoss.zul.listbox.rod="true" />\r
        <custom-attributes org.zkoss.zul.listbox.initRodSize="50" />\r
        <custom-attributes org.zkoss.zul.listbox.preloadSize="50" />\r
+       <custom-attributes org.zkoss.zul.listbox.selectOnHighlight.disabled="true" />\r
 \r
        <div id="scdiv" width="100%" height="100%" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobListModel')">\r
                <timer id="timer" delay="500" repeats="true" onTimer="@command('uiTick')" />\r
@@ -31,6 +33,7 @@
                        <toolbarbutton label="Takarítás" iconSclass="z-icon-eraser" onClick="@command('cleanupSuspended')" autodisable="self"/>\r
                        <separator orient="vertical"/>\r
                        <textbox value="@bind(jlm.searchText)" onOK="@command('searchRelated')" onCancel="@command('resetSearchRelated')"/>\r
+                       <!--<combobox selectedItem="@bind(jlm.searchStatus)" model="@load(jlm.searchStatuses)" readonly="true"/>-->\r
                        <toolbarbutton label="NEXIO szinkronizálás" iconSclass="z-icon-renren" onClick="@command('restartNexio')" visible="${not sessionScope.nexioDisable}" autodisable="self"/>\r
                </toolbar>\r
 \r
                <div height="100%" width="100%">\r
                        <groupbox height="94%" closable="false">\r
                                <caption sclass="boldfont" label="Aktív folyamatok" />\r
-                               <!--                            <borderlayout> -->\r
-                               <!--                                    <center> -->\r
-                               <listbox id="lbJobList" sizedByContent="false" span="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" mold="paging" autopaging="true"\r
+                               <listbox id="lbJobList" sizedByContent="false" span="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" autopaging="true" mold="paging"\r
                                        vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style"\r
                                        emptyMessage="Nincs futó folyamat" onSelect="@command('onSelect')" >\r
                                        <listhead sizable="true">\r
-                                               <listheader label="Id" hflex="min" align="left" sort="auto" />\r
-                                               <listheader label="ParentId" hflex="min" align="left" sort="auto" />\r
-                                               <listheader label="Indítás" hflex="min" align="left" sort="auto" />\r
-                                               <listheader label="Kész" hflex="min" align="left" sort="auto" />\r
-                                               <listheader label="Név" hflex="min" align="left" sort="auto" />\r
-                                               <listheader label="Prioritás" hflex="min" align="left" sort="auto" />\r
-                                               <listheader label="Anyag" width="120px" align="left" sort="auto" />\r
-                                               <listheader label="Állapot" width="120px" align="left" sort="auto" />\r
-                                               <listheader label="Készültség" width="100px" align="left" sort="auto" />\r
-                                               <listheader label="Üzenet" hflex="max" align="left" sort="auto" />\r
+                                               <listheader label="Id" hflex="min" align="left" sort="auto(id)" />\r
+                                               <listheader label="ParentId" hflex="min" align="left" sort="auto(parentJobId)" />\r
+                                               <listheader label="Indítás" hflex="min" align="left" sort="auto(submitted)" />\r
+                                               <listheader label="Kész" hflex="min" align="left" sort="auto(finnished)" />\r
+                                               <listheader label="Név" width="140px" align="left" sort="auto(name)" />\r
+                                               <listheader label="Prioritás" hflex="min" align="left" sort="auto(priority)" />\r
+                                               <listheader label="Anyag" width="140px" align="left" sort="auto(related)" />\r
+                                               <listheader label="Állapot" width="120px" align="left" sort="auto(status)" />\r
+                                               <listheader label="Készültség" width="100px" align="left" sort="auto(progress)" />\r
+                                               <listheader label="Üzenet" hflex="max" align="left" sort="auto(description)" />\r
                                                <listheader label="Paraméterek" hflex="min" align="left" sort="auto" />\r
                                        </listhead>\r
 \r
@@ -63,7 +64,7 @@
                                                        <listcell label="@load(each.parentJobId)" />\r
                                                        <listcell label="@load(each.submitted)" />\r
                                                        <listcell label="@load(each.finished)" />\r
-                                                       <listcell label="@load(each.name)" />\r
+                                                       <listcell label="@load(each.name)" tooltiptext="@load(each.name)" />\r
                                                        <listcell label="@load(each.priority)" />\r
                                                        <listcell label="@load(each.related)" />\r
                                                        <listcell label="@load(each.status)" />\r
index a3980f006a01ed5d366c2cf9cf38e67b52bb8338..ed19775eb8b436471591ac59b7f30a1866bea3b8 100644 (file)
@@ -80,6 +80,7 @@
        </borderlayout>\r
            \r
        <hbox width="100%" pack="center" align="center">\r
+               <button id="reloadButton" label="Frissítés" onClick="@command('reload')" />\r
                <button id="closeButton" label="Mégsem" onClick="@command('close')" />\r
                <button id="executeButton" label="Futtatás" onClick="@command('execute')" />\r
        </hbox>\r
index d887cc807ed3990376f90a7958eb1b41e2a6e231..ff9302ba5690ea9092ca7c9261f5a788a5cfa5d6 100644 (file)
@@ -592,6 +592,24 @@ public class JobRuntime extends Job implements IJobRuntime {
                return isService;
        }
 
+       public boolean isTouchedByExecutor() {
+               if (!getStatus().equals(JobStatus.WAIT_EXECUTOR))
+                       return false;
+               if (ip > 0) {
+                       int executorInstructionCount = 0;
+                       for (int i = ip; i == 0; i--) {
+                               IInstruction instruction = program.get(i);
+                               if (instruction instanceof CallJobStepInstruction)
+                                       executorInstructionCount++;
+                       }
+
+                       if (executorInstructionCount == 1)
+                               return true;
+               }
+
+               return false;
+       }
+
        @Override
        public boolean isWaitFinish() {
                return JobStatus.WAIT_FINISH.equals(status);
@@ -704,11 +722,6 @@ public class JobRuntime extends Job implements IJobRuntime {
                savedStatus = status;
        }
 
-       @Override
-       public void setCancelable(boolean cancelable) {
-               this.cancelable = cancelable;
-       }
-
        /*
                private final EventListenerList listeners = new EventListenerList();
                private List<JobRuntime> children;
@@ -718,9 +731,14 @@ public class JobRuntime extends Job implements IJobRuntime {
                private Semaphore forkSempahore;
                private IJobChangedListener jobChangedListener;
                private List<Long> childrenIDs;
-       
+
         * */
 
+       @Override
+       public void setCancelable(boolean cancelable) {
+               this.cancelable = cancelable;
+       }
+
        @Override
        public void setCurrentStep(String currentStep) {
                this.currentStep = currentStep;
index 552a38d94aac4f1aa6a200740ffaf3e929395923..e003d938833f5d0fe23bb93d268b2d51321b0069 100644 (file)
@@ -53,13 +53,10 @@ public class SchedulerService {
        private IJobEngine jobEngine = null;\r
        private BasicDBList scheduleJobs;\r
 \r
-       private int schedulerJobId;\r
-\r
        public SchedulerService(IJobEngine jobEngine) throws Exception {\r
                // http://www.quartz-scheduler.org/documentation/quartz-2.2.x/configuration/\r
                // https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm\r
                this.jobEngine = jobEngine;\r
-               scheduler = StdSchedulerFactory.getDefaultScheduler();\r
        }\r
 \r
        public ScheduledJob createScheduledJob(BasicDBObject jobJSON) {\r
@@ -184,6 +181,7 @@ public class SchedulerService {
                        logger.error("Missing system property: 'jobengine.jobscheduling.config'");\r
                        return;\r
                }\r
+               logger.error("Loading scheduler configuration file: {}", configPath);\r
                File schedulingConfigFile = new File(configPath);\r
                if (schedulingConfigFile.exists()) {\r
                        String jsonConfig = new String(Files.readAllBytes(Paths.get(schedulingConfigFile.getAbsolutePath())));\r
@@ -216,6 +214,11 @@ public class SchedulerService {
                logger.info("{} is registered in scheduler", job);\r
        }\r
 \r
+       public void restart() throws Exception {\r
+               shutdown();\r
+               startup();\r
+       }\r
+\r
        public void schedule(ScheduledJob job) {\r
                job.setJobEngine(jobEngine);\r
                String jobID = job.getJobId();\r
@@ -278,6 +281,7 @@ public class SchedulerService {
        }\r
 \r
        public void startup() throws Exception {\r
+               scheduler = StdSchedulerFactory.getDefaultScheduler();\r
                scheduler.start();\r
                loadStartupJobsFromConfig();\r
        }\r
index e2fe4a413caa864941007d3ad62938c2b20feef7..27487b97e9de92030878eaf51a0dd2f7fc5d6e88 100644 (file)
@@ -2,6 +2,7 @@ package user.jobengine.zk.model;
 \r
 import static java.util.stream.Collectors.toList;\r
 \r
+import java.util.Arrays;\r
 import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Map;\r
@@ -22,6 +23,7 @@ import org.zkoss.zul.Messagebox;
 import org.zkoss.zul.Window;\r
 \r
 import user.commons.IJob;\r
+import user.commons.JobStatus;\r
 import user.commons.ListUtils;\r
 import user.commons.nexio.INexioAPI;\r
 import user.commons.nexio.NexioDispatcher;\r
@@ -46,6 +48,8 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        private boolean allExecutionDisabled;\r
        private boolean scheduledExecutionDisabled;\r
        private String searchText;\r
+       private JobStatus searchStatus;\r
+       private List<JobStatus> searchStatuses;\r
 \r
        @Command\r
        public void cancelAllJobs() {\r
@@ -111,6 +115,14 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                return newPriority;\r
        }\r
 \r
+       public JobStatus getSearchStatus() {\r
+               return searchStatus;\r
+       }\r
+\r
+       public List<JobStatus> getSearchStatuses() {\r
+               return searchStatuses;\r
+       }\r
+\r
        public String getSearchText() {\r
                return searchText;\r
        }\r
@@ -131,6 +143,9 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                        initializeList();\r
                        setAllExecutionDisabled(jobEngine.isAllExecutionDisabled());\r
                        setScheduledExecutionDisabled(jobEngine.isScheduledExecutionDisabled());\r
+\r
+                       searchStatuses = Arrays.asList(null, JobStatus.SUSPENDED, JobStatus.EXECUTING);\r
+\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
                        setStartupDisabled(true);\r
@@ -168,6 +183,11 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
 \r
        @Override\r
        public void jobChanged(JobChangedEvent event) {\r
+\r
+               //az update mehet\r
+               //              if ((searchText != null && searchText.trim().length() > 4) || searchStatus != null)\r
+               //                      return;\r
+\r
                JobChangedEvent jobEvent = event;\r
                final IJobRuntime job = jobEvent.getJob();\r
                if (jobEvent.getSignalType().equals(SignalType.CREATE)) {\r
@@ -201,17 +221,6 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                notifyChange("jobList");\r
        }\r
 \r
-       private void onJobUpdated(IJobRuntime job) {\r
-               //List<IJobRuntime> savedSelectedJobs = new ArrayList<>(selectedJobs);\r
-               jobList.notifyChange(job);\r
-       }\r
-\r
-       @Command\r
-       public void onSelect() {\r
-               logger.info("Selection changed!");\r
-               notifyChange("updatePriorityDisabled");\r
-       }\r
-\r
        //      @Command\r
        //      public void restart() {\r
        //              startupDisabled = true;\r
@@ -223,6 +232,17 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        //              initializeList();\r
        //      }\r
 \r
+       private void onJobUpdated(IJobRuntime job) {\r
+               //List<IJobRuntime> savedSelectedJobs = new ArrayList<>(selectedJobs);\r
+               jobList.notifyChange(job);\r
+       }\r
+\r
+       @Command\r
+       public void onSelect() {\r
+               logger.info("Selection changed!");\r
+               notifyChange("updatePriorityDisabled");\r
+       }\r
+\r
        private void onShutdown() {\r
                setShutdownDisabled(true);\r
 \r
@@ -238,7 +258,7 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        }\r
 \r
        @Command\r
-       @NotifyChange("searchText")\r
+       @NotifyChange("searchStatus")\r
        public void resetSearchRelated() {\r
                logger.info("Reset search");\r
                setSearchText("");\r
@@ -286,12 +306,15 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        }\r
 \r
        @Command\r
+       @NotifyChange("searchStatus")\r
        public void searchRelated() {\r
 \r
                if (StringUtils.isBlank(searchText)) {\r
                        resetSearchRelated();\r
                        return;\r
                }\r
+               setSearchStatus(null);\r
+               notifyChange("searchStatus");\r
 \r
                initializeList();\r
 \r
@@ -299,7 +322,7 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
 \r
                logger.info("Search {}", searchText);\r
                String trimmedSearchText = StringUtils.trim(searchText);\r
-               if (trimmedSearchText.length() < 5) {\r
+               if (trimmedSearchText.length() < 4) {\r
                        Messagebox.show("Minimum 4 karakter begépelése szükséges a kereséshez.", "Figyelmeztetés", Messagebox.OK, Messagebox.INFORMATION);\r
                        return;\r
                }\r
@@ -346,6 +369,15 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                jobEngine.setScheduledExecutionDisabled(scheduledExecutionDisabled);\r
        }\r
 \r
+       public void setSearchStatus(JobStatus searchStatus) {\r
+               this.searchStatus = searchStatus;\r
+               logger.info("Selected {}", searchStatus);\r
+       }\r
+\r
+       public void setSearchStatuses(List<JobStatus> searchStatuses) {\r
+               this.searchStatuses = searchStatuses;\r
+       }\r
+\r
        public void setSearchText(String searchText) {\r
                if (!searchText.equals(this.searchText)) {\r
                        this.searchText = searchText;\r
index 90c37feb66d3364efb62b3df1b2665d56256213c..482fe685f3504870dcd8053e531e101f36668b0b 100644 (file)
@@ -12,6 +12,7 @@ import org.zkoss.bind.annotation.Command;
 import org.zkoss.bind.annotation.ContextParam;\r
 import org.zkoss.bind.annotation.ContextType;\r
 import org.zkoss.bind.annotation.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
 import org.zkoss.zk.ui.Component;\r
 import org.zkoss.zk.ui.Executions;\r
 import org.zkoss.zk.ui.select.Selectors;\r
@@ -81,6 +82,19 @@ public class JobSelectorModel extends BaseModel {
                jobs = new ListModelList<>(NoSQLUtils.asList(jobEngine.getScheduler().getScheduleJobs()));\r
        }\r
 \r
+       @Command\r
+       @NotifyChange("jobs")\r
+       public void reload() {\r
+               SchedulerService scheduler = jobEngine.getScheduler();\r
+               try {\r
+                       scheduler.restart();\r
+                       jobs = new ListModelList<>(NoSQLUtils.asList(scheduler.getScheduleJobs()));\r
+               } catch (Exception e) {\r
+                       logger.info("Scheduler reload error. System message: {}", e.getMessage());\r
+               }\r
+\r
+       }\r
+\r
        public void setJobs(ListModelList<BasicDBObject> jobs) {\r
                this.jobs = jobs;\r
        }\r