[jboss-dev-forums] [Design the new POJO MicroContainer] - Programmatic policy for jar handling

alesj do-not-reply at jboss.com
Tue Apr 15 06:40:16 EDT 2008


Regarding yesterday's discussion about breaking existing external frameworks working on top of VFS and no_copy jar handling.

One way to change the behavior is by changing URI, to add additional query parameter.
But I think we should add better control over this, introducing some sort of policy into VFSContext (or some other top level handle).
This is what I have initially in mind:

  | public interface JarHandlerPolicy
  | {
  |    /**
  |     * Should we create a copy.
  |     *
  |     * @param context
  |     * @param parent
  |     * @param jarFile
  |     * @param entry
  |     * @param url
  |     * @param entryName
  |     * @return
  |     */
  |    boolean createCopy(VFSContext context, VirtualFileHandler parent, JarFile jarFile, ZipEntry entry, URL url, String entryName);
  | }
  | 
which would get used at the point where we decide whether we copy the jar or not:

  |          JarHandlerPolicy policy = context.getPolicy();
  |          if (forceCopy || policy.createCopy(context, parent, getJar(), entry, url, entryName))
  |             vfh = NestedJarHandler.create(context, parent, getJar(), entry, url, entryName);
  |          else
  |             vfh = new NoCopyNestedJarHandler(context, parent, getJar(), entry, url, entryName);
  | 
And for example, very simple war policy would look like

  | public class WarHandlingPolicy extends AbstractJarHandlingPolicy
  | {
  |    public boolean internalCreateCopy(VFSContext context, VirtualFileHandler parent, JarFile jarFile, ZipEntry entry, URL url, String entryName)
  |    {
  |       return entryName.contains(".war");
  |    }
  | }
  | 
  | public abstract class AbstractJarHandlingPolicy implements JarHandlerPolicy
  | {
  |    public boolean createCopy(VFSContext context, VirtualFileHandler parent, JarFile jarFile, ZipEntry entry, URL url, String entryName)
  |    {
  |       return hasCopyOption(context) || internalCreateCopy(context, parent, jarFile, entry, url, entryName);
  |    }
  | 
  |    protected abstract boolean internalCreateCopy(VFSContext context, VirtualFileHandler parent, JarFile jarFile, ZipEntry entry, URL url, String entryName);
  |    
  |    protected boolean hasCopyOption(VFSContext context)
  |    {
  |       Map<String, String> options = context.getOptions();
  |       return (options != null && options.get(VFSUtils.USE_COPY_QUERY) != null);  
  |    }
  | }
  | 

The question is, if we decide to go this way, where do we set this policy?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4144184#4144184

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4144184



More information about the jboss-dev-forums mailing list