river-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter <j...@zeus.net.au>
Subject Re: Activation subsystem - Non-public Interfaces
Date Mon, 02 Nov 2015 22:29:24 GMT
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
>
>


Mime
View raw message