On 2/1/17 12:33 AM, Alan Bateman wrote:
On 01/02/2017 00:22, Stuart Marks wrote:
+    *
+    * <ul><li>If the class to be activated and the special activation
contructor are both public,
+    * the class must reside in a package that is exported or open to the
+    * {@code java.rmi} module.
I think it would be better to just say "exported" rather than "exported or open"
and have it link to Module#isExported(String,Module).

+    *
+    * <li>If either the class to be activated or the special activation
constructor
+    * is non-public, the class must reside in a package that is open to the
+    * {@code java.rmi} module.
+    * </ul>
and for completeness, have "open" link to Module#isOpen(String,Module).

I think the "open" in the first item is necessary, given that the second item restricts itself to the non-public cases. However, the latter restriction isn't necessary! I wrote out all 16 cases in a truth table (open, exported, pub-class, pub-constructor) and minimized it -- though not using a Karnaugh map -- and the result is simply:

    (exported && public-class && public-constructor) || open

This simplifies things somewhat.

The situation with dynamic stubs in UnicastRemoteObject is similar. The logic is the same, but there can be a mixture of remote interfaces, which complicates things a bit. Nonetheless I think the rewording came well.

I've also added links per your suggestion, and fixed some typos.

Revised diff below.

s'marks

diff -r 0e0e0fbc5bf3 src/java.rmi/share/classes/java/rmi/activation/ActivationInstantiator.java --- a/src/java.rmi/share/classes/java/rmi/activation/ActivationInstantiator.java Fri Jan 13 12:35:53 2017 -0800 +++ b/src/java.rmi/share/classes/java/rmi/activation/ActivationInstantiator.java Wed Feb 01 12:44:24 2017 -0800
@@ -60,7 +60,20 @@
     * initialization data, and
     *
     * <li> returning a MarshalledObject containing the stub for the
-    * remote object it created </ul>
+    * remote object it created.</ul>
+    *
+ * <p>In order for activation to be successful, one of the following requirements
+    * must be met, otherwise {@link ActivationException} is thrown:
+    *
+ * <ul><li>The class to be activated and the special activation constructor are both public,
+    * and the class resides in a package that is
+ * {@linkplain java.lang.reflect.Module#isExported(String,java.lang.reflect.Module) exported}
+    * to the {@code java.rmi} module; or
+    *
+    * <li>The class to be activated resides in a package that is
+ * {@linkplain java.lang.reflect.Module#isOpen(String,java.lang.reflect.Module) open}
+    * to the {@code java.rmi} module.
+    * </ul>
     *
     * @param id the object's activation identifier
     * @param desc the object's descriptor
diff -r 0e0e0fbc5bf3 
src/java.rmi/share/classes/java/rmi/activation/Activator.java
--- a/src/java.rmi/share/classes/java/rmi/activation/Activator.java Fri Jan 13 12:35:53 2017 -0800 +++ b/src/java.rmi/share/classes/java/rmi/activation/Activator.java Wed Feb 01 12:44:24 2017 -0800
@@ -48,7 +48,7 @@
  * The <code>Activator</code> works closely with
  * <code>ActivationSystem</code>, which provides a means for registering
  * groups and objects within those groups, and <code>ActivationMonitor</code>,
- * which recives information about active and inactive objects and inactive
+ * which receives information about active and inactive objects and inactive
  * groups. <p>
  *
  * The activator is responsible for monitoring and detecting when
diff -r 0e0e0fbc5bf3 src/java.rmi/share/classes/java/rmi/server/UnicastRemoteObject.java --- a/src/java.rmi/share/classes/java/rmi/server/UnicastRemoteObject.java Fri Jan 13 12:35:53 2017 -0800 +++ b/src/java.rmi/share/classes/java/rmi/server/UnicastRemoteObject.java Wed Feb 01 12:44:24 2017 -0800
@@ -107,8 +107,9 @@
  * the binary name of the root class with the suffix {@code _Stub}.
  *
  * <li>The stub class is loaded by name using the class loader of the root
- * class. The stub class must extend {@link RemoteStub} and must have a
- * public constructor that has one parameter of type {@link RemoteRef}.
+ * class. The stub class must be public, it must extend {@link RemoteStub}, it 
must
+ * reside in a package that is exported to the {@code java.rmi} module, and it
+ * must have a public constructor that has one parameter of type {@link 
RemoteRef}.
  *
  * <li>Finally, an instance of the stub class is constructed with a
  * {@link RemoteRef}.
@@ -124,12 +125,21 @@
  *
  * <ul>
  *
- * <li>The proxy's class is defined by the class loader of the remote
- * object's class.
+ * <li>The proxy's class is defined according to the specifications for the
+ * <a href="{@docRoot}/java/lang/reflect/Proxy.html#membership">
+ * {@code Proxy}
+ * </a>
+ * class, using the class loader of the remote object's class.
  *
  * <li>The proxy implements all the remote interfaces implemented by the
  * remote object's class.
  *
+ * <li>Each remote interface must either be public and reside in a package 
that is
+ * {@linkplain java.lang.reflect.Module#isExported(String,java.lang.reflect.Module) exported}
+ * to the {@code java.rmi} module, or it must reside in a package that is
+ * {@linkplain java.lang.reflect.Module#isOpen(String,java.lang.reflect.Module) open}
+ * to the {@code java.rmi} module.
+ *
  * <li>The proxy's invocation handler is a {@link
  * RemoteObjectInvocationHandler} instance constructed with a
  * {@link RemoteRef}.

Reply via email to