Author: rwesten
Date: Fri Apr 18 12:08:20 2014
New Revision: 1588453
URL: http://svn.apache.org/r1588453
Log:
STANBOL-1322: merged change to the ServiceTracker initialization to trunk
Modified:
stanbol/trunk/enhancer/ (props changed)
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeSerializerRegistry.java
Propchange: stanbol/trunk/enhancer/
------------------------------------------------------------------------------
Merged /stanbol/branches/release-0.12/enhancer:r1588449
Modified:
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java?rev=1588453&r1=1588452&r2=1588453&view=diff
==============================================================================
---
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
(original)
+++
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
Fri Apr 18 12:08:20 2014
@@ -82,18 +82,37 @@ public class ValueTypeParserRegistry {
if(!inOsgi && valueTypeParsers == null){
initValueTypeParser(); //running outside OSGI
}
- parserLock.readLock().lock();
- try {
- if(!inOsgi){
+ if(!inOsgi){
+ parserLock.readLock().lock();
+ try {
return (ValueTypeParser<T>)valueTypeParsers.get(type);
- } else {
+ } finally {
+ parserLock.readLock().unlock();
+ }
+ } else {
+ ServiceTracker parserTracker = this.parserTracker;
+ //check if we need to lazily open the ServiceTracker
+ if(valueTypeParserRefs == null && parserTracker != null){
+ synchronized (parserTracker) {
+ if(valueTypeParserRefs == null){
+ valueTypeParserRefs = new
HashMap<Class<?>,List<ServiceReference>>();
+ //NOTE: do not open within activate(..) because of
+ // org.apache.stanbol.enhancer.nlp.json
FrameworkEvent
+ // ERROR (org.osgi.framework.ServiceException:
+ // ServiceFactory.getService() resulted in a cycle.)
+ parserTracker.open();
+ }
+ }
+ }
+ parserLock.readLock().lock();
+ try {
List<ServiceReference> refs = valueTypeParserRefs.get(type);
return refs == null || refs.isEmpty() ? null :
(ValueTypeParser<T>) parserTracker.getService(
refs.get(refs.size()-1));
+ } finally {
+ parserLock.readLock().unlock();
}
- } finally {
- parserLock.readLock().unlock();
}
}
@@ -101,23 +120,31 @@ public class ValueTypeParserRegistry {
protected void activate(ComponentContext ctx){
inOsgi = true;
final BundleContext bc = ctx.getBundleContext();
- valueTypeParserRefs = new HashMap<Class<?>,List<ServiceReference>>();
parserTracker = new ServiceTracker(bc,
ValueTypeParser.class.getName(),
new ParserTracker(bc));
- parserTracker.open();
+ //NOTE: do not open within activate(..) because of
+ // org.apache.stanbol.enhancer.nlp.json FrameworkEvent
+ // ERROR (org.osgi.framework.ServiceException:
+ // ServiceFactory.getService() resulted in a cycle.)
}
@Deactivate
protected void deactivate(ComponentContext ctx){
inOsgi = false;
- parserTracker.close();
- parserTracker = null;
+ if(parserTracker != null){
+ parserTracker.close();
+ parserTracker = null;
+ }
parserLock.writeLock().lock();
try {
if(valueTypeParsers != null){
valueTypeParsers.clear();
valueTypeParsers = null;
}
+ if(valueTypeParserRefs != null){
+ valueTypeParserRefs.clear();
+ valueTypeParserRefs = null;
+ }
} finally {
parserLock.writeLock().unlock();
}
Modified:
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeSerializerRegistry.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeSerializerRegistry.java?rev=1588453&r1=1588452&r2=1588453&view=diff
==============================================================================
---
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeSerializerRegistry.java
(original)
+++
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeSerializerRegistry.java
Fri Apr 18 12:08:20 2014
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -84,18 +85,37 @@ public class ValueTypeSerializerRegistry
if(!inOsgi && valueTypeSerializers == null){
initValueTypeSerializer(); //running outside OSGI
}
- serializerLock.readLock().lock();
- try {
- if(!inOsgi){
+ if(!inOsgi){
+ serializerLock.readLock().lock();
+ try {
return (ValueTypeSerializer<T>)valueTypeSerializers.get(type);
- } else {
+ } finally {
+ serializerLock.readLock().unlock();
+ }
+ } else {
+ ServiceTracker serializerTracker = this.serializerTracker;
+ //check if we need to lazily open the ServiceTracker
+ if(valueTypeSerializerRefs == null && serializerTracker != null){
+ synchronized (serializerTracker) {
+ if(valueTypeSerializerRefs == null){
+ valueTypeSerializerRefs = new
HashMap<Class<?>,List<ServiceReference>>();
+ //NOTE: do not open within activate(..) because of
+ // org.apache.stanbol.enhancer.nlp.json
FrameworkEvent
+ // ERROR (org.osgi.framework.ServiceException:
+ // ServiceFactory.getService() resulted in a cycle.)
+ serializerTracker.open();
+ }
+ }
+ }
+ serializerLock.readLock().lock();
+ try {
List<ServiceReference> refs =
valueTypeSerializerRefs.get(type);
return refs == null || refs.isEmpty() ? null :
(ValueTypeSerializer<T>) serializerTracker.getService(
refs.get(refs.size()-1));
+ } finally {
+ serializerLock.readLock().unlock();
}
- } finally {
- serializerLock.readLock().unlock();
}
}
@@ -103,10 +123,13 @@ public class ValueTypeSerializerRegistry
protected void activate(ComponentContext ctx){
inOsgi = true;
final BundleContext bc = ctx.getBundleContext();
- valueTypeSerializerRefs = new
HashMap<Class<?>,List<ServiceReference>>();
serializerTracker = new ServiceTracker(bc,
ValueTypeSerializer.class.getName(),
new SerializerTracker(bc));
- serializerTracker.open();
+ //NOTE: do not open within activate(..) because of
+ // org.apache.stanbol.enhancer.nlp.json FrameworkEvent
+ // ERROR (org.osgi.framework.ServiceException:
+ // ServiceFactory.getService() resulted in a cycle.)
+ //serializerTracker.open();
}
@Deactivate
@@ -120,6 +143,10 @@ public class ValueTypeSerializerRegistry
valueTypeSerializers.clear();
valueTypeSerializers = null;
}
+ if(valueTypeSerializerRefs != null){
+ valueTypeSerializerRefs.clear();
+ valueTypeSerializerRefs = null;
+ }
} finally {
serializerLock.writeLock().unlock();
}