[jboss-dev-forums] [Design of POJO Server] - Deploying content installed after server start

bstansberry@jboss.com do-not-reply at jboss.com
Wed Jun 25 13:57:55 EDT 2008


Been digging into why my old VFSDeploymentScanner-based approach to deploying deploy-hasingleton content doesn't work to see if a temporary workaround was feasible for CR1 (tnot feasible and too late anyway, but that's not the point of this post). The problem I'm seeing looks like it would be a general one for any addition to a profile that's made after ProfileServiceBootstrap.start() executes.

Basic issue is the VFSDeploymentScanner-based approach responds to becoming the singleton master by scanning deploy-hasingleton and invoking Profile.addDeployment(VFSDeployment, DeploymentPhase) for each item found. That works fine.

What breaks is the profile impl ends up storing the deployment in a Map<String,VFSDeployment>.  The deployment then gets added to the runtime by an HDScanner, which looks for modified deployments.  The relevant bit can be boiled down to this pseudo-code:


  | Iterator<VFSDeployment> iter = apps.iterator();
  | while( iter.hasNext() )
  | {
  |    VFSDeployment ctx = iter.next();
  |    VirtualFile root = ctx.getRoot();
  |    if ( root.hasBeenModified() )  // PROBLEM!!!
  |    {
  |       ... add to a list of things to deploy
  |    }
  | }
  | 
  | // Assume applicationDir points to deploy-hasingleton
  | VirtualFile deployDir = VFS.getRoot(applicationDir.toURI());
  | List<VirtualFile> children = deployDir.getChildren();
  | for(VirtualFile vf : children)
  | {
  |    String key = vf.toURI().toString();
  |    if( applicationCtxs.containsKey(key) == false )   // PROBLEM!!!
  |    {
  |          ... add to a list of things to deploy
  |    }
  | }
  | 

Problem is the 2 areas commented "PROBLEM!!!".  In the first one, the newly added deployment doesn't get included in the modification list because the VirtualFile hasn't been modified.  In the second case the newly added deployment doesn't get included in the modification list because the call to Profile.addDeployment() resulted in it getting added to the applicationCtxs map.

So, the new content doesn't ever get deployed. I would expect that with any code that calls Profile.addDeployment(), the result would be the same -- the new deployment doesn't get installed into the runtime.

For sure I see this with the basic ProfileService impl.  Looking at the code I expect the same behavior with the repository-based impl, although I haven't confirmed that yet.

I'll look around some more; also see if there are unit tests that cover this.

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

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



More information about the jboss-dev-forums mailing list