Ron,

Those variables are used to control the batch process. In this case, they were located in a maven build pom.xml file.

Of course, they could easily be specified using the JVM parameter... like this:

java -Djetspeed.administration.register.users.count=1000 ...

Let me know if I can help further...

Randy

Ron Wheeler wrote:
It has been a while but we are now in the middle of trying to get our batch process going.

It seems that we are getting back NULL for
  String appRoot = System.getProperty("applicationRoot");
int count = Integer.parseInt(System.getProperty("jetspeed.administration.register.users.count"));

These seem to be system variables and I am not sure how they get set, when they get set of even if they get set.

There are a lot of these types of calls and only some of them actually look essential to what we want to do.

String prefix = System.getProperty("jetspeed.administration.register.users.prefix", ""); String profilerPageRule = getValueOrNull(System.getProperty("jetspeed.administration.register.users.profiler.page.rule"));
look like the type of things that might be required.
I have not been able to figure out what these mean and what their values should be for us if we can not get the property from System. I do not mind hardcodin stuff or adding it to a spring configuration if that is what we have to do.

What fundamental concept am I missing? Any docs that I should be reading?

Thanks

Ron



Randy Watler wrote:
Ron,

Here are some samples for 2.1.3 that might help you get started.

HTH,

Randy

RegisterTestUsers.java
-------------------------------------------------------------------------------------

package jetspeed.administration;

import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import org.apache.jetspeed.security.SecurityException;

import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.jetspeed.Jetspeed;
import org.apache.jetspeed.administration.PortalAdministration;
import org.apache.jetspeed.components.SpringComponentManager;
import org.apache.jetspeed.components.factorybeans.ServletConfigFactoryBean;
import org.apache.jetspeed.components.jndi.JetspeedTestJNDIComponent;
import org.apache.jetspeed.engine.JetspeedEngine;
import org.apache.jetspeed.mocks.ResourceLocatingServletContext;

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

import com.mockrunner.mock.web.MockServletConfig;

public class RegisterTestUsers
{
   public static void main(String args[]) throws Exception
   {
       String appRoot = System.getProperty("applicationRoot");
int count = Integer.parseInt(System.getProperty("jetspeed.administration.register.users.count")); String prefix = System.getProperty("jetspeed.administration.register.users.prefix", ""); String profilerPageRule = getValueOrNull(System.getProperty("jetspeed.administration.register.users.profiler.page.rule"));
       HashMap profilerRules = null;
       if (profilerPageRule != null )
       {
           profilerRules = new HashMap();
           profilerRules.put("page", profilerPageRule);
       }
String templateFolder = getValueOrNull(System.getProperty("jetspeed.administration.register.users.template.folder")); JetspeedTestJNDIComponent jndiDS = new JetspeedTestJNDIComponent();
       jndiDS.setup();

       PropertiesConfiguration config = new PropertiesConfiguration();
config.load(new FileInputStream(appRoot+"/WEB-INF/conf/jetspeed.properties")); MockServletConfig servletConfig = new MockServletConfig(); ResourceLocatingServletContext servletContent = new ResourceLocatingServletContext(new File(appRoot)); servletConfig.setServletContext(servletContent);
       ServletConfigFactoryBean.setServletConfig(servletConfig);

final String assemblyDir = config.getString("assembly.dir","/WEB-INF/assembly"); final String assemblyFileExtension = config.getString("assembly.extension",".xml"); String[] bootConfigs = new String[] {"/WEB-INF/assembly/boot/*.xml"}; String[] appConfigs = new String[] {assemblyDir+"/*"+assemblyFileExtension, assemblyDir+"/override/*"+assemblyFileExtension}; SpringComponentManager scm = new SpringComponentManager(bootConfigs, appConfigs, servletContent, appRoot ); JetspeedEngine engine = new JetspeedEngine(config, appRoot, servletConfig, scm );
       Jetspeed.setEngine(engine);
       engine.start();
final PlatformTransactionManager txnManager = (PlatformTransactionManager)scm.getComponent("transactionManager"); final DefaultTransactionDefinition txnDefinition = new DefaultTransactionDefinition();
       txnDefinition.setName("RegisterTestUsers");
txnDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

       try
       {
PortalAdministration portalAdministration = (PortalAdministration)scm.getComponent("PortalAdministrationImpl");
           if (count > 0)
           {
System.out.println("Registering: "+count+" users with prefix: "+prefix);

               // open transaction
TransactionStatus txnStatus = txnManager.getTransaction(txnDefinition);

               // execute transactional operations
               try
               {
                   for (int i = 1; i <= count; i++)
                   {
                       String name = prefix+Integer.toString(i);
System.out.print("Registering user: "+name+" ... ");
                       try
                       {
portalAdministration.registerUser(name,name, null, null, null, profilerRules, templateFolder);
                       }
                       catch (Exception e)
                       {
if (e.getCause() != null && e.getCause() instanceof SecurityException)
                           {
SecurityException se = (SecurityException)e.getCause(); if (se.getKeyedMessage().equals(SecurityException.USER_ALREADY_EXISTS))
                               {
                                   continue;
                               }
                           }
                           throw e;
                       }
                       System.out.println("done");

                       // commit every 250 users
                       if (((i%250) == 0) && (i < count))
                       {
                           // commit and start new txn
                           System.out.print("Committing ... ");
                           txnManager.commit(txnStatus);
                           System.out.println("done");
txnStatus = txnManager.getTransaction(txnDefinition);
                       }
                   }
               }
               catch (Exception e)
               {
                   // rollback transaction
                   txnManager.rollback(txnStatus);
                   throw e;
               }
                             // commit transaction
               System.out.print("Committing ... ");
txnManager.commit(txnStatus); System.out.println("done");
           }
       }
       finally
       {
           engine.shutdown();
       }
   }
     private static String getValueOrNull(String value)
   {
       if (value != null && value.length()==0)
       {
           value = null;
       }
       return value;
   }
}

RegisterTestUserPrefs.java
-------------------------------------------------------------------------------------

package jetspeed.administration;

import java.io.File;
import java.io.FileInputStream;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.jetspeed.Jetspeed;
import org.apache.jetspeed.administration.PortalConfigurationConstants;
import org.apache.jetspeed.components.SpringComponentManager;
import org.apache.jetspeed.components.factorybeans.ServletConfigFactoryBean;
import org.apache.jetspeed.components.jndi.JetspeedTestJNDIComponent;
import org.apache.jetspeed.engine.JetspeedEngine;
import org.apache.jetspeed.om.page.Fragment;
import org.apache.jetspeed.om.page.Page;
import org.apache.jetspeed.om.folder.Folder;
import org.apache.jetspeed.page.PageManager;
import org.apache.jetspeed.page.document.NodeSet;
import org.apache.jetspeed.prefs.FailedToCreateNodeException;
import org.apache.jetspeed.prefs.NodeAlreadyExistsException;
import org.apache.jetspeed.prefs.NodeDoesNotExistException;
import org.apache.jetspeed.prefs.om.impl.NodeImpl;
import org.apache.jetspeed.prefs.impl.NodeImplProxy;
import org.apache.jetspeed.prefs.PreferencesProvider;
import org.apache.jetspeed.prefs.om.Node;
import org.apache.jetspeed.mocks.ResourceLocatingServletContext;
import org.apache.jetspeed.security.JSSubject;
import org.apache.jetspeed.security.User;
import org.apache.jetspeed.security.UserManager;

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

import com.mockrunner.mock.web.MockServletConfig;

public class RegisterTestUserPrefs
{
   public static void main(String args[]) throws Exception
   {
       final String appRoot = System.getProperty("applicationRoot");
final int count = Integer.parseInt(System.getProperty("jetspeed.administration.register.users.count")); final String prefix = System.getProperty("jetspeed.administration.register.users.prefix", "");

JetspeedTestJNDIComponent jndiDS = new JetspeedTestJNDIComponent();
       jndiDS.setup();

       PropertiesConfiguration config = new PropertiesConfiguration();
config.load(new FileInputStream(appRoot+"/WEB-INF/conf/jetspeed.properties")); MockServletConfig servletConfig = new MockServletConfig(); ResourceLocatingServletContext servletContent = new ResourceLocatingServletContext(new File(appRoot)); servletConfig.setServletContext(servletContent);
       ServletConfigFactoryBean.setServletConfig(servletConfig);

final String assemblyDir = config.getString("assembly.dir","/WEB-INF/assembly"); final String assemblyFileExtension = config.getString("assembly.extension",".xml"); String[] bootConfigs = new String[] {"/WEB-INF/assembly/boot/*.xml"}; String[] appConfigs = new String[] {assemblyDir+"/*"+assemblyFileExtension, assemblyDir+"/override/*"+assemblyFileExtension}; SpringComponentManager scm = new SpringComponentManager(bootConfigs, appConfigs, servletContent, appRoot ); JetspeedEngine engine = new JetspeedEngine(config, appRoot, servletConfig, scm );
       Jetspeed.setEngine(engine);
       engine.start();
final Configuration portalConfig = (Configuration)scm.getComponent("portal_configuration"); final String adminUserName = portalConfig.getString(PortalConfigurationConstants.USERS_DEFAULT_ADMIN); final UserManager userManager = (UserManager)scm.getComponent("org.apache.jetspeed.security.UserManager");
       final User adminUser = userManager.getUser(adminUserName);
final PageManager pageManager = (PageManager)scm.getComponent("pageManager"); final PreferencesProvider preferencesProvider = (PreferencesProvider)scm.getComponent("prefsProvider"); final PlatformTransactionManager txnManager = (PlatformTransactionManager)scm.getComponent("transactionManager"); final DefaultTransactionDefinition txnDefinition = new DefaultTransactionDefinition();
       txnDefinition.setName("RegisterTestUserPrefs");
txnDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
             try
       {
           if (count > 0)
           {
System.out.println("Registering prefs: "+count+" users with prefix: "+prefix);

// perform registration as admin user so that pages can be read Exception actionException = (Exception)JSSubject.doAsPrivileged(adminUser.getSubject(), new PrivilegedAction()
               {
                   public Object run()
                   {
                       // open transaction
TransactionStatus txnStatus = txnManager.getTransaction(txnDefinition);

                       // execute transactional operations
                       try
                       {
// create map of preference nodes for this transaction
                           Map preferencesMap = new HashMap();
// find shared portal pages Folder rootFolder = pageManager.getFolder("/");
                           List sharedPages = new ArrayList();
                           findPages(rootFolder, sharedPages);

                           for (int i = 1; i <= count; i++)
                           {
                               String name = prefix+Integer.toString(i);
System.out.print("Registering prefs for user: "+name+" ... ");

// access list of fragments that can be visited by user
                               List userPages = new ArrayList();
Folder userFolder = pageManager.getFolder(Folder.USER_FOLDER + name);
                               findPages(userFolder, userPages);
                               List addSharedPages = new ArrayList();
// merge shared pages not replaced by user pages via standard profiler for (Iterator sharedIter = sharedPages.iterator(); sharedIter.hasNext();)
                               {
Page sharedPage = (Page)sharedIter.next();
                                   boolean sharedPageHidden = false;
for (Iterator userIter = userPages.iterator(); userIter.hasNext();)
                                   {
Page userPage = (Page)userIter.next(); String userPageProfiledPath = userPage.getPath().substring(userFolder.getPath().length()); if (userPageProfiledPath.equals(sharedPage.getPath()))
                                       {
                                           sharedPageHidden = true;
                                       }
                                   }
                                   if (!sharedPageHidden)
                                   {
                                       addSharedPages.add(sharedPage);
                                   }
                               }
                               userPages.addAll(addSharedPages);
                               // find fragments in all pages
                               List userFragments = new ArrayList();
for (Iterator iter = userPages.iterator(); iter.hasNext();)
                               {
                                   Page page = (Page)iter.next();
findFragments(page.getRootFragment(), userFragments);
                               }
// register empty preferences tree for potentially visited // fragments and a user defined preference for portlets
                               // with a defined default preference
Node rootPreference = createUserPreference(preferencesProvider, null, "/", "", preferencesMap); rootPreference = createUserPreference(preferencesProvider, rootPreference, "/portlet_entity", "portlet_entity", preferencesMap); for (Iterator iter = userFragments.iterator(); iter.hasNext();)
                               {
Fragment fragment = (Fragment)iter.next(); String portletEntityId = fragment.getId();
                                   // empty preferences tree
Node preference = createUserPreference(preferencesProvider, rootPreference, "/portlet_entity/"+portletEntityId, portletEntityId, preferencesMap); preference = createUserPreference(preferencesProvider, preference, "/portlet_entity/"+portletEntityId+"/"+name, name, null); preference = createUserPreference(preferencesProvider, preference, "/portlet_entity/"+portletEntityId+"/"+name+"/preferences", "preferences", null); // user defined preference, (assume preferences defined for j2pt portlets with "prefs" in name) String [] portletNames = fragment.getName().split("::"); String portletAppName = portletNames[0];
                                   String portletName = portletNames[1];
if ((portletAppName.toLowerCase().indexOf("j2pt") != -1) && (portletName.toLowerCase().indexOf("prefs") != -1))
                                   {
// add j2pt user preference: name=pref-0, value=<name>-pref-0-value Node userPreference = createUserPreference(preferencesProvider, preference, "/portlet_entity/"+portletEntityId+"/"+name+"/preferences/pref-0", "pref-0", null); Node userPreferenceValues = createUserPreference(preferencesProvider, userPreference, "/portlet_entity/"+portletEntityId+"/"+name+"/preferences/pref-0/values", "values", null); if (userPreferenceValues.getNodeProperties().isEmpty())
                                       {
userPreferenceValues.getNodeProperties().add(preferencesProvider.createProperty(userPreferenceValues, "0", name+"-pref-0-value")); preferencesProvider.storeNode(userPreferenceValues);
                                       }
Node userPreferenceSize = createUserPreference(preferencesProvider, userPreference, "/portlet_entity/"+portletEntityId+"/"+name+"/preferences/pref-0/size", "size", null); if (userPreferenceSize.getNodeProperties().isEmpty())
                                       {
userPreferenceSize.getNodeProperties().add(preferencesProvider.createProperty(userPreferenceValues, "size", "1")); preferencesProvider.storeNode(userPreferenceSize);
                                       }
                                   }
                               }

                               System.out.println("done");
// commit every 250 users and reset cached data
                               if (((i%250) == 0) && (i < count))
                               {
                                   // commit and start new txn
                                   System.out.print("Committing ... ");
                                   txnManager.commit(txnStatus);
                                   System.out.println("done");
txnStatus = txnManager.getTransaction(txnDefinition); // reset cached data rootFolder = pageManager.getFolder("/");
                                   sharedPages.clear();
                                   findPages(rootFolder, sharedPages);
                                   preferencesMap.clear();
                               }
                           }
// clear cached data for this transaction
                           rootFolder = null;
                           sharedPages.clear();
preferencesMap.clear(); }
                       catch (Exception e)
                       {
                           // rollback transaction
                           txnManager.rollback(txnStatus);
                           return e;
                       }

                       // commit transaction
                       System.out.print("Committing ... ");
                       txnManager.commit(txnStatus);
                       System.out.println("done");
                       return null;
                   }
               }, null);
               if (actionException != null)
               {
                   throw actionException;
               }
           }
       }
       finally
       {
           engine.shutdown();
       }
   }

private static void findPages(Folder folder, List pages) throws Exception
   {
       // get folder pages
       NodeSet folderPages = folder.getPages();
       for (Iterator iter = folderPages.iterator(); iter.hasNext();)
       {
           Page page = (Page)iter.next();
           if (!page.isHidden())
           {
               pages.add(page);
           }
       }
       // recursively get folder pages
       NodeSet folders = folder.getFolders();
       for (Iterator iter = folders.iterator(); iter.hasNext();)
       {
           Folder folderFolder = (Folder)iter.next();
if (!folderFolder.isHidden() && !folderFolder.isReserved() && !folderFolder.getName().startsWith(Folder.RESERVED_FOLDER_PREFIX))
           {
               findPages(folderFolder, pages);
           }
       }
   }

private static void findFragments(Fragment fragment, List fragments) throws Exception
   {
       // get fragment
       fragments.add(fragment);
       // recursively get fragments
       List fragmentChildren = fragment.getFragments();
for (Iterator iter = fragmentChildren.iterator(); iter.hasNext();)
       {
           findFragments((Fragment)iter.next(), fragments);
       }
   }
private static Node createUserPreference(PreferencesProvider preferencesProvider, Node parent, String path, String name, Map preferencesMap) throws Exception
   {
       // lookup, query, or create user preference
       Node preference = null;
       if (preferencesMap != null)
       {
           // lookup preference in map
           preference = (Node)preferencesMap.get(path);
           if (preference == null)
           {
               // assume preference needs to be looked up
               try
               {
                   preference = preferencesProvider.getNode(path, 0);
               }
               catch (NodeDoesNotExistException ndnee)
               {
preference = rawCreateNode(preferencesProvider, parent, name, 0, path);
               }
               preferencesMap.put(path, preference);
           }
       }
       else
       {
           // assume preference needs to be created
           try
           {
preference = rawCreateNode(preferencesProvider, parent, name, 0, path);
           }
           catch (NodeAlreadyExistsException naee)
           {
               preference = preferencesProvider.getNode(path, 0);
           }
       }
       return preference;
   }
private static Node rawCreateNode(PreferencesProvider preferencesProvider, Node parent, String name, int type, String path) throws FailedToCreateNodeException, NodeAlreadyExistsException
   {
       // create node without testing for existence; see implementation
       // of PersistenceBrokerPreferencesProvider.createNode()
       Long parentNodeId = null;
       if (null != parent)
       {
           parentNodeId = new Long(parent.getNodeId());
       }
Node node = new NodeImplProxy(new NodeImpl(parentNodeId, name, type, path));
       try
       {
           preferencesProvider.storeNode(node);
       }
       catch (Exception e)
       {
           if (preferencesProvider.nodeExists(path, type))
           {
throw new NodeAlreadyExistsException("Node of type "+type+" already exists at path "+path);
           }
throw new FailedToCreateNodeException("Failed to create node of type "+type+" for the path "+path+". "+e, e);
       }
       return node;
   }
}


Ron Wheeler wrote:
Ron Wheeler wrote:
David Sean Taylor wrote:

On Aug 20, 2009, at 12:39 PM, Ron Wheeler wrote:

We need to build a batch process to update the Jetspeed users and their roles each night

Can we do this outside the Jetspeed portal context?
Is there an example of batch processes access/modifying Jetspeed's data.

Yes this is possible. Take a look at the Jetspeed Serializer for an example of how to create a command line utility to run start up Jetspeed, link in the jar files, and assemble the Spring files

Or you could run a scheduled service from directly in your server. We don't have a scheduler service, you would have to add in Spring scheduler such as http://www.opensymphony.com/quartz/
I was thinking of using Quartz since I need to schedule the activity to happen at 3 AM and I don't want to have to get up to push a button. I may try to put the task in Ant since I do need to do some other steps prior to the update and I think that Ant has the tasks that I need.

I have the Spring/Quartz documentation and Spring Batch so that part is covered. My question is less about the scheduling and more about how to access Jetspeed functions outside a portal or servlet environment.

Ron



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-user-h...@portals.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-user-h...@portals.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-user-h...@portals.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-user-h...@portals.apache.org

Reply via email to