6 Replies Latest reply on Jul 13, 2009 2:06 PM by alrubinger

    Shortcomings of Virtual Archives (in progress)

    alrubinger

      Given the following code:

      final VirtualVfsArchive deployment = new VirtualVfsArchiveImpl(name).addClasses(OutputBean.class,
       OutputLocalBusiness.class);
      log.info(deployment.toString(true));


      ...we get:

      01:21:52,305 INFO [ServerTestCase] MemoryContextHandler@2105530421[path= context=vfsmemory://testDeployment.jar real=vfsmemory://testDeployment.jar]
       - 0 bytes
      org - 0 bytes
      org/jboss - 0 bytes
      org/jboss/embedded - 0 bytes
      org/jboss/embedded/testsuite - 0 bytes
      org/jboss/embedded/testsuite/fulldep - 0 bytes
      org/jboss/embedded/testsuite/fulldep/ejb3 - 0 bytes
      org/jboss/embedded/testsuite/fulldep/ejb3/slsb - 0 bytes
      org/jboss/embedded/testsuite/fulldep/ejb3/slsb/OutputBean.class - 844 bytes
      org/jboss/embedded/testsuite/fulldep/ejb3/slsb/OutputLocalBusiness.class - 312 bytes


      It's nice from an API standpoint, and this is what we're aiming for at this stage in the game.

      However, the underlying impl is hacky. We've already loaded the class, yet what's happening under the covers is:

      1) Get the CL which loaded the class
      2) Get the URL of the resource representing the class
      3) Read in the bytes of the .class file
      4) Put those bytes into the virtual archive

      It's all done in VirtualVfsArchiveImpl. So this creates an inefficient memory structure where we're duplicating already-read bytes. Conversation w/ Jason and DML in #jboss-dev lead to the resolution that we'll need some indirection in here at some point to say "requests for this class within this virtual archive can look first at some internal Map of Classes". Carlo later pointed out that probably a virtual file handler is in order.

      So this is still a TODO. https://jira.jboss.org/jira/browse/EMB-35

      S,
      ALR