src/jdk.jpackager.runtime/share/classes/jdk/jpackager/runtime/singleton/SingleInstanceService.java
branchJDK-8200758-branch
changeset 57028 51cc1a1f91f3
parent 57017 1b08af362a30
--- a/src/jdk.jpackager.runtime/share/classes/jdk/jpackager/runtime/singleton/SingleInstanceService.java	Fri Nov 16 14:42:43 2018 -0500
+++ b/src/jdk.jpackager.runtime/share/classes/jdk/jpackager/runtime/singleton/SingleInstanceService.java	Fri Nov 16 14:53:42 2018 -0500
@@ -37,8 +37,9 @@
 
 /**
  * The {@code SingleInstanceService} class provides public methods for using
- * Single Instance functionality for Java Packager. To use these methods,
- * the option named "-singleton" must be specified on jpackager command line.
+ * Single Instance functionality in applications packaged by jpackager.
+ * To use these methods, the option named "--singleton" must
+ * be specified on the jpackager command line.
  *
  * @since 12
  */
@@ -81,56 +82,42 @@
     }
 
     /**
-     * Registers {@code SingleInstanceListener} for current process.
-     * If the {@code SingleInstanceListener} object is already registered, or
-     * {@code slistener} is {@code null}, then the registration is skipped.
+     * Adds the given slistener for the current process.
+     *
+     * If the given slistener object is null or
+     * has already been added, then nothing is added.
      *
-     * @param slistener the listener to handle the single instance behaviour.
+     * @param slistener the {@code SingleInstanceListener} to add
      */
-    public static void registerSingleInstance(
+    public static void addSingleInstanceListener(
             SingleInstanceListener slistener) {
-        registerSingleInstance(slistener, false);
+        if (instance == null) {
+            synchronized(SingleInstanceService.class) {
+                if (instance == null) {
+                    instance = new SingleInstanceImpl();
+                }
+            }
+        }
+        instance.addSingleInstanceListener(slistener,
+                APP_ID_PREFIX + ProcessHandle.current().pid());
     }
 
     /**
-     * Registers {@code SingleInstanceListener} for current process.
-     * If the {@code SingleInstanceListener} object is already registered, or
-     * {@code slistener} is {@code null}, then the registration is skipped.
+     * removes the given slistener for the current process.
      *
-     * @param slistener the listener to handle the single instance behaviour.
-     * @param setFileHandler if {@code true}, the listener is notified when the
-     *         application is asked to open a list of files. If OS is not MacOS,
-     *         the parameter is ignored.
+     * If the given slistener object is null or
+     * has not already been added, nothing is removed.
+     *
+     * @param slistener the {@code SingleInstanceListener} to remove.
      */
-    public static void registerSingleInstance(SingleInstanceListener slistener,
-                                              boolean setFileHandler) {
-        String appId = APP_ID_PREFIX + ProcessHandle.current().pid();
-        registerSingleInstanceForId(slistener, appId, setFileHandler);
-    }
-
-    static void registerSingleInstanceForId(SingleInstanceListener slistener,
-            String stringId, boolean setFileHandler) {
-        // register SingleInstanceListener for given Id
-        instance = new SingleInstanceImpl();
-        instance.addSingleInstanceListener(slistener, stringId);
-        if (setFileHandler) {
-            instance.setOpenFileHandler();
+    public static void removeSingleInstanceListener(
+            SingleInstanceListener slistener) {
+        if (instance != null) {
+            instance.removeSingleInstanceListener(slistener);
         }
     }
 
     /**
-     * Unregisters {@code SingleInstanceListener} for current process.
-     * If the {@code SingleInstanceListener} object is not registered, or
-     * {@code slistener} is {@code null}, then the unregistration is skipped.
-     *
-     * @param slistener the listener for unregistering.
-     */
-    public static void unregisterSingleInstance(
-            SingleInstanceListener slistener) {
-        instance.removeSingleInstanceListener(slistener);
-    }
-
-    /**
      * Returns true if single instance server is running for the id
      */
     static boolean isServerRunning(String id) {