/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/fileupload/AddressTask.java
ViewVC logotype

Contents of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/fileupload/AddressTask.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2994 - (show annotations) (download)
Tue Mar 29 20:36:40 2016 UTC (8 years, 1 month ago) by torben
File size: 3127 byte(s)
Release some of the tasks resources early for GC
1 package dk.daoas.adressevedligehold.fileupload;
2
3 import org.apache.commons.lang3.exception.ExceptionUtils;
4
5 import dk.daoas.adressevedligehold.MailSender;
6 import dk.daoas.adressevedligehold.ReloadTask;
7 import dk.daoas.adressevedligehold.afstandandenrute.AfstandAndenRuteTask;
8 import dk.daoas.adressevedligehold.tasks.Task;
9 import dk.daoas.adressevedligehold.tasks.TaskLogger;
10 import dk.daoas.adressevedligehold.util.TimingHelper;
11
12 /*
13 *
14 */
15
16 public class AddressTask extends Task {
17
18 private TaskLogger logger = TaskLogger.getInstance();
19
20 private String distributor;
21 private String filename;
22
23 AddressSource source;
24 boolean writeBack;
25
26 public AddressTask(AddressSource source, boolean writeBack) {
27
28 this.source = source;
29 this.writeBack = writeBack;
30
31 this.distributor = source.getDistributor();
32 this.filename = source.getFilename();
33 }
34
35
36
37 @Override
38 protected void taskRun() throws Exception {
39
40 try {
41 TimingHelper timer = new TimingHelper();
42
43 logger.info("Validating Source");
44 source.validate();
45
46 logger.info("Reading data from DB");
47 AddressManager addrManager = new AddressManager();
48
49 logger.info("Data is ready");
50
51 EntryUgedage ugedage = new EntryUgedage(); //saml op på hvilke ugedage der er blevet behandlet
52
53
54 int entryCount = 0;
55
56 AddressSourceEntry entry;
57 while ( (entry = source.getNextEntry()) != null) {
58 if (super.abort) {
59 break;
60 }
61
62 addrManager.visit(entry);
63 ugedage.merge(entry.ugedage);
64 entryCount++;
65 }
66
67 addrManager.closeUnvisitedAddresses( source.getDistributor(), ugedage );
68
69
70
71 if (writeBack) {
72 addrManager.writeBackChanges();
73 } else {
74 addrManager.dumpChanged();
75 }
76
77 AddressReport report = new AddressReport(addrManager, entryCount, ugedage, source, timer, writeBack, addrManager.getDuplicateCount() );
78 report.sendRapport();
79
80
81 if (writeBack) {
82 manager.submitTask( new ReloadTask("Indlaesning/" + source.getDistributor()) );
83
84
85 if (source.calculateDistances()) {
86 Task tsk = new AfstandAndenRuteTask(source.getDistributor(), AfstandAndenRuteTask.INCREMENTAL);
87 manager.submitTask( tsk );
88 }
89 }
90
91
92
93 } catch(Exception e) {
94
95 String subject = "Error loading data for " + source.getDistributor();
96 String body = "File: " + source.getFilename();
97 body += "<br><br>";
98 body += "Exception:<br>";
99 body += ExceptionUtils.getStackTrace(e);
100 MailSender.sendMail(subject, body);
101
102 throw e; //rethrow exception
103 } finally {
104
105 try {
106 logger.info("Cleaning up resources");
107 source.close();
108 source = null; //and release it for garbace collection
109 } catch (Exception e) {
110 logger.warning("Error during cleanup: ", e );
111 }
112 }
113
114 }
115
116 @Override
117 public String getDescription() {
118 return "AddressTask " + distributor;
119 }
120
121 @Override
122 public double getPercentCompleted() {
123 return -1;
124 }
125
126 @Override
127 public String getDetail() {
128 return filename;
129 }
130
131 }

  ViewVC Help
Powered by ViewVC 1.1.20