diff options
Diffstat (limited to 'bkucommon/src')
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);  +  } +} | 
