Author: rwesten
Date: Sat May 26 15:29:59 2012
New Revision: 1342911

URL: http://svn.apache.org/viewvc?rev=1342911&view=rev
Log:
fixes STANBOL-634, STANBOL-635, STANBOL-636: All related to improved 
ErrorHandling in the case of Exception during 
EnhancementEngine#computeEnhancement(..) methods calls

* EventJobManager now correctly sets status of the Chain to failed if a 
requires Engine fails
* EvnetJobManager now correctly sets the ErrorMessage for ChainExceptions
* Enhancer Jersey now reports details on why Enhancement requests failed in the 
Web UI
* KeywordlinkingEngine now throws EngineExceptions if the configured 
ReferencedSite is not available

Modified:
    
incubator/stanbol/trunk/enhancer/engines/keywordextraction/src/main/java/org/apache/stanbol/enhancer/engines/keywordextraction/linking/EntityLinker.java
    
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java
    
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/ContentItemResource.java
    
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJob.java
    
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java

Modified: 
incubator/stanbol/trunk/enhancer/engines/keywordextraction/src/main/java/org/apache/stanbol/enhancer/engines/keywordextraction/linking/EntityLinker.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/engines/keywordextraction/src/main/java/org/apache/stanbol/enhancer/engines/keywordextraction/linking/EntityLinker.java?rev=1342911&r1=1342910&r2=1342911&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/enhancer/engines/keywordextraction/src/main/java/org/apache/stanbol/enhancer/engines/keywordextraction/linking/EntityLinker.java
 (original)
+++ 
incubator/stanbol/trunk/enhancer/engines/keywordextraction/src/main/java/org/apache/stanbol/enhancer/engines/keywordextraction/linking/EntityLinker.java
 Sat May 26 15:29:59 2012
@@ -32,6 +32,7 @@ import org.apache.stanbol.commons.opennl
 import 
org.apache.stanbol.enhancer.engines.keywordextraction.impl.ProcessingState;
 import 
org.apache.stanbol.enhancer.engines.keywordextraction.linking.EntityLinkerConfig.RedirectProcessingMode;
 import 
org.apache.stanbol.enhancer.engines.keywordextraction.linking.Suggestion.MATCH;
+import org.apache.stanbol.enhancer.servicesapi.EngineException;
 import org.apache.stanbol.entityhub.servicesapi.defaults.NamespaceEnum;
 import org.apache.stanbol.entityhub.servicesapi.model.Reference;
 import org.apache.stanbol.entityhub.servicesapi.model.Representation;
@@ -82,7 +83,7 @@ public class EntityLinker {
     /**
      * Steps over the sentences, chunks, tokens of the {@link #sentences}
      */
-    public void process(){
+    public void process() throws EngineException {
         while(state.next()) {
             if(isProcessableToken(state.getToken())){
                 List<String> searchStrings = new 
ArrayList<String>(config.getMaxSearchTokens());
@@ -269,10 +270,14 @@ public class EntityLinker {
      * @return The sorted list with the suggestions.
      * If there are no suggestions an empty list will be returned.
      */
-    private List<Suggestion> lookupEntities(List<String> searchStrings) {
-        Collection<? extends Representation> results = entitySearcher.lookup(
-            config.getNameField(),config.getSelectedFields(),
+    private List<Suggestion> lookupEntities(List<String> searchStrings) throws 
EngineException {
+        Collection<? extends Representation> results;
+        try {
+            results = 
entitySearcher.lookup(config.getNameField(),config.getSelectedFields(),
             searchStrings, 
state.getSentence().getLanguage(),config.getDefaultLanguage());
+        } catch (RuntimeException e) {
+            throw new EngineException(e.getMessage(),e);
+        }
         List<Suggestion> suggestions = new ArrayList<Suggestion>();
         for(Representation result : results){ 
             Suggestion match = matchLabels(result);

Modified: 
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java?rev=1342911&r1=1342910&r2=1342911&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java
 (original)
+++ 
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java
 Sat May 26 15:29:59 2012
@@ -121,9 +121,15 @@ public abstract class AbstractEnhancerUi
         if(!buildAjaxview){ //rewrite to a normal EnhancementRequest
             return enhanceFromData(ci, null, false, null, false, null, false, 
null, headers);
         } else { //enhance and build the AJAX response
-            enhance(ci);
+            EnhancementException enhancementException;
+            try {
+                enhance(ci);
+                enhancementException = null;
+            } catch (EnhancementException e){
+                enhancementException = e;
+            }
             ContentItemResource contentItemResource = new 
ContentItemResource(null, ci, uriInfo, "",
-                    tcManager, serializer, servletContext);
+                    tcManager, serializer, servletContext, 
enhancementException);
             contentItemResource.setRdfSerializationFormat(format);
             Viewable ajaxView = new Viewable("/ajax/contentitem", 
contentItemResource);
             ResponseBuilder rb = Response.ok(ajaxView);

Modified: 
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/ContentItemResource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/ContentItemResource.java?rev=1342911&r1=1342910&r2=1342911&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/ContentItemResource.java
 (original)
+++ 
incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/ContentItemResource.java
 Sat May 26 15:29:59 2012
@@ -37,6 +37,8 @@ import static org.apache.stanbol.enhance
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.text.DateFormat;
@@ -87,6 +89,7 @@ import org.apache.stanbol.commons.indexe
 import org.apache.stanbol.commons.web.base.resource.BaseStanbolResource;
 import org.apache.stanbol.enhancer.servicesapi.Blob;
 import org.apache.stanbol.enhancer.servicesapi.ContentItem;
+import org.apache.stanbol.enhancer.servicesapi.EnhancementException;
 import org.apache.stanbol.enhancer.servicesapi.NoSuchPartException;
 import org.apache.stanbol.enhancer.servicesapi.helper.ContentItemHelper;
 import org.apache.stanbol.enhancer.servicesapi.helper.EnhancementEngineHelper;
@@ -145,6 +148,8 @@ public class ContentItemResource extends
     private ChainExecution chainExecution;
 
     private 
ArrayList<org.apache.stanbol.enhancer.jersey.resource.ContentItemResource.Execution>
 engineExecutions;
+
+    private EnhancementException enhancementException;
     
     public ContentItemResource(String localId,
                                ContentItem ci,
@@ -152,14 +157,15 @@ public class ContentItemResource extends
                                String storePath,
                                TcManager tcManager,
                                Serializer serializer,
-                               ServletContext servletContext) throws 
IOException {
+                               ServletContext servletContext,
+                               EnhancementException enhancementException) 
throws IOException {
         this.contentItem = ci;
         this.localId = localId;
         this.uriInfo = uriInfo;
         this.tcManager = tcManager;
         this.serializer = serializer;
         this.servletContext = servletContext;
-
+        this.enhancementException = enhancementException;
         if (localId != null) {
             URI rawURI = 
uriInfo.getBaseUriBuilder().path(storePath).path("raw").path(localId).build();
             Entry<UriRef,Blob> plainTextContentPart = 
ContentItemHelper.getBlob(contentItem, Collections.singleton("text/plain"));
@@ -178,7 +184,9 @@ public class ContentItemResource extends
         defaultThumbnails.put(SKOS_CONCEPT, getStaticRootUrl() + 
"/home/images/black_gear_48.png");
         defaultThumbnails.put(null, getStaticRootUrl() + 
"/home/images/unknown_48.png");
         long start = System.currentTimeMillis();
-        initOccurrences();
+        if(enhancementException == null){
+            initOccurrences();
+        }
         //init ExecutionMetadata
         try {
             executionMetadata = ci.getPart(ExecutionMetadata.CHAIN_EXECUTION, 
MGraph.class);
@@ -203,9 +211,15 @@ public class ContentItemResource extends
     }
 
     public String getRdfMetadata(String mediatype) throws 
UnsupportedEncodingException {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        serializer.serialize(out, contentItem.getMetadata(), mediatype);
-        return out.toString("utf-8");
+        if(enhancementException == null){
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            serializer.serialize(out, contentItem.getMetadata(), mediatype);
+            return out.toString("utf-8");
+        } else {//in case of an exception print the stacktrace
+            StringWriter writer = new StringWriter();
+            enhancementException.printStackTrace(new PrintWriter(writer));
+            return writer.toString();
+        }
     }
 
     public String getRdfMetadata() throws UnsupportedEncodingException {

Modified: 
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJob.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJob.java?rev=1342911&r1=1342910&r2=1342911&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJob.java
 (original)
+++ 
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJob.java
 Sat May 26 15:29:59 2012
@@ -610,7 +610,7 @@ public class EnhancementJob {
             log.debug(">> w: {}: 
{}","setFailed",ExecutionPlanHelper.getEngine(executionPlan, executionNode));
             StringBuilder message = new StringBuilder();
             message.append(String.format("Unable to process ContentItem '%s' 
with " +
-                       "Enhancement Engine %s because the engine ", 
+                       "Enhancement Engine '%s' because the engine ", 
                        contentItem.getUri(), engineName));
             if(engine == null){
                 message.append("is currently not active");
@@ -629,9 +629,9 @@ public class EnhancementJob {
             if(!optional && !isExecutionFailed(executionMetadata, 
chainExecutionNode)){
                 //set also the whole chain to faild!
                 String chainMessage = String.format(
-                    "Enhancement Chain failed because of required Engine '%s' 
failed" +
+                    "Enhancement Chain failed because of required Engine '%s' 
failed " +
                     "with Message: %s", engineName, message);
-                setExecutionFaild(executionMetadata, execution, chainMessage);
+                setExecutionFaild(executionMetadata, chainExecutionNode, 
chainMessage);
                 error = exception; //this member stores the exception to allow
                 //re-throwing by the EnhancementJobManager.
             }
@@ -683,7 +683,7 @@ public class EnhancementJob {
     public String getErrorMessage() {
         readLock.lock();
         try {
-            return getString(executionMetadata, executionPlanNode, 
ExecutionMetadata.STATUS_MESSAGE);
+            return getString(executionMetadata, chainExecutionNode, 
ExecutionMetadata.STATUS_MESSAGE);
         } finally {
             readLock.unlock();
         }

Modified: 
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java?rev=1342911&r1=1342910&r2=1342911&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
 (original)
+++ 
incubator/stanbol/trunk/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
 Sat May 26 15:29:59 2012
@@ -241,6 +241,8 @@ public class EnhancementJobHandler imple
                     job.setCompleted(execution);
                 } catch (EngineException e) {
                     job.setFailed(execution, engine, e);
+                } catch (RuntimeException e) {
+                    job.setFailed(execution, engine, e);
                 }
             } else { //CANNOT_ENHANCE
                 if(exception != null){


Reply via email to