Author: enridaga
Date: Tue Nov 15 23:06:40 2011
New Revision: 1202462
URL: http://svn.apache.org/viewvc?rev=1202462&view=rev
Log:
* Decoupled input preparation from ReasoningServiceExecutor
** Created factory for input management, defined api for input providers
** input providers are still part of the /web submodule, this should be moved
out in the future
** implemented input providers for url, file, ontonet and rule inputs
** Implemented a simple input managers which collects all currently available
input providers. This could be moved out and demanded to a SCR component for
better extendibility in the future.
* Let ReasoningServiceExecutor to be an implementation of Callable
* The reasoners endpoint now supports a new path param 'job' to start a
background process (needs testing)
* Changed the /jobs rest endpoint to be a subpath of /reasoners
* Fixed a bug on output filtering in the AbstractJenaReasoningService
All this is part of STANBOL-343
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputFactory.java
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputManager.java
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputProvider.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/RESTInputFactory.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/SimpleInputManager.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/FileInputProvider.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/RecipeInputProvider.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/UrlInputProvider.java
Modified:
incubator/stanbol/branches/lto-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/AbstractJenaReasoningService.java
incubator/stanbol/branches/lto-reasoners/reasoners/pom.xml
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/JobsResource.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceExecutor.java
Modified:
incubator/stanbol/branches/lto-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/AbstractJenaReasoningService.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/AbstractJenaReasoningService.java?rev=1202462&r1=1202461&r2=1202462&view=diff
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/AbstractJenaReasoningService.java
(original)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/AbstractJenaReasoningService.java
Tue Nov 15 23:06:40 2011
@@ -1,6 +1,5 @@
package org.apache.stanbol.reasoners.jena;
-import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -58,9 +57,10 @@ public abstract class AbstractJenaReason
*/
@Override
public InfModel run(Model data) {
- log.info("Called run(Model data)");
- InfGraph inferredGraph = this.reasoner.bind(data.getGraph());
- return ModelFactory.createInfModel(inferredGraph);
+ log.debug(" run(Model data)");
+ InfModel im = ModelFactory.createInfModel(this.reasoner, data);
+ im.prepare();
+ return im;
}
/**
@@ -73,6 +73,7 @@ public abstract class AbstractJenaReason
*/
@Override
public InfModel run(Model data, List<Rule> rules) {
+ log.debug(" run(Model data, List<Rule> rules)");
InfGraph inferredGraph = customReasoner(rules).bind(data.getGraph());
return ModelFactory.createInfModel(inferredGraph);
}
@@ -91,7 +92,7 @@ public abstract class AbstractJenaReason
Map<String,List<String>> parameters) throws
UnsupportedTaskException,
ReasoningServiceException,
InconsistentInputException {
- log.info("Called runTask(String taskID,Model data,List<Rule>
rules,boolean filtered,Map<String,List<String>> parameters)");
+ log.debug(" runTask(String taskID,Model data,List<Rule> rules,boolean
filtered,Map<String,List<String>> parameters)");
if (taskID.equals(ReasoningService.Tasks.CLASSIFY)) {
if (rules != null) {
return classify(data, rules);
@@ -118,6 +119,7 @@ public abstract class AbstractJenaReason
public Set<Statement> runTask(String taskID, Model data) throws
UnsupportedTaskException,
ReasoningServiceException,
InconsistentInputException {
+ log.debug(" runTask(String taskID, Model data)");
if (taskID.equals(ReasoningService.Tasks.CLASSIFY)) {
return classify(data);
} else if (taskID.equals(ReasoningService.Tasks.ENRICH)) {
@@ -140,6 +142,7 @@ public abstract class AbstractJenaReason
* @return
*/
protected Reasoner customReasoner(List<Rule> customRules) {
+ log.debug(" customReasoner(List<Rule> customRules)");
List<Rule> standardRules = ((FBRuleReasoner) this.reasoner).getRules();
standardRules.addAll(customRules);
return new GenericRuleReasoner(standardRules);
@@ -158,6 +161,7 @@ public abstract class AbstractJenaReason
* @return
*/
protected Set<Statement> classify(Model data) {
+ log.debug(" classify(Model data)");
return run(data).listStatements().filterKeep(new
PropertyFilter(RDF.type)).toSet();
}
@@ -176,6 +180,7 @@ public abstract class AbstractJenaReason
* @return
*/
protected Set<Statement> classify(Model data, List<Rule> rules) {
+ log.debug(" classify(Model data, List<Rule> rules)");
return run(data, rules).listStatements().filterKeep(new
PropertyFilter(RDF.type)).toSet();
}
@@ -191,11 +196,20 @@ public abstract class AbstractJenaReason
* @return
*/
protected Set<Statement> enrich(Model data, boolean filtered) {
- Set<Statement> statements = run(data).listStatements().toSet();
- if (filtered) {
- return prune(data.listStatements().toSet(), statements);
+ log.debug(" enrich(Model data, boolean filtered)");
+ // Since the input model is modified by the reasoner,
+ // We keep the original list to prune the data after, if necessary
+ if(filtered){
+ Set<Statement> original = new HashSet<Statement>();
+ original.addAll(data.listStatements().toSet());
+ log.debug(" original statements are: {}",original.size());
+ InfModel i = run(data);
+ Set<Statement> inferred = i.listStatements().toSet();
+ log.debug(" inferred statements are: {}",inferred.size());
+ return prune(original, inferred);
+ }else{
+ return run(data).listStatements().toSet();
}
- return statements;
}
/**
@@ -206,12 +220,14 @@ public abstract class AbstractJenaReason
* @return
*/
protected final Set<Statement> prune(Set<Statement> first, Set<Statement>
second) {
+ log.debug(" prune(Set<Statement> first[{}], Set<Statement>
second[{}])",first.size(),second.size());
Set<Statement> remove = new HashSet<Statement>();
for (Statement s : second) {
if (first.contains(s)) {
remove.add(s);
}
}
+ log.debug(" ---- removing {} statements from
{}",first.size(),second.size());
second.removeAll(remove);
return second;
}
@@ -227,6 +243,7 @@ public abstract class AbstractJenaReason
* @return
*/
public Set<Statement> enrich(Model data) {
+ log.debug(" enrich(Model data)");
return enrich(data, true);
}
@@ -243,11 +260,20 @@ public abstract class AbstractJenaReason
* @return
*/
protected Set<Statement> enrich(Model data, List<Rule> rules, boolean
filtered) {
- Set<Statement> statements = run(data, rules).listStatements().toSet();
- if (filtered) {
- return prune(data.listStatements().toSet(), statements);
+ log.debug(" enrich(Model data, List<Rule> rules, boolean filtered)");
+ // Since the input model is modified by the reasoner,
+ // We keep the original list to prune the data after, if necessary
+ if(filtered){
+ Set<Statement> original = new HashSet<Statement>();
+ original.addAll(data.listStatements().toSet());
+ log.debug(" original statements are: {}",original.size());
+ InfModel i = run(data, rules);
+ Set<Statement> inferred = i.listStatements().toSet();
+ log.debug(" inferred statements are: {}",inferred.size());
+ return prune(original, inferred);
+ }else{
+ return run(data, rules).listStatements().toSet();
}
- return statements;
}
/**
@@ -262,6 +288,7 @@ public abstract class AbstractJenaReason
* @return
*/
protected Set<Statement> enrich(Model data, List<Rule> rules) {
+ log.debug(" enrich(Model data, List<Rule> rules)");
return enrich(data, rules, true);
}
@@ -273,6 +300,7 @@ public abstract class AbstractJenaReason
*/
@Override
public boolean isConsistent(Model data) {
+ log.debug(" isConsistent(Model data)");
return isConsistent(run(data).validate());
}
@@ -288,6 +316,7 @@ public abstract class AbstractJenaReason
*/
@Override
public boolean isConsistent(Model data, List<Rule> rules) {
+ log.debug(" isConsistent(Model data, List<Rule> rules)");
return isConsistent(run(data, rules).validate());
}
@@ -303,9 +332,12 @@ public abstract class AbstractJenaReason
* @return
*/
protected boolean isConsistent(ValidityReport report) {
+ log.debug(" isConsistent(ValidityReport report)");
+ if(log.isDebugEnabled()){
Iterator<Report> it = report.getReports();
- while (it.hasNext()) {
- log.info("Report: {}", it.next());
+ while (it.hasNext()) {
+ log.debug("Report: {}", it.next());
+ }
}
return report.isClean();
}
Modified: incubator/stanbol/branches/lto-reasoners/reasoners/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/pom.xml?rev=1202462&r1=1202461&r2=1202462&view=diff
==============================================================================
--- incubator/stanbol/branches/lto-reasoners/reasoners/pom.xml (original)
+++ incubator/stanbol/branches/lto-reasoners/reasoners/pom.xml Tue Nov 15
23:06:40 2011
@@ -43,7 +43,8 @@
<module>jobs/api</module>
<module>owlapi</module>
<module>jena</module>
- <!--module>hermit</module-->
+ <module>test</module>
+ <module>hermit</module>
<!--module>base</module-->
<module>owllink</module>
<module>web</module>
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputFactory.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputFactory.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputFactory.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputFactory.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,14 @@
+package org.apache.stanbol.reasoners.servicesapi;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ReasoningServiceInputFactory {
+
+ /**
+ * Creates a new {@see ReasoningServiceInputManager} with registered {@see
ReasoningServiceInputProvider}
+ *
+ * @return
+ */
+ public ReasoningServiceInputManager
createInputManager(Map<String,List<String>> parameters);
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputManager.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputManager.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputManager.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputManager.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,42 @@
+package org.apache.stanbol.reasoners.servicesapi;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputProvider;
+
+public interface ReasoningServiceInputManager {
+
+ /**
+ * Add an input provider
+ *
+ * @param provider
+ */
+ public void addInputProvider(ReasoningServiceInputProvider provider);
+
+ /**
+ * Remove the input provider
+ *
+ * @param provider
+ */
+ public void removeInputProvider(ReasoningServiceInputProvider provider);
+
+ /**
+ * Get the input data. This should iterate over the collection from all
the registered input providers.
+ *
+ * Consider that this can be called more then once, to obtain more then
one input depending on the type.
+ *
+ * It is the Type of the object to instruct about its usage.
+ *
+ * @param type
+ * @return
+ */
+ public <T> Iterator<T> getInputData(Class<T> type);
+
+ /**
+ * Returns the immutable list of registered providers.
+ *
+ * @return
+ */
+ public List<ReasoningServiceInputProvider> getProviders();
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputProvider.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputProvider.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceInputProvider.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,23 @@
+package org.apache.stanbol.reasoners.servicesapi;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+public interface ReasoningServiceInputProvider {
+
+ /**
+ * The input data form this provider.
+ *
+ * @param type
+ * @return
+ */
+ public <T> Iterator<T> getInput(Class<T> type) throws IOException;
+
+ /**
+ * If this provider adapts the input to the specified type.
+ *
+ * @param type
+ * @return
+ */
+ public <T> boolean adaptTo(Class<T> type);
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/RESTInputFactory.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/RESTInputFactory.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/RESTInputFactory.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/RESTInputFactory.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,98 @@
+package org.apache.stanbol.reasoners.web.input.impl;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputFactory;
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputManager;
+import org.apache.stanbol.reasoners.web.input.provider.impl.FileInputProvider;
+import
org.apache.stanbol.reasoners.web.input.provider.impl.OntonetInputProvider;
+import
org.apache.stanbol.reasoners.web.input.provider.impl.RecipeInputProvider;
+import org.apache.stanbol.reasoners.web.input.provider.impl.UrlInputProvider;
+import org.apache.stanbol.rules.base.api.RuleStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RESTInputFactory implements ReasoningServiceInputFactory {
+ ONManager onm;
+ RuleStore rStore;
+
+ private Logger log = LoggerFactory.getLogger(getClass());
+
+ public RESTInputFactory(ONManager onm,RuleStore rStore){
+ this.onm = onm;
+ this.rStore = rStore;
+ }
+
+ @Override
+ public ReasoningServiceInputManager
createInputManager(Map<String,List<String>> parameters) {
+ ReasoningServiceInputManager inmgr = new SimpleInputManager();
+ String scope = null;
+ String session = null;
+ for(Entry<String,List<String>> entry : parameters.entrySet()){
+ if (entry.getKey().equals("url")) {
+ if(!entry.getValue().isEmpty()){
+ // We keep only the first value
+ // XXX (make sense support multiple values?)
+ inmgr.addInputProvider(new
UrlInputProvider(entry.getValue().iterator().next()));
+ }else{
+ // Parameter exists with no value
+ log.error("Parameter 'url' must have a value!");
+ throw new
WebApplicationException(Response.Status.BAD_REQUEST);
+ }
+ }else
+ if (entry.getKey().equals("file")) {
+ if(!entry.getValue().isEmpty()){
+ // We keep only the first value
+ // FIXME We create the file once again...
+ inmgr.addInputProvider(new FileInputProvider(new
File(entry.getValue().iterator().next())));
+ }else{
+ // Parameter exists with no value
+ log.error("Parameter 'url' must have a value!");
+ throw new
WebApplicationException(Response.Status.BAD_REQUEST);
+ }
+ }else
+ if(entry.getKey().equals("scope")){
+ if(!entry.getValue().isEmpty()){
+ scope = entry.getValue().iterator().next();
+ }else{
+ // Parameter exists with no value
+ log.error("Parameter 'scope' must have a value!");
+ throw new
WebApplicationException(Response.Status.BAD_REQUEST);
+ }
+
+ }else
+ if(entry.getKey().equals("session")){
+ if(!entry.getValue().isEmpty()){
+ session = entry.getValue().iterator().next();
+ }else{
+ // Parameter exists with no value
+ log.error("Parameter 'session' must have a value!");
+ throw new
WebApplicationException(Response.Status.BAD_REQUEST);
+ }
+
+ }else
+ if(entry.getKey().equals("recipe")){
+ if(!entry.getValue().isEmpty()){
+ inmgr.addInputProvider(new RecipeInputProvider(rStore,
entry.getValue().iterator().next()));
+ }else{
+ // Parameter exists with no value
+ log.error("Parameter 'recipe' must have a value!");
+ throw new
WebApplicationException(Response.Status.BAD_REQUEST);
+ }
+
+ }
+ }
+ if(scope!=null){
+ inmgr.addInputProvider(new OntonetInputProvider(onm, scope,
session));
+ }
+ return inmgr;
+ }
+
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/SimpleInputManager.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/SimpleInputManager.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/SimpleInputManager.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/impl/SimpleInputManager.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,132 @@
+package org.apache.stanbol.reasoners.web.input.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputManager;
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SimpleInputManager implements ReasoningServiceInputManager {
+
+ private Logger logger = LoggerFactory.getLogger(SimpleInputManager.class);
+
+ private List<ReasoningServiceInputProvider> providers;
+
+ public SimpleInputManager() {
+ this.providers = new ArrayList<ReasoningServiceInputProvider>();
+ }
+
+ @Override
+ public void addInputProvider(ReasoningServiceInputProvider provider) {
+ providers.add(provider);
+ }
+
+ @Override
+ public void removeInputProvider(ReasoningServiceInputProvider provider) {
+ providers.remove(provider);
+ }
+
+ @Override
+ public <T> Iterator<T> getInputData(final Class<T> type) {
+ final List<ReasoningServiceInputProvider> fProviders = getProviders();
+ return new Iterator<T>() {
+ private Iterator<T> current = null;
+ private Iterator<ReasoningServiceInputProvider> pIterator =
fProviders.iterator();
+
+ /**
+ * Set the next provider as the current one. Returns true if a
non-empty iterator have been set in
+ * the current variable, false if no (more) providers are
available.
+ *
+ * @return
+ */
+ private boolean nextProvider() {
+ if (pIterator.hasNext()) {
+ ReasoningServiceInputProvider provider = pIterator.next();
+ if (provider.adaptTo(type)) {
+ // If this provider can adapt
+ try {
+ current = provider.getInput(type);
+ } catch (IOException e) {
+ // This is bad, but we can go on to the next :)
+ logger.error("Cannot get input from provider", e);
+ return nextProvider();
+ }
+ // If is empty, try the next
+ if (current.hasNext() == false) {
+ return nextProvider();
+ } else {
+ return true;
+ }
+ } else {
+ // If this provider cannot adapt, try the next
+ return nextProvider();
+ }
+ } else {
+ // No providers anymore
+ return false;
+ }
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (current == null) {
+ // initialize the iterator
+ if (nextProvider()) {
+ return current.hasNext();
+ } else {
+ // No provider available, iterator is empty
+ return false;
+ }
+ } else if (current.hasNext()) {
+ return true;
+ } else {
+ // If the current iterator has finished, try the next
+ if (nextProvider()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public T next() {
+ if (current == null) {
+ // initialize the iterator
+ if (nextProvider()) {
+ return current.next();
+ } else {
+ throw new IllegalStateException("Iterator has no more
items");
+ }
+ }else{
+ if(current.hasNext()){
+ return current.next();
+ }else{
+ // This has finished, try the next (if any)
+ if (nextProvider()) {
+ return current.next();
+ } else {
+ throw new IllegalStateException("Iterator has no
more items");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ };
+ }
+
+ @Override
+ public List<ReasoningServiceInputProvider> getProviders() {
+ return Collections.unmodifiableList(providers);
+ }
+
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/FileInputProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/FileInputProvider.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/FileInputProvider.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/FileInputProvider.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,12 @@
+package org.apache.stanbol.reasoners.web.input.provider.impl;
+
+import java.io.File;
+
+
+public class FileInputProvider extends UrlInputProvider {
+
+ public FileInputProvider(File file) {
+ super(file.toURI().toString());
+ }
+
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,201 @@
+package org.apache.stanbol.reasoners.web.input.provider.impl;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
+import org.apache.stanbol.owl.transformation.JenaToOwlConvert;
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputProvider;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.MissingImportEvent;
+import org.semanticweb.owlapi.model.MissingImportListener;
+import org.semanticweb.owlapi.model.OWLAxiom;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyLoaderListener;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologySetProvider;
+import org.semanticweb.owlapi.util.OWLOntologyMerger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.rdf.model.Statement;
+import com.hp.hpl.jena.rdf.model.StmtIterator;
+
+public class OntonetInputProvider implements ReasoningServiceInputProvider {
+
+ private final Logger log = LoggerFactory.getLogger(UrlInputProvider.class);
+
+ private String scopeId;
+ private String sessionId;
+ private ONManager onManager;
+
+ public OntonetInputProvider(ONManager onManager, String scopeId) {
+ this.onManager = onManager;
+ this.scopeId = scopeId;
+ this.sessionId = null;
+ }
+
+ public OntonetInputProvider(ONManager onManager, String scopeId, String
sessionId) {
+ this.onManager = onManager;
+ this.scopeId = scopeId;
+ this.sessionId = sessionId;
+ }
+
+ @Override
+ public <T> Iterator<T> getInput(Class<T> type) throws IOException {
+ // This ontology is already a merged version, no need to iterate over
imported ones
+ final OWLOntology o = getFromOntonet();
+ if (type.isAssignableFrom(OWLAxiom.class)) {
+ final Iterator<OWLAxiom> iterator = o.getAxioms().iterator();
+ return new Iterator<T>() {
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T next() {
+ return (T) iterator.next();
+ }
+
+ @Override
+ public void remove() {
+ // This iterator is read-only
+ throw new UnsupportedOperationException("Cannot remove
statements from the iterator");
+ }
+
+ };
+ } else if (type.isAssignableFrom(Statement.class)) {
+ final OntModel input = new
JenaToOwlConvert().ModelOwlToJenaConvert(o, "RDF/XML");
+ final StmtIterator iterator = input.listStatements();
+ return new Iterator<T>() {
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T next() {
+ return (T) iterator.next();
+ }
+
+ @Override
+ public void remove() {
+ // This iterator is read-only
+ throw new UnsupportedOperationException("Cannot remove
statements from the iterator");
+ }
+ };
+ } else {
+ throw new UnsupportedOperationException("This provider does not
adapt to the given type");
+ }
+ }
+
+ @Override
+ public <T> boolean adaptTo(Class<T> type) {
+ if (type.isAssignableFrom(OWLAxiom.class) ||
type.isAssignableFrom(Statement.class)) return true;
+ return false;
+ }
+
+ private OWLOntology getFromOntonet() throws IOException {
+ try {
+ OntologyScope scope = null;
+ synchronized (onManager) {
+ scope = onManager.getScopeRegistry().getScope(this.scopeId);
+
+ }
+ if (scope == null) {
+ log.error("Scope {} cannot be retrieved", this.scopeId);
+ throw new IOException("Scope " + this.scopeId + " cannot be
retrieved");
+ }
+ OntologySpace sessionSpace = null;
+ if (this.sessionId != null) {
+ IRI sessionIRI = IRI.create(this.sessionId);
+ sessionSpace = scope.getSessionSpace(sessionIRI.toString());
+ }
+ OntologySpace coreSpace = scope.getCoreSpace();
+ Set<OWLOntology> coreOntologies = coreSpace.getOntologies(true);
+ log.info("Found {} ontologies in core space",
coreOntologies.size());
+ OntologySpace customSpace = scope.getCustomSpace();
+ Set<OWLOntology> customOntologies =
customSpace.getOntologies(true);
+ log.info("Found {} ontologies in custom space",
coreOntologies.size());
+
+ Set<OWLOntology> sessionOntologies = new HashSet<OWLOntology>();
+ log.info("Found {} ontologies in session space",
coreOntologies.size());
+
+ if (sessionSpace != null) {
+ // FIXME
+ // We collect all the ontologies in session (here we use
+ // 'false')
+ // The reason is that the set contains also an ontology which
is
+ // the
+ // root of the session space, with buggy owl:import
+ sessionOntologies.addAll(sessionSpace.getOntologies(false));
+ }
+
+ final Set<OWLOntology> set = new HashSet<OWLOntology>();
+ set.addAll(coreOntologies);
+ set.addAll(customOntologies);
+ set.addAll(sessionOntologies);
+ /**
+ * Now we merge the ontologies
+ */
+ OWLOntologyMerger merger = new OWLOntologyMerger(new
OWLOntologySetProvider() {
+ @Override
+ public Set<OWLOntology> getOntologies() {
+ return set;
+ }
+ });
+ return merger.createMergedOntology(createOWLOntologyManager(),
+ IRI.create("reasoners:input-" + System.currentTimeMillis()));
+ } catch (OWLOntologyCreationException e) {
+ log.error("The network for scope/session cannot be retrieved:", e);
+ throw new IllegalArgumentException("The network for scope/session
cannot be retrieved");
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ private OWLOntologyManager createOWLOntologyManager() {
+ // We isolate here the creation of the temporary manager
+ // TODO How to behave when resolving owl:imports?
+ // We should set the manager to use a service to lookup for ontologies,
+ // instead of trying on the web
+ // directly
+ OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
+
+ // FIXME Which is the other way of doing this?
+ // Maybe -> OWLOntologyManagerProperties();
+ manager.setSilentMissingImportsHandling(true);
+ // Listening for missing imports
+ manager.addMissingImportListener(new MissingImportListener() {
+ @Override
+ public void importMissing(MissingImportEvent arg0) {
+ log.warn("Missing import {} ", arg0.getImportedOntologyURI());
+ }
+ });
+ manager.addOntologyLoaderListener(new OWLOntologyLoaderListener() {
+
+ @Override
+ public void finishedLoadingOntology(LoadingFinishedEvent arg0) {
+ log.info("Finished loading {} (imported: {})",
arg0.getOntologyID(), arg0.isImported());
+ }
+
+ @Override
+ public void startedLoadingOntology(LoadingStartedEvent arg0) {
+ log.info("Started loading {} (imported: {}) ...",
arg0.getOntologyID(), arg0.isImported());
+ log.info(" ... from {}", arg0.getDocumentIRI().toString());
+ }
+ });
+ return manager;
+ }
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/RecipeInputProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/RecipeInputProvider.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/RecipeInputProvider.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/RecipeInputProvider.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,99 @@
+package org.apache.stanbol.reasoners.web.input.provider.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputProvider;
+import org.apache.stanbol.rules.base.api.NoSuchRecipeException;
+import org.apache.stanbol.rules.base.api.Recipe;
+import org.apache.stanbol.rules.base.api.RuleStore;
+import org.apache.stanbol.rules.base.api.util.RuleList;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.SWRLRule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RecipeInputProvider implements ReasoningServiceInputProvider {
+ private final Logger log =
LoggerFactory.getLogger(RecipeInputProvider.class);
+
+ private RuleStore store;
+ private String recipeId;
+
+ public RecipeInputProvider(RuleStore store,String recipeId){
+ this.store = store;
+ this.recipeId = recipeId;
+ }
+
+ @Override
+ public <T> Iterator<T> getInput(Class<T> type) throws IOException {
+ if(!type.isAssignableFrom(SWRLRule.class)){
+ log.error("Cannot adapt to this type {}", type.getCanonicalName());
+ throw new UnsupportedOperationException("Cannot adapt to " +
type.getCanonicalName());
+ }
+ List<SWRLRule> rules = null;
+ if (recipeId != null) {
+ long start = System.currentTimeMillis();
+ log.info("[start] Prepare rules for OWLApi ");
+
+ // If recipe exists, return it as a list of SWRL rules
+ rules = new ArrayList<SWRLRule>();
+ try {
+ Recipe recipe = null;
+ synchronized (store) {
+ recipe = store.getRecipe(IRI.create(recipeId));
+ }
+ log.debug("Recipe is: {}", recipe);
+ RuleList ruleList = recipe.getkReSRuleList();
+ log.debug("RuleList is: {}",ruleList);
+ for(org.apache.stanbol.rules.base.api.Rule r : ruleList ){
+ SWRLRule swrl = r.toSWRL(OWLManager.getOWLDataFactory());
+ log.debug("Prepared rule: {}",swrl);
+ rules.add(swrl);
+ }
+ } catch (NoSuchRecipeException e) {
+ log.error("Recipe {} does not exists", recipeId);
+ throw new IOException(e);
+ }
+
+ long end = System.currentTimeMillis();
+ log.info("[end] Prepared {} rules for OWLApi in {} ms.",
rules.size(), (end - start));
+
+ }
+ if(rules == null){
+ log.error("No rules have been loaded");
+ throw new IOException("No rules loaded");
+ }
+ final Iterator<SWRLRule> iterator =
Collections.unmodifiableList(rules).iterator();
+ return new Iterator<T>(){
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T next() {
+ return (T) iterator.next();
+ }
+
+ @Override
+ public void remove() {
+ log.error("Cannot remove items from this iterator. This may be
cused by an error in the program");
+ throw new UnsupportedOperationException("Cannot remove items
from this iterator");
+ }
+
+ };
+ }
+
+ @Override
+ public <T> boolean adaptTo(Class<T> type) {
+ if(type.isAssignableFrom(SWRLRule.class)) return true;
+ return false;
+ }
+
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/UrlInputProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/UrlInputProvider.java?rev=1202462&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/UrlInputProvider.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/UrlInputProvider.java
Tue Nov 15 23:06:40 2011
@@ -0,0 +1,147 @@
+package org.apache.stanbol.reasoners.web.input.provider.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputProvider;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.MissingImportEvent;
+import org.semanticweb.owlapi.model.MissingImportListener;
+import org.semanticweb.owlapi.model.OWLAxiom;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyLoaderListener;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.Statement;
+import com.hp.hpl.jena.rdf.model.StmtIterator;
+
+public class UrlInputProvider implements ReasoningServiceInputProvider {
+ private final Logger log = LoggerFactory.getLogger(UrlInputProvider.class);
+ private String url;
+
+ public UrlInputProvider(String url) {
+ this.url = url;
+ }
+
+ @Override
+ public <T> Iterator<T> getInput(Class<T> type) throws IOException {
+ if (type.isAssignableFrom(OWLAxiom.class)) {
+ // We add additional axioms
+ OWLOntology fromUrl;
+ try {
+ fromUrl =
createOWLOntologyManager().loadOntologyFromOntologyDocument(
+ IRI.create(url));
+ } catch (OWLOntologyCreationException e) {
+ throw new IOException(e);
+ }
+ Set<OWLOntology> all = fromUrl.getImportsClosure();
+ List<OWLAxiom> axiomList = new ArrayList<OWLAxiom>();
+ for(OWLOntology o : all){
+ axiomList.addAll(o.getAxioms());
+ }
+ final Iterator<OWLAxiom> iterator = axiomList.iterator();
+ return new Iterator<T>(){
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T next() {
+ return (T) iterator.next();
+ }
+
+ @Override
+ public void remove() {
+ // This iterator is read-only
+ throw new UnsupportedOperationException("Cannot remove
statements from the iterator");
+ }
+
+ };
+ } else if (type.isAssignableFrom(Statement.class)) {
+ final OntModel input = ModelFactory.createOntologyModel();
+ synchronized (url) {
+ try {
+ // FIXME: use instead:
+ // FileManager.get().loadModel
+ input.read(url);
+ } catch (Exception e) {
+ throw new IOException(e);
+ }
+ }
+ final StmtIterator iterator = input.listStatements();
+ return new Iterator<T>(){
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T next() {
+ return (T) iterator.next();
+ }
+
+ @Override
+ public void remove() {
+ // This iterator is read-only
+ throw new UnsupportedOperationException("Cannot remove
statements from the iterator");
+ }
+ };
+ } else {
+ throw new UnsupportedOperationException("This provider does not
adapt to the given type");
+ }
+ }
+
+ @Override
+ public <T> boolean adaptTo(Class<T> type) {
+ if (type.isAssignableFrom(OWLAxiom.class) ||
type.isAssignableFrom(Statement.class)) return true;
+ return false;
+ }
+
+ @SuppressWarnings("deprecation")
+ private OWLOntologyManager createOWLOntologyManager() {
+ // We isolate here the creation of the temporary manager
+ // TODO How to behave when resolving owl:imports?
+ // We should set the manager to use a service to lookup for ontologies,
+ // instead of trying on the web
+ // directly
+ OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
+
+ // FIXME Which is the other way of doing this?
+ // Maybe -> OWLOntologyManagerProperties();
+ manager.setSilentMissingImportsHandling(true);
+ // Listening for missing imports
+ manager.addMissingImportListener(new MissingImportListener() {
+ @Override
+ public void importMissing(MissingImportEvent arg0) {
+ log.warn("Missing import {} ", arg0.getImportedOntologyURI());
+ }
+ });
+ manager.addOntologyLoaderListener(new OWLOntologyLoaderListener(){
+
+ @Override
+ public void finishedLoadingOntology(LoadingFinishedEvent arg0) {
+ log.info("Finished loading {} (imported:
{})",arg0.getOntologyID(),arg0.isImported());
+ }
+
+ @Override
+ public void startedLoadingOntology(LoadingStartedEvent arg0) {
+ log.info("Started loading {} (imported: {})
...",arg0.getOntologyID(),arg0.isImported());
+ log.info(" ... from {}",arg0.getDocumentIRI().toString());
+ }});
+ return manager;
+ }
+}
Modified:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/JobsResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/JobsResource.java?rev=1202462&r1=1202461&r2=1202462&view=diff
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/JobsResource.java
(original)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/JobsResource.java
Tue Nov 15 23:06:40 2011
@@ -1,18 +1,24 @@
package org.apache.stanbol.reasoners.web.resources;
import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import org.apache.stanbol.commons.web.base.ContextHelper;
import org.apache.stanbol.commons.web.base.resource.BaseStanbolResource;
import org.apache.stanbol.reasoners.jobs.api.JobManager;
+import org.apache.stanbol.reasoners.web.utils.ReasoningServiceResult;
+import org.apache.stanbol.reasoners.web.utils.ResponseTaskBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -22,18 +28,20 @@ import org.slf4j.LoggerFactory;
* @author mac
*
*/
-@Path("/jobs")
+@Path("/reasoners/jobs")
public class JobsResource extends BaseStanbolResource {
private Logger log = LoggerFactory.getLogger(getClass());
private ServletContext context;
+ private HttpHeaders headers;
- public JobsResource(@Context ServletContext servletContext) {
+ public JobsResource(@Context ServletContext servletContext,@Context
HttpHeaders headers) {
this.context = servletContext;
+ this.headers = headers;
}
@GET
- @Path("ping")
- public Response get(@QueryParam("id") String id) {
+ @Path("ping/{jid}")
+ public Response get(@PathParam("jid") String id) {
log.info("Pinging job {}", id);
// No id
@@ -52,7 +60,26 @@ public class JobsResource extends BaseSt
// NOTE: In this case the job still remains in the
JobManager list
return Response.ok("Job have been canceled!").build();
}else{
- return Response.ok("Job is done!").build();
+ Object o;
+ try {
+ o = f.get();
+ if(o instanceof ReasoningServiceResult<?>){
+ ReasoningServiceResult<?> result =
(ReasoningServiceResult<?>) f.get();
+ return new
ResponseTaskBuilder(uriInfo,context,headers).build(result);
+ }else if(o instanceof String){
+ // FIXME We keep this for the moment, must remove
later on
+ return Response.ok("Test Job is done!\n " +
(String) o).build();
+ }else{
+ log.error("Unsupported job result type:
{}",o.getClass());
+ throw new
WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } catch (InterruptedException e) {
+ log.error("Error: ",e);
+ throw new
WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ } catch (ExecutionException e) {
+ log.error("Error: ",e);
+ throw new
WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
}
}else{
// FIXME Change the HTTP Status code here!
@@ -97,7 +124,7 @@ public class JobsResource extends BaseSt
* @return
*/
private JobManager getJobManager() {
- log.debug("(getServicesManager()) ");
+ log.debug("(getJobManager()) ");
return (JobManager)
ContextHelper.getServiceFromContext(JobManager.class, this.context);
}
}