Skip to content

Commit b3eefea

Browse files
author
Jason Stedman
committed
Merge branch 'hackathon' of https://github.com/hms-dbmi/IRCT into hackathon
2 parents 53f19e4 + efd6994 commit b3eefea

File tree

93 files changed

+1091
-14430
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+1091
-14430
lines changed

IRCT-API/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/IRCTApplication.java

+28-24
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import java.util.List;
1010
import java.util.Map;
1111
import java.util.Properties;
12-
import java.util.logging.Level;
13-
import java.util.logging.Logger;
1412

1513
import javax.annotation.PostConstruct;
1614
import javax.ejb.Singleton;
@@ -24,6 +22,8 @@
2422
import javax.persistence.criteria.CriteriaQuery;
2523
import javax.persistence.criteria.Root;
2624

25+
import org.apache.log4j.Logger;
26+
2727
import edu.harvard.hms.dbmi.bd2k.irct.dataconverter.ResultDataConverter;
2828
import edu.harvard.hms.dbmi.bd2k.irct.event.EventConverterImplementation;
2929
import edu.harvard.hms.dbmi.bd2k.irct.event.IRCTEventListener;
@@ -52,8 +52,7 @@ public class IRCTApplication {
5252
private Map<String, IRCTJoin> supportedJoinTypes;
5353
private Map<ResultDataType, List<DataConverterImplementation>> resultDataConverters;
5454

55-
@Inject
56-
Logger log;
55+
Logger logger = Logger.getLogger(this.getClass());
5756

5857
@Inject
5958
private EntityManagerFactory objectEntityManager;
@@ -70,27 +69,27 @@ public class IRCTApplication {
7069
*/
7170
@PostConstruct
7271
public void init() {
73-
log.info("Starting IRCT Application");
72+
logger.info("Starting IRCT Application");
7473
this.oem = objectEntityManager.createEntityManager();
7574
this.oem.setFlushMode(FlushModeType.COMMIT);
7675

77-
log.info("Loading Data Converters");
76+
logger.info("Loading Data Converters");
7877
loadDataConverters();
79-
log.info("Finished Data Converters");
78+
logger.info("Finished Data Converters");
8079

81-
log.info("Loading Event Listeners");
80+
logger.info("Loading Event Listeners");
8281
loadIRCTEventListeners();
83-
log.info("Finished Loading Event Listeners");
82+
logger.info("Finished Loading Event Listeners");
8483

85-
log.info("Loading Join Types");
84+
logger.info("Loading Join Types");
8685
loadJoins();
87-
log.info("Finished Loading Join Types");
86+
logger.info("Finished Loading Join Types");
8887

89-
log.info("Loading Resources");
88+
logger.info("Loading Resources");
9089
loadResources();
91-
log.info("Finished Loading Resources");
90+
logger.info("Finished Loading Resources");
9291

93-
log.info("Finished Starting IRCT Application");
92+
logger.info("Finished Starting IRCT Application");
9493
}
9594

9695
public String getVersion() {
@@ -109,14 +108,13 @@ public String getVersion() {
109108
version = p.getProperty("version", "");
110109
}
111110
} catch (Exception e) {
112-
log.log(Level.INFO, "getVersion() ERROR:" + e.getMessage());
111+
logger.error("getVersion() ERROR:" + e.getMessage());
113112
}
114113

115114
if (version == null) {
116115
// we could not compute the version so use a blank
117116
version = "N/A";
118117
}
119-
120118
return version;
121119
}
122120

@@ -136,7 +134,7 @@ private void loadIRCTEventListeners() {
136134
irctEventListener.registerListener(irctEvent);
137135
}
138136

139-
log.info("Loaded " + allEventListeners.size() + " IRCT Event listeners");
137+
logger.info("Loaded " + allEventListeners.size() + " IRCT Event listeners");
140138
}
141139

142140
/**
@@ -161,7 +159,7 @@ private void loadDataConverters() {
161159

162160
}
163161

164-
log.info("Loaded " + allDCI.size() + " result data converters");
162+
logger.info("Loaded " + allDCI.size() + " result data converters");
165163
}
166164

167165
/**
@@ -178,7 +176,7 @@ private void loadJoins() {
178176
for (IRCTJoin jt : oem.createQuery(criteria).getResultList()) {
179177
this.supportedJoinTypes.put(jt.getName(), jt);
180178
}
181-
log.info("Loaded " + this.supportedJoinTypes.size() + " joins");
179+
logger.info("Loaded " + this.supportedJoinTypes.size() + " joins");
182180
}
183181

184182
/**
@@ -194,19 +192,19 @@ private void loadResources() {
194192
CriteriaQuery<Resource> criteria = cb.createQuery(Resource.class);
195193
Root<Resource> load = criteria.from(Resource.class);
196194
criteria.select(load);
197-
log.info("loadResources() "+criteria.toString());
195+
logger.info("loadResources() "+criteria.toString());
198196
for (Resource resource : oem.createQuery(criteria).getResultList()) {
199197
try {
200-
log.info("loadResources() Setting up resource:"+resource.toString()+" "+resource.getId()+" "+resource.getClass().toString());
198+
logger.info("loadResources() Setting up resource:"+resource.toString()+" "+resource.getId()+" "+resource.getClass().toString());
201199
resource.setup();
202-
log.info("loadResources() resource ```"+resource.getName()+"``` has been loaded");
200+
logger.info("loadResources() resource ```"+resource.getName()+"``` has been loaded");
203201
this.resources.put(resource.getName(), resource);
204202
} catch (ResourceInterfaceException e) {
205-
log.warning("loadResources() Exception: "+e.getMessage());
203+
logger.error("loadResources() Exception: "+e.getMessage());
206204
e.printStackTrace();
207205
}
208206
}
209-
log.info("loadResources() Loaded " + this.resources.size() + " resources");
207+
logger.info("loadResources() Loaded " + this.resources.size() + " resources");
210208
}
211209

212210
/**
@@ -255,6 +253,12 @@ public boolean doesResourceExist(String name) {
255253
* @return Resources
256254
*/
257255
public Map<String, Resource> getResources() {
256+
logger.debug("getResources()");
257+
258+
//Map<String, Resource> resources
259+
for (Map.Entry<String, Resource> entry : resources.entrySet()) {
260+
logger.debug("getResources() resource key: " + entry.getKey() + " value:" + entry.getValue().getName());
261+
}
258262
return resources;
259263
}
260264

IRCT-API/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/action/QueryAction.java

+37-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
import javax.naming.NamingException;
1010

11+
import org.apache.log4j.Logger;
12+
13+
import edu.harvard.hms.dbmi.bd2k.irct.event.IRCTEventListener;
14+
import edu.harvard.hms.dbmi.bd2k.irct.exception.ResourceInterfaceException;
1115
import edu.harvard.hms.dbmi.bd2k.irct.model.query.ClauseAbstract;
1216
import edu.harvard.hms.dbmi.bd2k.irct.model.query.Query;
1317
import edu.harvard.hms.dbmi.bd2k.irct.model.query.WhereClause;
@@ -18,8 +22,6 @@
1822
import edu.harvard.hms.dbmi.bd2k.irct.model.result.ResultStatus;
1923
import edu.harvard.hms.dbmi.bd2k.irct.model.security.SecureSession;
2024
import edu.harvard.hms.dbmi.bd2k.irct.util.Utilities;
21-
import edu.harvard.hms.dbmi.bd2k.irct.event.IRCTEventListener;
22-
import edu.harvard.hms.dbmi.bd2k.irct.exception.ResourceInterfaceException;
2325

2426
/**
2527
* Implements the Action interface to run a query on a specific instance
@@ -35,7 +37,8 @@ public class QueryAction implements Action {
3537
private Result result;
3638

3739
private IRCTEventListener irctEventListener;
38-
40+
private Logger logger = Logger.getLogger(this.getClass());
41+
3942
/**
4043
* Sets up the action to run a given query on a resource
4144
*
@@ -45,14 +48,22 @@ public class QueryAction implements Action {
4548
* Run the query
4649
*/
4750
public void setup(Resource resource, Query query) {
51+
logger.debug("setup() Starting...");
52+
53+
if (resource == null) {
54+
logger.warn("setup() resource is null");
55+
}
4856
this.query = query;
4957
this.resource = resource;
5058
this.status = ActionStatus.CREATED;
5159
this.irctEventListener = Utilities.getIRCTEventListener();
60+
logger.debug("setup() Finished.");
5261
}
5362

5463
@Override
5564
public void updateActionParams(Map<String, Result> updatedParams) {
65+
logger.debug("updateActionParams() Starting...");
66+
5667
for (String key : updatedParams.keySet()) {
5768
Long clauseId = Long.valueOf(key.split(".")[0]);
5869
String parameterId = key.split(".")[1];
@@ -64,33 +75,50 @@ public void updateActionParams(Map<String, Result> updatedParams) {
6475
updatedParams.get(key).getId().toString());
6576
}
6677
}
78+
logger.debug("updateActionParams() Finished.");
6779
}
6880

6981
@Override
7082
public void run(SecureSession session) {
83+
logger.debug("run() Starting...");
84+
85+
logger.debug("run() calling `beforeQuery`");
7186
irctEventListener.beforeQuery(session, resource, query);
87+
logger.debug("run() set status to "+ActionStatus.RUNNING);
7288
this.status = ActionStatus.RUNNING;
7389
try {
90+
logger.debug("run() getting `QueryResourceImplementationInterface` object");
7491
QueryResourceImplementationInterface queryInterface = (QueryResourceImplementationInterface) resource
7592
.getImplementingInterface();
93+
94+
if (queryInterface == null) {
95+
logger.error("run() `queryInterface` is not found for "+resource.getName()+" resource");
96+
throw new RuntimeException("Unknown implementing interface for resource `"+resource.getName()+"`");
97+
}
7698

77-
this.result = ActionUtilities.createResult(queryInterface
78-
.getQueryDataType(query));
99+
logger.debug("run() creating `result` field.");
100+
this.result = ActionUtilities.createResult(queryInterface.getQueryDataType(query));
79101

80102
if (session != null) {
103+
logger.debug("run() setting `user` field of the `result`.");
81104
this.result.setUser(session.getUser());
82105
}
83106

84-
85-
107+
logger.debug("run() calling runQuery() on the interface.");
86108
this.result = queryInterface.runQuery(session, query, result);
87109

88110
// Update the result in the database
111+
logger.debug("run() calling ActionUtilities.mergeResult(). This would persist the result in the database.");
89112
ActionUtilities.mergeResult(this.result);
90113
} catch (Exception e) {
91-
this.result.setResultStatus(ResultStatus.ERROR);
92-
this.result.setMessage(e.getMessage());
114+
logger.error("run() Exception: "+e.getMessage());
93115
this.status = ActionStatus.ERROR;
116+
if (this.result == null) {
117+
throw new RuntimeException(e);
118+
} else {
119+
this.result.setResultStatus(ResultStatus.ERROR);
120+
this.result.setMessage(e.getMessage());
121+
}
94122
}
95123
irctEventListener.afterQuery(session, resource, query);
96124
}

IRCT-API/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/controller/ExecutionController.java

+45-11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import java.util.Date;
77
import java.util.concurrent.Callable;
8-
import java.util.logging.Logger;
98

109
import javax.annotation.Resource;
1110
import javax.ejb.Asynchronous;
@@ -18,6 +17,8 @@
1817
import javax.persistence.PersistenceContext;
1918
import javax.transaction.UserTransaction;
2019

20+
import org.apache.log4j.Logger;
21+
2122
import edu.harvard.hms.dbmi.bd2k.irct.action.JoinAction;
2223
import edu.harvard.hms.dbmi.bd2k.irct.action.ProcessAction;
2324
import edu.harvard.hms.dbmi.bd2k.irct.action.QueryAction;
@@ -44,8 +45,7 @@
4445
@Stateless
4546
public class ExecutionController {
4647

47-
@Inject
48-
Logger log;
48+
Logger logger = Logger.getLogger(this.getClass());
4949

5050
@PersistenceContext(unitName = "primary")
5151
EntityManager entityManager;
@@ -103,31 +103,49 @@ public Long runProcess(IRCTProcess process, SecureSession secureSession)
103103
*/
104104
public Long runQuery(Query query, SecureSession secureSession)
105105
throws PersistableException {
106+
logger.debug("runQuery() Starting...");
106107

107108
Result newResult = new Result();
108109
newResult.setJobType("EXECUTION");
110+
logger.debug("runQuery() Set `newResult` as type:EXECUTION");
109111

110112
// Add the current user to the query.
111113
newResult.setUser(secureSession.getUser());
112-
114+
logger.debug("runQuery() Set `newResult` as user:"+newResult.getUser().getUserId());
115+
113116
newResult.setResultStatus(ResultStatus.RUNNING);
117+
logger.debug("runQuery() Set `newResult` as type:EXECUTION");
118+
114119
entityManager.persist(newResult);
120+
logger.debug("runQuery() persited `newResult`");
115121

116122
QueryAction qa = new QueryAction();
123+
117124
edu.harvard.hms.dbmi.bd2k.irct.model.resource.Resource resource = (edu.harvard.hms.dbmi.bd2k.irct.model.resource.Resource) query.getResources().toArray()[0];
125+
logger.debug("runQuery() `QueryAction` and `Resource` are set.");
126+
118127
if(!resource.isSetup()) {
128+
logger.debug("runQuery() Resource `"+resource.getName()+"` is not set up, yet.");
119129
resource = rc.getResource(resource.getName());
130+
} else {
131+
logger.debug("runQuery() Resource is already set up. "+resource.getName());
120132
}
133+
logger.debug("runQuery() Resource `"+resource.getName()+"` is now should be all set.");
134+
135+
logger.debug("runQuery() Setting up queryaction with resource and query.");
121136
qa.setup(resource, query);
137+
logger.debug("runQuery() `QueryAction` setup is now complete.");
122138

123139
ExecutableLeafNode eln = new ExecutableLeafNode();
124140
eln.setAction(qa);
141+
logger.debug("runQuery() Added `QueryAction` to `ExecutableLeafNode`.");
125142

126143
ExecutionPlan exp = new ExecutionPlan();
127144
exp.setup(eln, secureSession);
128-
145+
logger.debug("runQuery() `ExecutionPlan` is all set up. Try runExecutionPlan() now");
146+
129147
runExecutionPlan(exp, newResult);
130-
148+
logger.debug("runQuery() returning `newResult.id` as "+newResult.getId());
131149
return newResult.getId();
132150
}
133151

@@ -178,12 +196,16 @@ public Long runJoin(Join join, SecureSession secureSession)
178196
@Asynchronous
179197
public void runExecutionPlan(final ExecutionPlan executionPlan,
180198
final Result result) throws PersistableException {
181-
199+
200+
logger.debug("runExectionPlan() Starting...");
182201
Callable<Result> runPlan = new Callable<Result>() {
183202
@Override
184203
public Result call() {
204+
logger.debug("Callable.call() starting in inner class");
205+
185206
try {
186207
result.setStartTime(new Date());
208+
logger.debug("Callable.call() Calling run() on `executionPlan` "+executionPlan.getClass().getName());
187209
executionPlan.run();
188210

189211
Result finalResult = executionPlan.getResults();
@@ -206,25 +228,37 @@ public Result call() {
206228
}
207229

208230
result.setEndTime(new Date());
231+
209232
UserTransaction userTransaction = lookup();
233+
210234
userTransaction.begin();
211235
entityManager.merge(result);
212236
userTransaction.commit();
237+
213238
} catch (PersistableException e) {
239+
logger.error("Callable.call() PersistableException:"+e.getMessage());
240+
214241
result.setResultStatus(ResultStatus.ERROR);
215242
result.setMessage(e.getMessage());
216243
} catch (Exception e) {
217244
e.printStackTrace();
218-
log.info(e.getMessage());
245+
logger.error("Callable.call() Exception:"+e.getMessage());
219246
result.setResultStatus(ResultStatus.ERROR);
220247
} finally {
221-
248+
logger.debug("Callable.call() done with the method");
222249
}
250+
logger.debug("Callable.call() returning `result` with status "+result.getResultStatus().toString());
223251
return result;
224252
}
225253
};
226-
227-
mes.submit(runPlan);
254+
logger.debug("runExecutionPlan() created `Callable`. calling submit() of ManagedExecutionService");
255+
try {
256+
mes.submit(runPlan);
257+
} catch (Exception e) {
258+
logger.error("runExecutionPlan() >>>Exception: "+e.getMessage());
259+
} finally {
260+
logger.debug("runExecutionPlan() Finished.");
261+
}
228262
}
229263

230264
private UserTransaction lookup() throws NamingException {

0 commit comments

Comments
 (0)