I don't think I'm missing anything, just looking at it from perhaps a
different perspective :^)

First, 294 will determine accessibility for non-exported classes. The
assumption at the moment is that they will not be accessible to *any*
class outside of the module.

I do understand the value of a "friend" semantic; it would certainly be
nice to grant certain frameworks special access. But, so far, that is
not on the table for classes.

And if we don't have it for classes, I can't see why we should have it
for resources.

// Bryan

Glyn Normington wrote:

Some feedback from an observer which may help:

 > Bryan misses the need for extender model to load internal impl
classes ala
 > Bundle.loadClass in OSGi.
 >
 > You do not want to have to export the service impl class from a module.
 > You want to hide the class from others' casual loading. However an
 > extender bundle (e.g. ServiceLoader) will need to be able to load that
 > class to make it instances of it available to others under the service
 > interface class.

Glyn

*Bryan Atsatt <[EMAIL PROTECTED]>* wrote on 30/05/2007 21:21:36:

 > I've been assuming that Module private resources should not be visible
 > to *any* class outside of the module. Including ResourceBundle, or any
 > other existing framework classes that do resource lookups (e.g.
 > ServiceLoader, JSF, etc). If resources need to be visible to these
 > existing classes, they must be exported. The very simple check I
 > proposed (immediate caller) is sufficient to make this assertion.
 >
 > I believe your point is that if we used the permission model instead, it
 > would become possible for a module to invoke an external class (e.g.
 > ResourceBundle.getBundle()) and enable *it* to successfully load a
 > private resource from the module.
 >
 > Aside from the permission *grant* mechanism this model would rely on, it
 > is an entirely different model than that used for classes! (Though we
 > haven't explicitly defined this in 294, it seems extremely unlikely that
 > we will rely on permissions--none of the other access modes do so.) Such
 > asymmetry is very disconcerting to me, and, I believe, just plain
wrong...
 >
 > Consider that you could grant the ServiceLoader, for example, access to
 > a resource that names a class that it could not instantiate. That class
 > would have to be exported. I believe the resource should be as well.
 >
 > // Bryan
 >
 >
 >
 >
 > Stanley M. Ho wrote:
 > > Hi Bryan,
 > >
 > > Those resource-related methods in ClassLoader can be called by anyone,
 > > including code that is part of the module, code that is from other
 > > modules, or code that is part of the platform libraries (e.g.
 > > ResourceBundle). The approach you described would require walking the
 > > stack to get the caller's Module, but the real issue is that it is
 > > difficult to determine who the actual caller is from the stack.
 > >
 > > Treating the immediate caller on the stack as the actual caller
wouldn't
 > > be sufficient because the immediate caller could be called by someone
 > > else who is the one actually making the call. On the other hand,
 > > treating the originated caller on the stack as the actual caller would
 > > be the right semantic, but this is basically the same as the security
 > > permission approach.
 > >
 > > - Stanley
 > >
 > >
 > > Bryan Atsatt wrote:
 > >> Both solutions require stack walking (unless there is some new
 > >> implementation of the java security model I've not yet seen!).
 > >>
 > >> The permission check does much more work than is necessary here.
Take a
 > >> look at AccessController.checkPermission() to see what I mean.
 > >>
 > >> And actually there is a very simple API to get the stack, which I've
 > >> used for years:
 > >>
 > >>   private static class StackAccessor extends SecurityManager {
 > >>       public Class[] getStack() {
 > >>           return getClassContext();
 > >>       }
 > >>   }
 > >>
 > >>   private static final STACK_ACCESSOR = new StackAccessor();
 > >>
 > >> Now the enclosing class can simply call STACK_ACCESSOR.getStack().
 > >>
 > >> // Bryan
 > >>
 > >>
 > >>
 > >> Stanley M. Ho wrote:
 > >>> Hi Bryan,
 > >>>
 > >>> Bryan Atsatt wrote:
 > >>>> 1. Definitely agree that resource search order should be
identical to
 > >>>> class search order.
 > >>>
 > >>> Glad to hear!
 > >>>
 > >>>> 2. Using permissions to limit access to private resources seems like
 > >>>> overkill to me. The prototype implemented this in a very simple
 > >>>> fashion:
 > >>>>
 > >>>> a. If resource is exported, return it, else
 > >>>> a. Get the caller's Module (get class from stack, get module
from it)
 > >>>> b. If callerModule == this, return resource, else return null.
 > >>>
 > >>> The issue is that this approach still requires stack walking and
there
 > >>> is no public API in the SE platform that let you implement this.
 > >>>
 > >>> If stack walking is required for the check anyway, I think the
security
 > >>> permission approach is better that it is implementable with the
existing
 > >>> API in the SE platform.
 > >>>
 > >>> - Stanley
 > >>>
 > >



------------------------------------------------------------------------

/
/

/Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU/






Reply via email to