Modified: stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java (original) +++ stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java Tue Oct 30 22:46:38 2012 @@ -17,10 +17,11 @@ package org.apache.stanbol.enhancer.servicesapi; import java.io.InputStream; +import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; +import org.apache.clerezza.rdf.core.MGraph; import org.apache.clerezza.rdf.core.UriRef; -import org.apache.clerezza.rdf.core.access.LockableMGraph; /** * A unit of content that Stanbol Enhancer can enhance. @@ -51,12 +52,13 @@ public interface ContentItem { /** * Read/write lock used to synchronise access to the {@link #getMetadata() * metadata} and the content parts of this content item.<p> - * The lock used by the {@link LockableMGraph#getLock()} MUST BE the same - * as the lock returned by this Instance. This is to avoid deadlocks when - * using a lock while iterating over the {@link #getMetadata() metadata} and - * simultaneously accessing the content parts. In other words - * calling <code> contentItem.getLock() == contentItem.getMetadata().getLock()</code> - * MUST BE <code>true</code> + * The lock needs to be used for reading and writing information from/to + * the ContentItem. In case the {@link MGraph} retured by {@link #getMetadata()} + * is an instanceof used by the {@link org.apache.clerezza.rdf.core.access.LockableMGraph} + * the {@link Lock} returned by this mehtod is the same as used by the + * metadata.This is to avoid deadlocks when using a lock while iterating over + * the {@link #getMetadata() metadata} and simultaneously accessing the content + * parts. * * @return the lock used for the content parts and the {@link LockableMGraph} * containing the metadata of this content item. @@ -64,7 +66,7 @@ public interface ContentItem { ReadWriteLock getLock(); /** Optional metadata */ - LockableMGraph getMetadata(); + MGraph getMetadata(); /** * The main content of this content item
Modified: stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java (original) +++ stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java Tue Oct 30 22:46:38 2012 @@ -23,7 +23,6 @@ import java.io.OutputStream; import org.apache.clerezza.rdf.core.MGraph; import org.apache.clerezza.rdf.core.Triple; import org.apache.clerezza.rdf.core.UriRef; -import org.apache.stanbol.enhancer.servicesapi.helper.ContentItemHelper; /** * OSGI service to be used to create {@link ContentItem}s and Blobs. @@ -54,7 +53,7 @@ public interface ContentItemFactory { * Note the only a generated ID will be added to the passed prefix. So passed * values should typically end with an separator char (e.g. '/', '#', ':'). * Implementors might want to use - * {@link ContentItemHelper#streamDigest(InputStream, java.io.OutputStream, String) + * {@link org.apache.stanbol.enhancer.servicesapi.helper.ContentItemHelper#streamDigest(InputStream, java.io.OutputStream, String) * for generating an ID while reading the data from the ContentSource. * @param source The content source * @return the {@link ContentItem} with a generated id and the passed Modified: stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java (original) +++ stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java Tue Oct 30 22:46:38 2012 @@ -57,9 +57,13 @@ import org.apache.stanbol.enhancer.servi import org.apache.stanbol.enhancer.servicesapi.ServiceProperties; import org.apache.stanbol.enhancer.servicesapi.impl.EnginesTracker; import org.apache.stanbol.enhancer.servicesapi.rdf.ExecutionPlan; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public final class ExecutionPlanHelper { + private final static Logger log = LoggerFactory.getLogger(ExecutionPlanHelper.class); + private static LiteralFactory lf = LiteralFactory.getInstance(); private ExecutionPlanHelper(){/* Do not allow instances of utility classes*/} @@ -184,7 +188,14 @@ public final class ExecutionPlanHelper { current = new HashSet<NonLiteral>(); prevOrder = order; } - current.add(writeExecutionNode(ep, epNode, name, optional.contains(name), prev)); + try { + current.add(writeExecutionNode(ep, epNode, name, optional.contains(name), prev)); + } catch (RuntimeException e){ + //add the engine and class to ease debugging in such cases + log.error("Exception while writing ExecutionNode for Enhancement Eninge: " + + engine +"(class: "+engine.getClass()+")",e); + throw e; //rethrow it + } } return ep.getGraph(); } Modified: stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/resources/fise.owl URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/resources/fise.owl?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/resources/fise.owl (original) +++ stanbol/branches/disambiguation-engine/generic/servicesapi/src/main/resources/fise.owl Tue Oct 30 22:46:38 2012 @@ -1,4 +1,20 @@ <?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#" Propchange: stanbol/branches/disambiguation-engine/generic/test/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Oct 30 22:46:38 2012 @@ -0,0 +1,2 @@ +/incubator/stanbol/trunk/enhancer/generic/test:1377975-1388016 +/stanbol/trunk/enhancer/generic/test:1388017-1403643 Modified: stanbol/branches/disambiguation-engine/generic/test/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/generic/test/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/generic/test/pom.xml (original) +++ stanbol/branches/disambiguation-engine/generic/test/pom.xml Tue Oct 30 22:46:38 2012 @@ -23,13 +23,13 @@ <parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.parent</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <relativePath>../../parent</relativePath> </parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.test</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Apache Stanbol Enhancer Test framework</name> @@ -40,12 +40,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/test/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/test/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/test/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/test/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <build> @@ -74,7 +74,7 @@ <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> </dependency> <dependency> Modified: stanbol/branches/disambiguation-engine/generic/test/src/license/THIRD-PARTY.properties URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/generic/test/src/license/THIRD-PARTY.properties?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/generic/test/src/license/THIRD-PARTY.properties (original) +++ stanbol/branches/disambiguation-engine/generic/test/src/license/THIRD-PARTY.properties Tue Oct 30 22:46:38 2012 @@ -18,7 +18,7 @@ # Please fill the missing licenses for dependencies : # # -#Mon Apr 09 10:44:04 CEST 2012 -javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0 +#Sun Oct 07 16:00:11 CEST 2012 +javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0 org.osgi--org.osgi.compendium--4.1.0=Apache Software License, Version 2.0 org.osgi--org.osgi.core--4.1.0=Apache Software License, Version 2.0 Modified: stanbol/branches/disambiguation-engine/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java (original) +++ stanbol/branches/disambiguation-engine/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java Tue Oct 30 22:46:38 2012 @@ -1,3 +1,19 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ package org.apache.stanbol.enhancer.test.helper; import static org.apache.stanbol.enhancer.servicesapi.rdf.OntologicalClasses.DBPEDIA_ORGANISATION; @@ -319,10 +335,16 @@ public class EnhancementStructureHelper // check if the relation to the text annotation is set assertTrue(relationToTextAnnotationIterator.hasNext()); while (relationToTextAnnotationIterator.hasNext()) { - // test if the referred annotations are text annotations + // test if the referred annotations are text annotations or + // the referenced annotations is a fise:EntityAnnotation AND also a + // dc:requires link is defined (STANBOL-766) UriRef referredTextAnnotation = (UriRef) relationToTextAnnotationIterator.next().getObject(); - assertTrue(enhancements.filter(referredTextAnnotation, RDF_TYPE, - ENHANCER_TEXTANNOTATION).hasNext()); + assertTrue("fise:EntityAnnotations MUST BE dc:related to a fise:TextAnnotation OR dc:requires and dc:related to the same fise:EntityAnnotation", + enhancements.filter(referredTextAnnotation, RDF_TYPE, + ENHANCER_TEXTANNOTATION).hasNext() || ( + enhancements.filter(referredTextAnnotation, RDF_TYPE, + ENHANCER_ENTITYANNOTATION).hasNext() && + enhancements.filter(entityAnnotation, Properties.DC_REQUIRES, referredTextAnnotation).hasNext())); } // test if an entity is referred @@ -420,7 +442,8 @@ public class EnhancementStructureHelper XSD.dateTime.equals(((TypedLiteral)createdResource).getDataType())); Date creationDate = LiteralFactory.getInstance().createObject(Date.class, (TypedLiteral)createdResource); assertNotNull("Unable to convert "+createdResource+" to a Java Date object",creationDate); - assertTrue("CreationDate MUST NOT be in the Future",new Date().after(creationDate)); + Date now = new Date(); + assertTrue("CreationDate MUST NOT be in the Future",now.after(creationDate) || now.equals(creationDate)); assertFalse("Only a single createnDate MUST BE present", createdIterator.hasNext()); //validate optional modification date if present Iterator<Triple> modDateIterator = enhancements.filter(enhancement, DCTERMS.modified, null); Modified: stanbol/branches/disambiguation-engine/jersey/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/jersey/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/jersey/pom.xml (original) +++ stanbol/branches/disambiguation-engine/jersey/pom.xml Tue Oct 30 22:46:38 2012 @@ -22,13 +22,13 @@ <parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.parent</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <relativePath>../parent/pom.xml</relativePath> </parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.jersey</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>bundle</packaging> <name>Apache Stanbol Enhancer Web (Jersey)</name> @@ -36,12 +36,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jersey/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jersey/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jersey/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jersey/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <build> @@ -91,7 +91,7 @@ <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.stanbol</groupId> @@ -202,7 +202,7 @@ <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.core</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <scope>test</scope> </dependency> <dependency> Propchange: stanbol/branches/disambiguation-engine/jobmanager/event/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Oct 30 22:46:38 2012 @@ -0,0 +1,2 @@ +/incubator/stanbol/trunk/enhancer/jobmanager/event:1377975-1388016 +/stanbol/trunk/enhancer/jobmanager/event:1388017-1403643 Modified: stanbol/branches/disambiguation-engine/jobmanager/event/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/jobmanager/event/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/jobmanager/event/pom.xml (original) +++ stanbol/branches/disambiguation-engine/jobmanager/event/pom.xml Tue Oct 30 22:46:38 2012 @@ -23,13 +23,13 @@ <parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.parent</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <relativePath>../../parent</relativePath> </parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.eventjobmanager</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>bundle</packaging> <name>Apache Stanbol Enhancer Event Jobmanager</name> @@ -43,12 +43,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/event/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/event/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/event/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/event/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <build> @@ -59,6 +59,10 @@ <extensions>true</extensions> <configuration> <instructions> + <Import-Package> + org.apache.stanbol.enhancer.servicesapi; provide:=true; version="[0.9.0,0.11)", + * + </Import-Package> <Export-Package> org.apache.stanbol.enhancer.jobmanager.event;version=${project.version} </Export-Package> Modified: stanbol/branches/disambiguation-engine/jobmanager/event/src/license/THIRD-PARTY.properties URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/jobmanager/event/src/license/THIRD-PARTY.properties?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/jobmanager/event/src/license/THIRD-PARTY.properties (original) +++ stanbol/branches/disambiguation-engine/jobmanager/event/src/license/THIRD-PARTY.properties Tue Oct 30 22:46:38 2012 @@ -1,17 +1,24 @@ # Generated by org.codehaus.mojo.license.AddThirdPartyMojo #------------------------------------------------------------------------------- # Already used licenses in project : -# - Apache License -# - Common Development and Distribution License (CDDL) v1.0 -# - Common Public License Version 1.0 +# - Apache Software License +# - Apache Software License, Version 2.0 +# - BSD License +# - Common Development And Distribution License (CDDL), Version 1.0 +# - Common Development And Distribution License (CDDL), Version 1.1 +# - Common Public License, Version 1.0 +# - Eclipse Public License, Version 1.0 +# - GNU General Public License (GPL), Version 2 with classpath exception +# - GNU Lesser General Public License (LGPL) +# - GNU Lesser General Public License (LGPL), Version 2.1 # - ICU License # - MIT License -# - The Apache Software License, Version 2.0 +# - Public Domain License #------------------------------------------------------------------------------- # Please fill the missing licenses for dependencies : # # -#Wed Feb 15 19:01:55 CET 2012 -javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0 +#Sun Oct 07 16:06:06 CEST 2012 +javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0 Modified: stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java (original) +++ stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java Tue Oct 30 22:46:38 2012 @@ -25,13 +25,11 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Dictionary; -import java.util.HashMap; import java.util.Hashtable; import java.util.LinkedHashMap; -import java.util.LinkedHashSet; import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -40,13 +38,14 @@ import org.apache.clerezza.rdf.core.NonL import org.apache.stanbol.enhancer.servicesapi.EngineException; import org.apache.stanbol.enhancer.servicesapi.EnhancementEngine; import org.apache.stanbol.enhancer.servicesapi.EnhancementEngineManager; -import org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; import org.osgi.service.event.EventHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.ibm.icu.lang.UCharacter.SentenceBreak; + public class EnhancementJobHandler implements EventHandler { private EnhancementEngineManager engineManager; @@ -69,7 +68,7 @@ public class EnhancementJobHandler imple * contentItems and the values are the objects used to interrupt the * requesting thread as soon as the enhancement process has finished. */ - private Map<EnhancementJob,Object> processingJobs; + private Map<EnhancementJob,EnhancementJobObserver> processingJobs; private final ReadWriteLock processingLock = new ReentrantReadWriteLock(); private Thread observerDaemon; @@ -85,11 +84,11 @@ public class EnhancementJobHandler imple this.engineManager = engineManager; processingLock.writeLock().lock(); try { - processingJobs = new LinkedHashMap<EnhancementJob,Object>(); + processingJobs = new LinkedHashMap<EnhancementJob,EnhancementJobObserver>(); } finally{ processingLock.writeLock().unlock(); } - observerDaemon = new Thread(new EnhancementJobObserver()); + observerDaemon = new Thread(new EnhancementJobObserverDaemon()); observerDaemon.setName("Event Job Manager Observer Daemon"); observerDaemon.setDaemon(true); observerDaemon.start(); @@ -134,19 +133,19 @@ public class EnhancementJobHandler imple * @return An object that will get {@link Object#notifyAll()} as soon as * {@link EnhancementJob#isFinished()} or this instance is deactivated */ - public Object register(EnhancementJob enhancementJob){ + public EnhancementJobObserver register(EnhancementJob enhancementJob){ final boolean init; - Object o; + EnhancementJobObserver observer; processingLock.writeLock().lock(); try { if(enhancementJob == null || processingJobs == null){ return null; } - o = processingJobs.get(enhancementJob); - if(o == null){ - o = new Object(); - logJobInfo(enhancementJob, "Add EnhancementJob:"); - processingJobs.put(enhancementJob, o); + observer = processingJobs.get(enhancementJob); + if(observer == null){ + observer = new EnhancementJobObserver(enhancementJob); + logJobInfo(log, enhancementJob, "Add EnhancementJob:",false); + processingJobs.put(enhancementJob, observer); init = true; } else { init = false; @@ -155,6 +154,7 @@ public class EnhancementJobHandler imple processingLock.writeLock().unlock(); } if(init){ + observer.acquire(); enhancementJob.startProcessing(); log.debug("++ w: {}","init execution"); enhancementJob.getLock().writeLock().lock(); @@ -166,7 +166,7 @@ public class EnhancementJobHandler imple enhancementJob.getLock().writeLock().unlock(); } } - return o; + return observer; } @Override @@ -283,18 +283,21 @@ public class EnhancementJobHandler imple */ private void finish(EnhancementJob job){ processingLock.writeLock().lock(); - Object o; + EnhancementJobObserver observer; try { - o = processingJobs.remove(job); + observer = processingJobs.remove(job); } finally { processingLock.writeLock().unlock(); } - if(o != null) { - synchronized (o) { - logJobInfo(job, "Finished EnhancementJob:"); + if(observer != null) { + try { + logJobInfo(log, job, "Finished EnhancementJob:",false); log.debug("++ n: finished processing ContentItem {} with Chain {}", job.getContentItem().getUri(),job.getChainName()); - o.notifyAll(); + } finally { + //release the semaphore to send signal to the EventJobManager waiting + //for the results + observer.release(); } } else { log.warn("EnhancementJob for ContentItem {} is not " + @@ -335,15 +338,16 @@ public class EnhancementJobHandler imple * Logs basic infos about the Job as INFO and detailed infos as DEBUG * @param job */ - protected void logJobInfo(EnhancementJob job, String header) { + protected static void logJobInfo(Logger log, EnhancementJob job, String header, boolean logExecutions) { if(header != null){ log.info(header); } - log.info(" state: {}",job.isFinished()?"finished":job.isFailed()?"failed":"processing"); - log.info(" chain: {}",job.getChainName()); + log.info(" finished: {}",job.isFinished()); + log.info(" state: {}",job.isFailed()?"failed":"processing"); + log.info(" chain: {}",job.getChainName()); log.info(" content-item: {}", job.getContentItem().getUri()); - log.debug(" executions:"); - if(log.isDebugEnabled()){ + if(logExecutions){ + log.info(" executions:"); for(NonLiteral completedExec : job.getCompleted()){ log.info(" - {} completed",getEngine(job.getExecutionMetadata(), job.getExecutionNode(completedExec))); @@ -354,16 +358,87 @@ public class EnhancementJobHandler imple } } } + public class EnhancementJobObserver{ + + private static final int MIN_WAIT_TIME = 500; + private final EnhancementJob enhancementJob; + private final Semaphore semaphore; + + private EnhancementJobObserver(EnhancementJob job){ + if(job == null){ + throw new IllegalArgumentException("The parsed EnhancementJob MUST NOT be NULL!"); + } + this.enhancementJob = job; + this.semaphore = new Semaphore(1); + } + + protected void acquire() { + try { + semaphore.acquire(); + } catch (InterruptedException e) { + log.warn("Interrupted while acquireing Semaphore for EnhancementJob " + + enhancementJob + "!",e); + } + } + + protected void release() { + semaphore.release(); + } + + public boolean hasCompleted() { + enhancementJob.getLock().readLock().lock(); + try { + return enhancementJob.isFinished(); + } finally { + enhancementJob.getLock().readLock().unlock(); + } + } + + public void waitForCompletion(int maxEnhancementJobWaitTime) { + if(semaphore.availablePermits() < 1){ + // The only permit is taken by the EnhancementJobHander + try { + semaphore.tryAcquire(1, + Math.max(MIN_WAIT_TIME, maxEnhancementJobWaitTime),TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + //interupted + } + } else if(!hasCompleted()){ + int wait = Math.max(100, maxEnhancementJobWaitTime/10); + log.warn("Unexpected permit available for Semaphore of " + + "EnhancementJob of ContentItem {}. Fallback to wait({})" + + "for detecting if Job has finished. While the fallback " + + "should ensure correct Enhancement results this indicates a " + + "Bug in the EventHobManager. Please feel free to report " + + "This on [email protected] or the Apache Stanbol " + + "Issue Tracker.",enhancementJob.getContentItem().getUri(),wait); + try { + Thread.currentThread().wait(wait); + } catch (InterruptedException e) { + //interupted + } + }// else completed + } + + } + + /** * Currently only used to debug the number of currently registered * Enhancements Jobs (if there are some) * @author Rupert Westenthaler */ - private class EnhancementJobObserver implements Runnable { + private class EnhancementJobObserverDaemon implements Runnable { + /** + * The logger of the Observer. Can be used to configure Loglevel specificly + * + */ + private Logger observerLog = LoggerFactory.getLogger(EnhancementJobObserverDaemon.class); + @Override public void run() { - log.debug(" ... init EnhancementJobObserver"); + observerLog.debug(" ... init EnhancementJobObserver"); while(processingJobs != null){ try { Thread.sleep(10000); @@ -382,13 +457,13 @@ public class EnhancementJobHandler imple readLock.unlock(); } if(!jobs.isEmpty()){ - log.info(" -- {} active Enhancement Jobs",jobs.size()); - if(log.isDebugEnabled()){ + observerLog.info(" -- {} active Enhancement Jobs",jobs.size()); + if(observerLog.isDebugEnabled()){ for(EnhancementJob job : jobs){ Lock jobLock = job.getLock().readLock(); jobLock.lock(); try { - logJobInfo(job,null); + logJobInfo(observerLog,job,null,true); } finally { jobLock.unlock(); } Modified: stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java (original) +++ stanbol/branches/disambiguation-engine/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java Tue Oct 30 22:46:38 2012 @@ -21,6 +21,7 @@ import static org.apache.stanbol.enhance import java.util.Dictionary; import java.util.Hashtable; import java.util.List; +import java.util.concurrent.Semaphore; import org.apache.clerezza.rdf.core.Graph; import org.apache.felix.scr.annotations.Activate; @@ -30,6 +31,7 @@ import org.apache.felix.scr.annotations. import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.Service; +import org.apache.stanbol.enhancer.jobmanager.event.impl.EnhancementJobHandler.EnhancementJobObserver; import org.apache.stanbol.enhancer.servicesapi.Chain; import org.apache.stanbol.enhancer.servicesapi.ChainException; import org.apache.stanbol.enhancer.servicesapi.ChainManager; @@ -58,6 +60,8 @@ public class EventJobManagerImpl impleme private final Logger log = LoggerFactory.getLogger(EventJobManagerImpl.class); public static final int DEFAULT_SERVICE_RANKING = 0; + + private static final int MAX_ENHANCEMENT_JOB_WAIT_TIME = 10*1000; @Reference protected ChainManager chainManager; @@ -127,16 +131,10 @@ public class EventJobManagerImpl impleme EnhancementJob job = new EnhancementJob(ci, chain.getName(), chain.getExecutionPlan(),isDefaultChain); //start the execution //wait for the results - Object object = jobHandler.register(job); - while(!job.isFinished() & jobHandler != null){ - synchronized (object) { - try { - object.wait(); - } catch (InterruptedException e) { - log.debug("Interupped for EnhancementJob if ContentItem {}", - job.getContentItem().getUri()); - } - } + EnhancementJobObserver observer = jobHandler.register(job); + //TODO: allow configuring a max completion time (e.g. 1min) + while(!observer.hasCompleted() & jobHandler != null){ + observer.waitForCompletion(MAX_ENHANCEMENT_JOB_WAIT_TIME); } log.info("{} EnhancementJob for ContentItem {} after {}ms", new Object[]{ job.isFailed() ? "Failed" : "Finished", @@ -148,7 +146,12 @@ public class EventJobManagerImpl impleme // RESTful interface of the Enhancer! //ci.getMetadata().addAll(job.getExecutionMetadata()); if(job.isFailed()){ - throw new ChainException(job.getErrorMessage(), job.getError()); + Exception e = job.getError(); + if (e instanceof SecurityException) { + throw (SecurityException)e; + } else { + throw new ChainException(job.getErrorMessage(), e); + } } if(!job.isFinished()){ throw new ChainException("EnhancementJobManager was deactivated while" + Modified: stanbol/branches/disambiguation-engine/jobmanager/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/jobmanager/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/jobmanager/pom.xml (original) +++ stanbol/branches/disambiguation-engine/jobmanager/pom.xml Tue Oct 30 22:46:38 2012 @@ -22,7 +22,7 @@ <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.jobmanager.reactor</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Apache Stanbol Enhancer JobManager Reactor</name> @@ -33,12 +33,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <modules> Modified: stanbol/branches/disambiguation-engine/jobmanager/weightedjobmanager/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/jobmanager/weightedjobmanager/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/jobmanager/weightedjobmanager/pom.xml (original) +++ stanbol/branches/disambiguation-engine/jobmanager/weightedjobmanager/pom.xml Tue Oct 30 22:46:38 2012 @@ -23,13 +23,13 @@ <parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.parent</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <relativePath>../../parent</relativePath> </parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.weightedjobmanager</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>bundle</packaging> <name>Apache Stanbol Enhancer Weighted Job Manager</name> @@ -42,12 +42,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <build> Modified: stanbol/branches/disambiguation-engine/ldpath/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/ldpath/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/ldpath/pom.xml (original) +++ stanbol/branches/disambiguation-engine/ldpath/pom.xml Tue Oct 30 22:46:38 2012 @@ -22,13 +22,13 @@ <parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.parent</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <relativePath>../parent/pom.xml</relativePath> </parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.ldpath</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>bundle</packaging> <name>Apache Stanbol Enhancer LDPath</name> @@ -36,12 +36,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/ldpath/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/ldpath/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/ldpath/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/ldpath/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <build> @@ -92,7 +92,7 @@ <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.stanbol</groupId> @@ -130,7 +130,7 @@ <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.core</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <scope>test</scope> </dependency> <dependency> Modified: stanbol/branches/disambiguation-engine/parent/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/parent/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/parent/pom.xml (original) +++ stanbol/branches/disambiguation-engine/parent/pom.xml Tue Oct 30 22:46:38 2012 @@ -22,13 +22,13 @@ <parent> <groupId>org.apache.stanbol</groupId> <artifactId>stanbol-parent</artifactId> - <version>2-incubating-SNAPSHOT</version> + <version>2-SNAPSHOT</version> <relativePath>../../parent</relativePath> </parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.parent</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Apache Stanbol Enhancer Parent POM</name> @@ -38,12 +38,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/parent/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/parent/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/parent/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/parent/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <build> Modified: stanbol/branches/disambiguation-engine/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/pom.xml (original) +++ stanbol/branches/disambiguation-engine/pom.xml Tue Oct 30 22:46:38 2012 @@ -29,7 +29,7 @@ <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.reactor</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Apache Stanbol Enhancer Reactor</name> @@ -40,12 +40,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <modules> Modified: stanbol/branches/disambiguation-engine/topic-web/pom.xml URL: http://svn.apache.org/viewvc/stanbol/branches/disambiguation-engine/topic-web/pom.xml?rev=1403907&r1=1403906&r2=1403907&view=diff ============================================================================== --- stanbol/branches/disambiguation-engine/topic-web/pom.xml (original) +++ stanbol/branches/disambiguation-engine/topic-web/pom.xml Tue Oct 30 22:46:38 2012 @@ -17,13 +17,13 @@ <parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.parent</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <relativePath>../parent</relativePath> </parent> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.web.topic</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> <packaging>bundle</packaging> <name>Apache Stanbol Enhancer Topic Classification - Web API</name> @@ -36,12 +36,12 @@ <scm> <connection> - scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/topic-web/ + scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/topic-web/ </connection> <developerConnection> - scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/topic-web/ + scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/topic-web/ </developerConnection> - <url>http://incubator.apache.org/stanbol/</url> + <url>http://stanbol.apache.org/</url> </scm> <build> @@ -80,17 +80,17 @@ <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.commons.web.base</artifactId> - <version>0.10.1-incubating-SNAPSHOT</version> + <version>0.10.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.stanbol</groupId> <artifactId>org.apache.stanbol.enhancer.engine.topic</artifactId> - <version>0.10.0-incubating-SNAPSHOT</version> + <version>0.10.0-SNAPSHOT</version> </dependency> <dependency>
