[java-support] 01/01: JSPT-97 - Correctly synchronize component base classes

Ian Young ian at iay.org.uk
Wed Jun 10 15:53:29 UTC 2020


This is an automated email from the git hooks/post-receive script.

iay pushed a commit to branch dev/JSPT-97
in repository java-support.

View the commit online:
http://git.shibboleth.net/view/?p=java-support.git;a=commit;h=e30ac8bace2404cadace59d6bbddf41fa5dd94f2

commit e30ac8bace2404cadace59d6bbddf41fa5dd94f2
Author: Ian Young <ian at iay.org.uk>
AuthorDate: Wed Jun 3 15:08:35 2020 +0100

    JSPT-97 - Correctly synchronize component base classes
    
    https://issues.shibboleth.net/jira/browse/JSPT-97
---
 .../AbstractIdentifiableInitializableComponent.java          |  4 +++-
 .../component/AbstractIdentifiedInitializableComponent.java  |  9 ++++++---
 .../support/component/AbstractInitializableComponent.java    | 12 ++++++++----
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiableInitializableComponent.java b/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiableInitializableComponent.java
index 026c015..6f4f26a 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiableInitializableComponent.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiableInitializableComponent.java
@@ -18,17 +18,19 @@
 package net.shibboleth.utilities.java.support.component;
 
 import javax.annotation.Nonnull;
+import javax.annotation.concurrent.ThreadSafe;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 /**
  * An {@link AbstractIdentifiedInitializableComponent} with a public setter.
  */
+ at ThreadSafe
 public abstract class AbstractIdentifiableInitializableComponent extends AbstractIdentifiedInitializableComponent
         implements IdentifiableComponent {
 
     /** {@inheritDoc} */
-    @Override public void setId(@Nonnull @NotEmpty final String componentId) {
+    @Override public synchronized void setId(@Nonnull @NotEmpty final String componentId) {
         super.setId(componentId);
     }
 }
diff --git a/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiedInitializableComponent.java b/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiedInitializableComponent.java
index 4cd7c3e..89c249c 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiedInitializableComponent.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/component/AbstractIdentifiedInitializableComponent.java
@@ -19,6 +19,8 @@ package net.shibboleth.utilities.java.support.component;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+import javax.annotation.concurrent.ThreadSafe;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -28,14 +30,15 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 /**
  * Simple implementation of {@link InitializableComponent} and {@link IdentifiedComponent}.
  */
+ at ThreadSafe
 public abstract class AbstractIdentifiedInitializableComponent extends AbstractInitializableComponent implements
         IdentifiedComponent {
 
     /** The unique identifier for this component. */
-    @Nullable @NonnullAfterInit private String id;
+    @Nullable @NonnullAfterInit @GuardedBy("this") private String id;
 
     /** {@inheritDoc} */
-    @Nullable @NonnullAfterInit public String getId() {
+    @Nullable @NonnullAfterInit public synchronized String getId() {
         return id;
     }
 
@@ -44,7 +47,7 @@ public abstract class AbstractIdentifiedInitializableComponent extends AbstractI
      * 
      * @param componentId ID of the component
      */
-    protected void setId(@Nonnull @NotEmpty final String componentId) {
+    protected synchronized void setId(@Nonnull @NotEmpty final String componentId) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
         id = Constraint.isNotNull(StringSupport.trimOrNull(componentId), "Component ID can not be null or empty");
diff --git a/src/main/java/net/shibboleth/utilities/java/support/component/AbstractInitializableComponent.java b/src/main/java/net/shibboleth/utilities/java/support/component/AbstractInitializableComponent.java
index 3c59683..32529cf 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/component/AbstractInitializableComponent.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/component/AbstractInitializableComponent.java
@@ -17,25 +17,29 @@
 
 package net.shibboleth.utilities.java.support.component;
 
+import javax.annotation.concurrent.GuardedBy;
+import javax.annotation.concurrent.ThreadSafe;
+
 /** Base class for things that implement {@link DestructableComponent} and {@link InitializableComponent}. */
+ at ThreadSafe
 public abstract class AbstractInitializableComponent implements DestructableComponent,
         InitializableComponent {
 
     /** Whether this component has been destroyed. */
-    private boolean isDestroyed;
+    @GuardedBy("this") private boolean isDestroyed;
 
     /** Whether this component has been initialized. */
-    private boolean isInitialized;
+    @GuardedBy("this") private boolean isInitialized;
 
     /** {@inheritDoc} */
     @Override
-    public final boolean isDestroyed() {
+    public final synchronized boolean isDestroyed() {
         return isDestroyed;
     }
 
     /** {@inheritDoc} */
     @Override
-    public boolean isInitialized() {
+    public synchronized boolean isInitialized() {
         return isInitialized;
     }
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list