use a new BrooklynInitialization for static initializers

Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/9e82be18
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/9e82be18
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/9e82be18

Branch: refs/heads/master
Commit: 9e82be182933a1a25837f392e2dfd1682d7e27fd
Parents: 0781c36
Author: Alex Heneveld <[email protected]>
Authored: Mon Jan 26 11:50:32 2015 +0000
Committer: Alex Heneveld <[email protected]>
Committed: Mon Jan 26 12:26:28 2015 +0000

----------------------------------------------------------------------
 .../brooklyn/entity/basic/AbstractEntity.java   |  3 +-
 .../basic/PortAttributeSensorAndConfigKey.java  |  6 +-
 .../internal/BrooklynInitialization.java        | 68 ++++++++++++++++++++
 .../util/BrooklynLanguageExtensions.java        | 10 +--
 .../main/java/brooklyn/util/ResourceUtils.java  |  4 +-
 .../brooklyn/util/crypto/FluentKeySigner.java   |  5 +-
 .../java/brooklyn/util/crypto/SecureKeys.java   |  7 +-
 .../java/brooklyn/util/flags/TypeCoercions.java | 21 +++---
 8 files changed, 100 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java 
b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index ae0179f..215b13a 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -59,6 +59,7 @@ import brooklyn.event.basic.Sensors;
 import brooklyn.event.feed.AbstractFeed;
 import brooklyn.event.feed.ConfigToAttributes;
 import brooklyn.internal.BrooklynFeatureEnablement;
+import brooklyn.internal.BrooklynInitialization;
 import brooklyn.internal.storage.BrooklynStorage;
 import brooklyn.internal.storage.Reference;
 import brooklyn.internal.storage.impl.BasicReference;
@@ -143,7 +144,7 @@ public abstract class AbstractEntity extends 
AbstractBrooklynObject implements E
     
     private static final Logger LOG = 
LoggerFactory.getLogger(AbstractEntity.class);
     
-    static { BrooklynLanguageExtensions.init(); }
+    static { BrooklynInitialization.initAll(); }
     
     public static final BasicNotificationSensor<Location> LOCATION_ADDED = new 
BasicNotificationSensor<Location>(
             Location.class, "entity.location.added", "Location dynamically 
added to entity");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java 
b/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
index e4e613e..0a501cd 100644
--- 
a/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
+++ 
b/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
@@ -28,12 +28,12 @@ import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.BrooklynConfigKeys;
 import brooklyn.event.Sensor;
+import brooklyn.internal.BrooklynInitialization;
 import brooklyn.location.Location;
 import brooklyn.location.MachineProvisioningLocation;
 import brooklyn.location.PortRange;
 import brooklyn.location.PortSupplier;
 import brooklyn.location.basic.Locations;
-import brooklyn.location.basic.PortRanges;
 import brooklyn.management.ManagementContext;
 import brooklyn.util.flags.TypeCoercions;
 import brooklyn.util.guava.Maybe;
@@ -55,9 +55,7 @@ public class PortAttributeSensorAndConfigKey extends 
AttributeSensorAndConfigKey
 
     public static final Logger LOG = 
LoggerFactory.getLogger(PortAttributeSensorAndConfigKey.class);
 
-    static {
-        PortRanges.init(); // Ensure type coercions are registered
-    }
+    static { BrooklynInitialization.initAll(); }
 
     public PortAttributeSensorAndConfigKey(String name) {
         this(name, name, null);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/internal/BrooklynInitialization.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/internal/BrooklynInitialization.java 
b/core/src/main/java/brooklyn/internal/BrooklynInitialization.java
new file mode 100644
index 0000000..9227443
--- /dev/null
+++ b/core/src/main/java/brooklyn/internal/BrooklynInitialization.java
@@ -0,0 +1,68 @@
+/*
+ * 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 brooklyn.internal;
+
+import com.google.common.annotations.Beta;
+
+import brooklyn.location.basic.PortRanges;
+import brooklyn.util.crypto.SecureKeys;
+import brooklyn.util.flags.TypeCoercions;
+import brooklyn.util.net.Networking;
+
+/** Various static initialization tasks are routed through this class,
+ * to give us better traceability of their invocation. */ 
+@Beta
+public class BrooklynInitialization {
+
+    public static void initTypeCoercionStandardAdapters() {
+        TypeCoercions.initStandardAdapters();
+    }
+
+    public static void initSecureKeysBouncyCastleProvider() {
+        SecureKeys.initBouncyCastleProvider();
+    }
+
+    public static void initNetworking() {
+        Networking.init();
+    }
+    
+    public static void initPortRanges() {
+        PortRanges.init();
+    }
+
+    @SuppressWarnings("deprecation")
+    public static void initLegacyLanguageExtensions() {
+        brooklyn.util.BrooklynLanguageExtensions.init();
+    }
+
+    /* other things:
+     * 
+     * RendererHints - done by the entity classes which need them, including 
Sensors
+     * 
+     */
+    
+    public static void initAll() {
+        initTypeCoercionStandardAdapters();
+        initSecureKeysBouncyCastleProvider();
+        initNetworking();
+        initPortRanges();
+        initLegacyLanguageExtensions();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java 
b/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
index 610c5ca..dd25090 100644
--- a/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
+++ b/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
@@ -20,9 +20,10 @@ package brooklyn.util;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import brooklyn.location.basic.PortRanges;
+import brooklyn.internal.BrooklynInitialization;
 import brooklyn.util.internal.TimeExtras;
 
+/** @deprecated since 0.7.0 use {@link BrooklynInitialization} */
 public class BrooklynLanguageExtensions {
 
     private BrooklynLanguageExtensions() {}
@@ -38,10 +39,9 @@ public class BrooklynLanguageExtensions {
     public synchronized static void init() {
         if (done.getAndSet(true)) return;
         TimeExtras.init();
-        PortRanges.init();
+        BrooklynInitialization.initPortRanges();
     }
     
-    static {
-        init();
-    }
+    static { BrooklynInitialization.initLegacyLanguageExtensions(); }
+    
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/util/ResourceUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/ResourceUtils.java 
b/core/src/main/java/brooklyn/util/ResourceUtils.java
index 1112401..5a485bf 100644
--- a/core/src/main/java/brooklyn/util/ResourceUtils.java
+++ b/core/src/main/java/brooklyn/util/ResourceUtils.java
@@ -50,6 +50,7 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
 import brooklyn.catalog.internal.CatalogUtils;
+import brooklyn.internal.BrooklynInitialization;
 import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.management.ManagementContext;
 import brooklyn.management.classloading.BrooklynClassLoadingContext;
@@ -59,7 +60,6 @@ import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.http.HttpTool;
 import brooklyn.util.http.HttpTool.HttpClientBuilder;
 import brooklyn.util.javalang.Threads;
-import brooklyn.util.net.Networking;
 import brooklyn.util.net.Urls;
 import brooklyn.util.os.Os;
 import brooklyn.util.stream.Streams;
@@ -80,7 +80,7 @@ public class ResourceUtils {
     private String context = null;
     private Object contextObject = null;
     
-    static { Networking.init(); }
+    static { BrooklynInitialization.initNetworking(); }
     
     /**
      * Creates a {@link ResourceUtils} object with a specific class loader and 
context.

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java 
b/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
index 674fb7f..983a3d6 100644
--- a/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
+++ b/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
@@ -22,7 +22,6 @@ import java.math.BigInteger;
 import java.security.KeyPair;
 import java.security.PublicKey;
 import java.security.SecureRandom;
-import java.security.Security;
 import java.security.cert.CertificateParsingException;
 import java.security.cert.X509Certificate;
 import java.util.Date;
@@ -32,8 +31,8 @@ import javax.security.auth.x500.X500Principal;
 import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;
 import org.bouncycastle.asn1.x509.X509Extension;
 import org.bouncycastle.jce.X509Principal;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
 
+import brooklyn.internal.BrooklynInitialization;
 import brooklyn.util.exceptions.Exceptions;
 
 /** A fluent API which simplifies generating certificates (signed keys) */
@@ -42,7 +41,7 @@ import brooklyn.util.exceptions.Exceptions;
  * drags in an add'l dependency (bcmail) and is harder to use. */
 public class FluentKeySigner {
 
-    static { Security.addProvider(new BouncyCastleProvider()); }
+    static { BrooklynInitialization.initSecureKeysBouncyCastleProvider(); }
 
     protected X500Principal issuerPrincipal;
     protected KeyPair issuerKey;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/crypto/SecureKeys.java 
b/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
index 5e12ad3..14612b8 100644
--- a/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
+++ b/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
@@ -42,6 +42,7 @@ import 
org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.internal.BrooklynInitialization;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.stream.Streams;
 
@@ -55,7 +56,11 @@ public class SecureKeys extends 
SecureKeysWithoutBouncyCastle {
 
     private static final Logger log = 
LoggerFactory.getLogger(SecureKeys.class);
     
-    static { Security.addProvider(new BouncyCastleProvider()); }
+    static { BrooklynInitialization.initSecureKeysBouncyCastleProvider(); }
+    
+    public static void initBouncyCastleProvider() {
+        Security.addProvider(new BouncyCastleProvider());
+    }
     
     public static class PassphraseProblem extends IllegalStateException {
         private static final long serialVersionUID = -3382824813899223447L;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9e82be18/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/flags/TypeCoercions.java 
b/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
index 26b9dea..6c6ecac 100644
--- a/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
+++ b/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
@@ -47,9 +47,9 @@ import org.slf4j.LoggerFactory;
 import brooklyn.entity.basic.ClosureEntityFactory;
 import brooklyn.entity.basic.ConfigurableEntityFactory;
 import brooklyn.entity.basic.ConfigurableEntityFactoryFromEntityFactory;
-import brooklyn.entity.basic.EntityFactory;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.BasicAttributeSensor;
+import brooklyn.internal.BrooklynInitialization;
 import brooklyn.util.JavaGroovyEquivalents;
 import brooklyn.util.collections.QuorumCheck;
 import brooklyn.util.collections.QuorumCheck.QuorumChecks;
@@ -473,11 +473,14 @@ public class TypeCoercions {
         return null;
     }
 
-    public synchronized static <A,B> void registerAdapter(Class<A> sourceType, 
Class<B> targetType, Function<? super A,B> fn) {
-        registry.put(targetType, sourceType, fn);
+    /** Registers an adapter for use with type coercion. Returns any old 
adapter. */
+    public synchronized static <A,B> Function registerAdapter(Class<A> 
sourceType, Class<B> targetType, Function<? super A,B> fn) {
+        return registry.put(targetType, sourceType, fn);
     }
 
-    static {
+    static { BrooklynInitialization.initTypeCoercionStandardAdapters(); }
+    
+    public static void initStandardAdapters() {
         registerAdapter(CharSequence.class, String.class, new 
Function<CharSequence,String>() {
             @Override
             public String apply(CharSequence input) {
@@ -551,18 +554,20 @@ public class TypeCoercions {
                 return new ClosureEntityFactory(input);
             }
         });
-        registerAdapter(EntityFactory.class, ConfigurableEntityFactory.class, 
new Function<EntityFactory,ConfigurableEntityFactory>() {
+        @SuppressWarnings({"unused", "deprecation"})
+        Function<?,?> ignoredVarHereToAllowSuppressDeprecationWarning1 = 
registerAdapter(brooklyn.entity.basic.EntityFactory.class, 
ConfigurableEntityFactory.class, new 
Function<brooklyn.entity.basic.EntityFactory,ConfigurableEntityFactory>() {
             @SuppressWarnings("unchecked")
             @Override
-            public ConfigurableEntityFactory apply(EntityFactory input) {
+            public ConfigurableEntityFactory 
apply(brooklyn.entity.basic.EntityFactory input) {
                 if (input instanceof ConfigurableEntityFactory) return 
(ConfigurableEntityFactory)input;
                 return new ConfigurableEntityFactoryFromEntityFactory(input);
             }
         });
-        registerAdapter(Closure.class, EntityFactory.class, new 
Function<Closure,EntityFactory>() {
+        @SuppressWarnings({"unused", "deprecation"})
+        Function<?,?> ignoredVarHereToAllowSuppressDeprecationWarning2 = 
registerAdapter(Closure.class, brooklyn.entity.basic.EntityFactory.class, new 
Function<Closure,brooklyn.entity.basic.EntityFactory>() {
             @SuppressWarnings("unchecked")
             @Override
-            public EntityFactory apply(Closure input) {
+            public brooklyn.entity.basic.EntityFactory apply(Closure input) {
                 return new ClosureEntityFactory(input);
             }
         });

Reply via email to