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