summaryrefslogtreecommitdiff
path: root/bkucommon/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'bkucommon/src/main')
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManager.java172
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java153
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java39
3 files changed, 219 insertions, 145 deletions
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManager.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManager.java
index aaf81e51..9cad95a4 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManager.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManager.java
@@ -14,92 +14,94 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package at.gv.egiz.bku.binding;
-
+package at.gv.egiz.bku.binding;
+
import java.net.MalformedURLException;
-import java.util.Locale;
-import java.util.Set;
-
-import at.gv.egiz.bku.slcommands.SLCommandInvoker;
-import at.gv.egiz.stal.STALFactory;
-
-/**
- * Central player that handles the protocol binding.
- *
- * @author wbauer
- *
- */
-public interface BindingProcessorManager {
-
- /**
- * FactoryMethod creating a new BindingProcessor object.
- * The created binding processor must be passed to the process method to execute.
- *
- * @param urlString
- * the source url
- * @param aSessionId
- * optional an external sessionId (e.g. http session) could be
- * provided. This parameter may be null.
- * @param locale the locale used for user interaction, may be null
- */
- public BindingProcessor createBindingProcessor(String urlString,
- String aSessionId, Locale locale) throws MalformedURLException;
-
- /**
- * FactoryMethod creating a new BindingProcessor object.
- * The created binding processor must be passed to the process method to execute.
- *
- * @param protcol
- * the source url
- * @param aSessionId
- * optional an external sessionId (e.g. http session) could be
- * provided. This parameter may be null.
- */
- public BindingProcessor createBindingProcessor(String urlString,
- String aSessionId) throws MalformedURLException;
-
-
- /**
- * Gets the binding processor with a certain id. The binding processor must be passed to the
- * process method before it is managed and thus returned by this method.
- * @param aId must not be null
- * @return null if the binding processor was not "processed" before.
- */
- public BindingProcessor getBindingProcessor(Id aId);
-
- /**
- * Sets the STAL factory that is used for creating STAL objects that are used by BindingProcessor objects.
- * For each new BindingProcessor a new STAL object is created.
- * @param aStalFactory the factory to be used. Must not be null.
- */
- public void setSTALFactory(STALFactory aStalFactory);
-
- /**
- * Sets the invoker to be used.
- * @param invoker
- */
- public void setSLCommandInvoker(SLCommandInvoker invoker);
-
- /**
- * Schedules the provided binding processor for processing and immediately returns.
- *
- * @param aBindingProcessor
- */
- public void process(BindingProcessor aBindingProcessor);
-
- /**
- * Removes a formerly added (by calling the process method) binding processor.
- * @param bindingProcessor must not be null
- */
- public void removeBindingProcessor(Id sessionId);
-
- /**
- * A set of all managed binding processors.
- * @return
- */
- public Set<Id> getManagedIds();
-
+import java.util.Locale;
+import java.util.Set;
+
+import at.gv.egiz.bku.slcommands.SLCommandInvoker;
+import at.gv.egiz.stal.STALFactory;
+
+/**
+ * Central player that handles the protocol binding.
+ *
+ * @author wbauer
+ *
+ */
+public interface BindingProcessorManager {
+
+ /**
+ * FactoryMethod creating a new BindingProcessor object.
+ * The created binding processor must be passed to the process method to execute.
+ *
+ * @param urlString
+ * the source url
+ * @param aSessionId
+ * optional an external sessionId (e.g. http session) could be
+ * provided. This parameter may be null.
+ * @param locale the locale used for user interaction, may be null
+ */
+ public BindingProcessor createBindingProcessor(String urlString,
+ String aSessionId, Locale locale) throws MalformedURLException;
+
+ /**
+ * FactoryMethod creating a new BindingProcessor object.
+ * The created binding processor must be passed to the process method to execute.
+ *
+ * @param protcol
+ * the source url
+ * @param aSessionId
+ * optional an external sessionId (e.g. http session) could be
+ * provided. This parameter may be null.
+ */
+ public BindingProcessor createBindingProcessor(String urlString,
+ String aSessionId) throws MalformedURLException;
+
+
+ /**
+ * Gets the binding processor with a certain id. The binding processor must be passed to the
+ * process method before it is managed and thus returned by this method.
+ * @param aId must not be null
+ * @return null if the binding processor was not "processed" before.
+ */
+ public BindingProcessor getBindingProcessor(Id aId);
+
+ /**
+ * Sets the STAL factory that is used for creating STAL objects that are used by BindingProcessor objects.
+ * For each new BindingProcessor a new STAL object is created.
+ * @param aStalFactory the factory to be used. Must not be null.
+ */
+ public void setSTALFactory(STALFactory aStalFactory);
+
+ /**
+ * Sets the invoker to be used.
+ * @param invoker
+ */
+ public void setSLCommandInvoker(SLCommandInvoker invoker);
+
+ /**
+ * Creates a processing context,
+ * schedules the provided binding processor for processing and
+ * immediately returns the context.
+ *
+ * @param aBindingProcessor
+ */
+ public ProcessingContext process(BindingProcessor aBindingProcessor);
+
+ /**
+ * Removes a formerly added (by calling the process method) binding processor.
+ * @param bindingProcessor must not be null
+ */
+ public void removeBindingProcessor(Id sessionId);
+
+ /**
+ * A set of all managed binding processors.
+ * @return
+ */
+ public Set<Id> getManagedIds();
+
public void shutdown();
- public void shutdownNow();
+ public void shutdownNow();
} \ No newline at end of file
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java
index 11f5a160..cc1b7532 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java
@@ -53,8 +53,9 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
private STALFactory stalFactory;
private SLCommandInvoker commandInvokerClass;
private ExecutorService executorService;
- private Map<Id, MapEntityWrapper> bindingProcessorMap = Collections
- .synchronizedMap(new HashMap<Id, MapEntityWrapper>());
+ private Map<Id, ProcessingContext> contextMap = Collections.synchronizedMap(new HashMap<Id, ProcessingContext>());
+// private Map<Id, MapEntityWrapper> bindingProcessorMap = Collections
+// .synchronizedMap(new HashMap<Id, MapEntityWrapper>());
/**
* Container to hold a Future and Bindingprocessor object as map value.
@@ -62,39 +63,39 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
* @author wbauer
* @see BindingProcessorManagerImpl#bindingProcessorMap
*/
- static class MapEntityWrapper {
- private Future<?> future;
- private BindingProcessor bindingProcessor;
-
- public MapEntityWrapper(Future<?> future, BindingProcessor bindingProcessor) {
- if ((bindingProcessor == null) || (future == null)) {
- throw new NullPointerException("Argument must not be null");
- }
- this.bindingProcessor = bindingProcessor;
- this.future = future;
- }
-
- public Future<?> getFuture() {
- return future;
- }
-
- public BindingProcessor getBindingProcessor() {
- return bindingProcessor;
- }
-
- public int hashCode() {
- return bindingProcessor.getId().hashCode();
- }
-
- public boolean equals(Object other) {
- if (other instanceof MapEntityWrapper) {
- MapEntityWrapper o = (MapEntityWrapper) other;
- return (o.bindingProcessor.getId().equals(bindingProcessor.getId()));
- } else {
- return false;
- }
- }
- }
+// static class MapEntityWrapper {
+// private Future<?> future;
+// private BindingProcessor bindingProcessor;
+//
+// public MapEntityWrapper(Future<?> future, BindingProcessor bindingProcessor) {
+// if ((bindingProcessor == null) || (future == null)) {
+// throw new NullPointerException("Argument must not be null");
+// }
+// this.bindingProcessor = bindingProcessor;
+// this.future = future;
+// }
+//
+// public Future<?> getFuture() {
+// return future;
+// }
+//
+// public BindingProcessor getBindingProcessor() {
+// return bindingProcessor;
+// }
+//
+// public int hashCode() {
+// return bindingProcessor.getId().hashCode();
+// }
+//
+// public boolean equals(Object other) {
+// if (other instanceof MapEntityWrapper) {
+// MapEntityWrapper o = (MapEntityWrapper) other;
+// return (o.bindingProcessor.getId().equals(bindingProcessor.getId()));
+// } else {
+// return false;
+// }
+// }
+// }
/**
*
@@ -157,17 +158,24 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
public void shutdownNow() {
log.info("Shutting down the BindingProcessorManager NOW!");
executorService.shutdownNow();
- log.debug("Number of binding prcessors currently managed: "
- + bindingProcessorMap.size());
+ log.debug("Number of binding contexts currently managed: "
+ + contextMap.size());
+// + bindingProcessorMap.size());
if (log.isDebugEnabled()) {
- for (Iterator<MapEntityWrapper> it = bindingProcessorMap.values()
- .iterator(); it.hasNext();) {
- MapEntityWrapper entry = it.next();
- log.debug(entry.getBindingProcessor().getId() + ": isDone: "
- + entry.getFuture().isDone());
- log.debug(entry.getBindingProcessor().getId() + ": isCanceled: "
- + entry.getFuture().isCancelled());
+ for (ProcessingContext ctx : contextMap.values()) {
+ Id bpId = ctx.getBindingProcessor().getId();
+ Future future = ctx.getFuture();
+ log.debug(bpId + " cancelled: " + future.isCancelled());
+ log.debug(bpId + " done: " + future.isDone());
}
+// for (Iterator<MapEntityWrapper> it = bindingProcessorMap.values()
+// .iterator(); it.hasNext();) {
+// MapEntityWrapper entry = it.next();
+// log.debug(entry.getBindingProcessor().getId() + ": isDone: "
+// + entry.getFuture().isDone());
+// log.debug(entry.getBindingProcessor().getId() + ": isCanceled: "
+// + entry.getFuture().isCancelled());
+// }
}
}
@@ -216,17 +224,22 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
* @return the bindingprocessor object for this id or null if no
* bindingprocessor was found.
*/
+ @Override
public BindingProcessor getBindingProcessor(Id aId) {
- if (bindingProcessorMap.get(aId) != null) {
- return bindingProcessorMap.get(aId).getBindingProcessor();
+// if (bindingProcessorMap.get(aId) != null) {
+// return bindingProcessorMap.get(aId).getBindingProcessor();
+ ProcessingContext ctx = contextMap.get(aId);
+ if (ctx != null) {
+ return ctx.getBindingProcessor();
} else {
return null;
}
}
- /**
- *
+ /**
+ *
*/
+ @Override
public void setSTALFactory(STALFactory aStalFactory) {
if (aStalFactory == null) {
throw new NullPointerException("Cannot set STALFactory to null");
@@ -236,12 +249,17 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
/**
* Causes the BindingProcessorManager to manage the provided BindingProcessor
+ * Creates a processing context,
+ * schedules the provided binding processor for processing and
+ * immediately returns the context.
*
* @param aBindingProcessor
* must not be null
*/
- public void process(BindingProcessor aBindingProcessor) {
- if (bindingProcessorMap.containsKey(aBindingProcessor.getId())) {
+ @Override
+ public ProcessingContext process(BindingProcessor aBindingProcessor) {
+ if (contextMap.containsKey(aBindingProcessor.getId())) {
+// if (bindingProcessorMap.containsKey(aBindingProcessor.getId())) {
log.fatal("Clashing ids, cannot process bindingprocessor with id:"
+ aBindingProcessor.getId());
throw new SLRuntimeException(
@@ -250,8 +268,11 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
}
log.debug("processing bindingprocessor: " + aBindingProcessor.getId());
Future<?> f = executorService.submit(aBindingProcessor);
- bindingProcessorMap.put(aBindingProcessor.getId(), new MapEntityWrapper(f,
- aBindingProcessor));
+ ProcessingContext ctx = new ProcessingContext(aBindingProcessor, f);
+ contextMap.put(aBindingProcessor.getId(), ctx);
+// bindingProcessorMap.put(aBindingProcessor.getId(), new MapEntityWrapper(f,
+// aBindingProcessor));
+ return ctx;
}
@Override
@@ -262,26 +283,38 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
@Override
public void removeBindingProcessor(Id sessionId) {
log.debug("Removing binding processor: " + sessionId);
- MapEntityWrapper wrapper = bindingProcessorMap.get(sessionId);
- if (wrapper == null) {
+ ProcessingContext ctx = contextMap.get(sessionId);
+ if (ctx == null) {
return;
}
- Future<?> f = wrapper.getFuture();
+ Future f = ctx.getFuture();
+
+// MapEntityWrapper wrapper = bindingProcessorMap.get(sessionId);
+// if (wrapper == null) {
+// return;
+// }
+// Future<?> f = wrapper.getFuture();
if (!f.isDone()) {
f.cancel(true);
}
- bindingProcessorMap.remove(sessionId);
+ contextMap.remove(sessionId);
+// bindingProcessorMap.remove(sessionId);
}
@Override
public Set<Id> getManagedIds() {
Set<Id> result = new HashSet<Id>();
- synchronized (bindingProcessorMap) {
- for (Iterator<Id> it = bindingProcessorMap.keySet().iterator(); it
- .hasNext();) {
- result.add(it.next());
+ synchronized (contextMap) {
+ for (Id id : contextMap.keySet()) {
+ result.add(id);
}
}
+// synchronized (bindingProcessorMap) {
+// for (Iterator<Id> it = bindingProcessorMap.keySet().iterator(); it
+// .hasNext();) {
+// result.add(it.next());
+// }
+// }
return result;
}
} \ No newline at end of file
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java
new file mode 100644
index 00000000..ae7f01eb
--- /dev/null
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java
@@ -0,0 +1,39 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package at.gv.egiz.bku.binding;
+
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.concurrent.Future;
+
+/**
+ * BindingContext?
+ * RequestBindingContext?
+ *
+ * @author clemens
+ */
+public class ProcessingContext {
+
+ public static final String BINDING_PROCESSOR = "binding.processor";
+ public static final String FUTURE = "future";
+
+ protected Map<String, Object> properties = new Hashtable<String, Object>();
+
+ public ProcessingContext(BindingProcessor bp, Future future) {
+ properties.put(BINDING_PROCESSOR, bp);
+ properties.put(FUTURE, future);
+ }
+
+
+
+ public BindingProcessor getBindingProcessor() {
+ return (BindingProcessor) properties.get(BINDING_PROCESSOR);
+ }
+
+ public Future getFuture() {
+ return (Future) properties.get(FUTURE);
+ }
+}