Hmm,
Last time we tried to remove Phoenix, someone replied to this list, who
was reportedly using it as a watchdog, so we ended up retaining it.
Have a look in the qa-refactor branch, there may be some comments in the
code. All activation tests pass there and it runs on JDK8. It's
probably something simple that's causing the issue.
If you want the 2.2 branch to run on Java 9, you'll need the security
policy providers from qa-refactor as these don't need to be loaded from
the extension classloader. The extension mechanism has been removed
from Java 9. It's worth remembering however, that those policy
providers are built for concurrency and scalability, which unfortunately
exposed the concurrency bugs that instigated the work in qa-refactor.
Another way to solve that problem would be to only use the policy parser
from qa-refactor and build your own file policy provider that uses a
HashMap with CodeSource as key's and Permissions (an instance of
PermissionCollection) as values, that should eliminate concurrency and
ensure latent bugs aren't exposed, if you want the 2.2 branch to live
beyond Java 8.
In my local copy of River, I also removed rmi stub generation, all
except for one local stub in Phoenix related to Activation, at some
point after River 3.0 is released, I'll investigate how to commit parts
of my local work back into River.
Regards,
Peter.
On 3/11/2015 12:24 AM, Greg Trasuk wrote:
Hi all:
I’m attempting to apply Shawn Ellis’s patch from RIVER-444 to allow the 2.2
branch to build under JDK8. On running the QA package, I’m getting errors on
the tests that use the activation subsystem. They are similar to:
proxy implements non-public interface
'com.sun.jini.test.impl.joinmanager.LeaseRenewDurRFE$RemoteTestServiceInterface’
The exception is thrown from the getSuperInterfaces(…) method inside
ActivationExporter. (note that this is after I modified ActivationExporter to
tell me the name of the non-public interface).
/*
* Complain if the underlying proxy has a non-public class and
* implements non-public interfaces.
*/
if (checkPublic&& !Modifier.isPublic(intf.getModifiers())) {
throw new ExportException(
"proxy implements non-public interface" + " '" + intf.getName() +
"'");
}
So, I have a few questions…
First, does anyone actually use the Activation subsystem? I don’t and never
have, so personally I’d be fine with dropping Phoenix and net.jini.activation,
or at least just skipping the QA tests on it. Opinions?
ActivationExporter throws the exception above if the underlying proxy
implements any non-public interfaces. This seems reasonable, because
ActivationExporter needs to wrap the underlying activation proxy in another
proxy. Should we just make the required interfaces (like
'com.sun.jini.test.impl.joinmanager.LeaseRenewDurRFE$RemoteTestServiceInterface’)
public? As it’s part of the QA package, that seems pretty harmless, but I’m
sure there are others.
It’s funny that this is only showing up now. The code is in the 2.2 branch,
and I don’t see how it could be related to JDK8 (the problem also shows under
JDK7, btw). I believe the activation tests have been bypassed on the Jenkins
QA run.
I guess the question is, should we track down what’s going on in the activation
subsystem, or just bypass the tests and forget about it? And if that’s the
case, should we deprecate the JERI activation system? (FWIW, I’m OK with
deprecating it, but as I say, someone may be using it).
Cheers,
Greg Trasuk