You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-user@portals.apache.org by Ron Wheeler <rw...@artifact-software.com> on 2010/02/15 20:47:08 UTC
Re: batch creation of users and roles
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-unsubscribe@portals.apache.org
>> For additional commands, e-mail: jetspeed-user-help@portals.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
> For additional commands, e-mail: jetspeed-user-help@portals.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-user-help@portals.apache.org
Re: batch creation of users and roles
Posted by Randy Watler <wa...@wispertel.net>.
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-unsubscribe@portals.apache.org
>>> For additional commands, e-mail: jetspeed-user-help@portals.apache.org
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
>> For additional commands, e-mail: jetspeed-user-help@portals.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
> For additional commands, e-mail: jetspeed-user-help@portals.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-user-help@portals.apache.org