Showing picture and code that prevents vicious circle
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:52:25 +0200
changeset 49294a39765b0b
parent 48 c5742322dbc8
child 50 019f1e9f7741
Showing picture and code that prevents vicious circle
samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToNew.java
samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java
     1.1 --- a/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToNew.java	Sat Jun 14 09:52:25 2008 +0200
     1.2 +++ b/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToNew.java	Sat Jun 14 09:52:25 2008 +0200
     1.3 @@ -23,9 +23,13 @@
     1.4      
     1.5      @Override
     1.6      protected MessageDigest create(String algorithm) {
     1.7 +        // BEGIN: day.end.bridges.cyclecheck
     1.8          if (oldBridge.isSearching()) {
     1.9 +            // if the call is initiated from the other bridge, do not do
    1.10 +            // any delegation
    1.11              return null;
    1.12          }
    1.13 +        // END: day.end.bridges.cyclecheck
    1.14          
    1.15          try {
    1.16              return MessageDigest.getInstance(algorithm);
     2.1 --- a/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java	Sat Jun 14 09:52:25 2008 +0200
     2.2 +++ b/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java	Sat Jun 14 09:52:25 2008 +0200
     2.3 @@ -20,13 +20,18 @@
     2.4   * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     2.5   */
     2.6  // BEGIN: day.end.bridges.BridgeToOld
     2.7 -public class BridgeToOld extends Provider {
     2.8 -    private ThreadLocal<Boolean> searching = new ThreadLocal<Boolean>();
     2.9 +public final class BridgeToOld extends Provider {
    2.10  
    2.11      public BridgeToOld() {
    2.12          super("spi.Digestor", 1.0, "");
    2.13          Security.addProvider(this);
    2.14      }
    2.15 +
    2.16 +    // BEGIN: day.end.bridges.cycle
    2.17 +    private ThreadLocal<Boolean> searching = new ThreadLocal<Boolean>();
    2.18 +    final boolean isSearching() {
    2.19 +        return Boolean.TRUE.equals(searching.get());
    2.20 +    }
    2.21      
    2.22      @Override
    2.23      public synchronized Service getService(String type, String algorithm) {
    2.24 @@ -44,6 +49,7 @@
    2.25              searching.set(prev);
    2.26          }
    2.27      }
    2.28 +    // END: day.end.bridges.cycle
    2.29  
    2.30      private static class ServiceImpl<Data> extends Service {
    2.31          Digest dig;
    2.32 @@ -87,9 +93,5 @@
    2.33          
    2.34      }
    2.35  
    2.36 -    boolean isSearching() {
    2.37 -        return Boolean.TRUE.equals(searching.get());
    2.38 -    }
    2.39 -
    2.40  }
    2.41  // END: day.end.bridges.BridgeToOld