Cache a lazy reference to OSGi registry instance
Signed-off-by: jansupol <jan.supol@oracle.com>
diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java b/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java
index e4a202b..b4519ac 100644
--- a/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java
+++ b/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -56,7 +56,9 @@
import org.glassfish.jersey.internal.LocalizationMessages;
import org.glassfish.jersey.internal.OsgiRegistry;
import org.glassfish.jersey.internal.util.collection.ClassTypePair;
-
+import org.glassfish.jersey.internal.util.collection.LazyValue;
+import org.glassfish.jersey.internal.util.collection.Value;
+import org.glassfish.jersey.internal.util.collection.Values;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
@@ -1469,6 +1471,17 @@
private static final Class<?> bundleReferenceClass = AccessController.doPrivileged(
classForNamePA("org.osgi.framework.BundleReference", null));
+ private static final LazyValue<Object> osgiInstance = Values.lazy((Value<Object>) () -> {
+ try {
+ if (bundleReferenceClass != null) {
+ return OsgiRegistry.getInstance();
+ }
+ } catch (final Throwable e) {
+ // Do nothing - instance is null.
+ }
+
+ return null;
+ });
/**
* Returns an {@link OsgiRegistry} instance.
@@ -1476,15 +1489,7 @@
* @return an {@link OsgiRegistry} instance or {@code null} if the class cannot be instantiated (not in OSGi environment).
*/
public static OsgiRegistry getOsgiRegistryInstance() {
- try {
- if (bundleReferenceClass != null) {
- return OsgiRegistry.getInstance();
- }
- } catch (final Exception e) {
- // Do nothing - instance is null.
- }
-
- return null;
+ return (OsgiRegistry) osgiInstance.get();
}
/**