code to build a jcr package | Community
Skip to main content
April 2, 2017
Solved

code to build a jcr package

  • April 2, 2017
  • 5 replies
  • 2271 views

Tried with :    

private void doPackaging(List<String> pagePaths) throws IOException, JSONException, RepositoryException, LoginException {
        List<org.apache.jackrabbit.vault.fs.api.PathFilterSet> pathFilterSets = new ArrayList<org.apache.jackrabbit.vault.fs.api.PathFilterSet>();
        final Map<String, String> packageDefinitionProperties = new HashMap<String, String>();
        // ACL Handling
        packageDefinitionProperties.put(JcrPackageDefinition.PN_AC_HANDLING,
                AccessControlHandling.OVERWRITE.toString());
        // Package Description
        packageDefinitionProperties.put(
                JcrPackageDefinition.PN_DESCRIPTION,
                "package" + new Date().getTime());
        final JcrPackage jcrPackage = packageHelper.createPackageForPaths(pagePaths,
                resourceResolverFactory.getAdministrativeResourceResolver(null).adaptTo(Session.class),
                "PackageGroup",
                "PackageName",
                "1.0.0",
                PackageHelper.ConflictResolution.valueOf(PackageHelper.ConflictResolution.IncrementVersion.toString()),
                packageDefinitionProperties
        );
        try {
            ProgressTrackerListener listener = new DefaultProgressListener();
            JcrPackageManager jcrPackageManager =        packaging.getPackageManager(resourceResolverFactory.getAdministrativeResourceResolver(null).adaptTo(Session.class));
            jcrPackageManager.assemble(jcrPackage, listener);

            
        } catch (Exception e) {
            log.error("ErrorHere : "+e.getMessage());
        }

        log.debug("Successfully created JCR package");
    }

Error : 
ErrorHere : JcrFS is not mounted anymore."

Any suggestions ?

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Singaiah_Chintalapudi

This code will work:

public JcrPackage buildPackage()
  {
    JcrPackage jcrPackage = null;
    
    try
    {
      Packaging packaging  = // GET the Packaging service reference
      JcrPackageManager  m_jcrPkgMgr = packaging.getPackageManager(session); // You need a session here. You can pass the session to this method or you can use system user to get the session. Make sure this user hams permissions to create the package under /etc/packages.


      jcrPackage = m_jcrPkgMgr.create("my_packages", 
                                      "testpkg", 
                                      "1");
      
      JcrPackageDefinition jcrPackageDefinition = jcrPackage.getDefinition();
      
      DefaultWorkspaceFilter workspaceFilter = new DefaultWorkspaceFilter();
      
      workspaceFilter.add(new PathFilterSet("/content/geometrixx-media/en"));
      workspaceFilter.add(new PathFilterSet("/content/geometrixx/en/company");
      
      boolean autoSave = true;
      jcrPackageDefinition.setFilter(workspaceFilter, autoSave);

      ProgressTrackerListener listener = new DefaultProgressListener();
      m_jcrPkgMgr.assemble(jcrPackage, listener);
    }
    catch(Exception e)
    {
      
      // Catch exception here
    }
      
    return jcrPackage;
    
  } 

5 replies

Ratna_Kumar
April 3, 2017

Hi Phani,

Did you tried this below approach, it may help your use case:

Creating Adobe Experience Manager Packages using the JcrPackageManager.API
//https://helpx.adobe.com/experience-manager/using/dynamic_aem_packages.html

~ Ratna.

phani2811Author
April 3, 2017

Yes , already tried it.

It’s just creating the package but not building it.

MC_Stuff
April 3, 2017

Hi,

Error indicates the attached session is not live. Is it happening intermediately when you build a large content?

Thanks,

vjetty
April 3, 2017

Hi, Phani

Hope this Helps...

http://help-forums.adobe.com/content/adobeforums/en/experience-manager-forum/adobe-experience-manager.topic.html/forum__twqr-hello_i_am_able.html

And, try avoiding getAdministrativeResourceResolver. Instead use getServiceResourceResolver. 

I've been facing issues previously with session while handling huge number of nodes. Try this and see. 

Thanks! 

Singaiah_Chintalapudi
Singaiah_ChintalapudiAccepted solution
April 3, 2017

This code will work:

public JcrPackage buildPackage()
  {
    JcrPackage jcrPackage = null;
    
    try
    {
      Packaging packaging  = // GET the Packaging service reference
      JcrPackageManager  m_jcrPkgMgr = packaging.getPackageManager(session); // You need a session here. You can pass the session to this method or you can use system user to get the session. Make sure this user hams permissions to create the package under /etc/packages.


      jcrPackage = m_jcrPkgMgr.create("my_packages", 
                                      "testpkg", 
                                      "1");
      
      JcrPackageDefinition jcrPackageDefinition = jcrPackage.getDefinition();
      
      DefaultWorkspaceFilter workspaceFilter = new DefaultWorkspaceFilter();
      
      workspaceFilter.add(new PathFilterSet("/content/geometrixx-media/en"));
      workspaceFilter.add(new PathFilterSet("/content/geometrixx/en/company");
      
      boolean autoSave = true;
      jcrPackageDefinition.setFilter(workspaceFilter, autoSave);

      ProgressTrackerListener listener = new DefaultProgressListener();
      m_jcrPkgMgr.assemble(jcrPackage, listener);
    }
    catch(Exception e)
    {
      
      // Catch exception here
    }
      
    return jcrPackage;
    
  }