You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2009/04/29 07:59:46 UTC
svn commit: r769670 - in /portals/jetspeed-2/portal/trunk:
components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/cache/
components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/
components/jetspeed-portal/src/test/...
Author: rwatler
Date: Wed Apr 29 05:59:46 2009
New Revision: 769670
URL: http://svn.apache.org/viewvc?rev=769670&view=rev
Log:
JS2-893: Cluster Safe Portlet Application Manager Improvements
-----------------------------------------------------------------
- support concurrent startPortletApplication() invocation in both the default PAM and VersionedPAM implementations
- propagate error messages properly in multiple server test cases
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/tools/pamanager/TestPortletApplicationManager.java
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManagement.java
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/alternate/versioned-deployment/deployment.xml
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/deployment.xml
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java?rev=769670&r1=769669&r2=769670&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java Wed Apr 29 05:59:46 2009
@@ -563,7 +563,7 @@
private void logProcessLine(final String line)
{
- if (!line.contains("INFO") && (line.contains("ERROR") || line.contains("Exception") || line.matches("^\\s+at\\s")))
+ if (!line.contains("INFO") && (line.contains("ERROR") || line.contains("Exception") || line.matches("\\s+at\\s.*")))
{
log.error("{"+name+"} "+line);
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java?rev=769670&r1=769669&r2=769670&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java Wed Apr 29 05:59:46 2009
@@ -44,7 +44,7 @@
/**
* PortletApplicationManager
*
- * @author <a href="mailto:ate@douma.nu">Ate Douma</a>
+ * @author <a href="mailto:ate@douma.nu">Ate Doumaxs</a>
* @version $Id$
*/
public class PortletApplicationManager implements PortletApplicationManagement
@@ -53,14 +53,14 @@
private static int DEFAULT_MAX_RETRIED_STARTS = 10; // 10 times retry PA
private static final Logger log = LoggerFactory.getLogger("deployment");
- protected PortletFactory portletFactory;
- protected PortletRegistry registry;
- protected SearchEngine searchEngine;
- protected RoleManager roleManager;
- protected PermissionManager permissionManager;
- protected boolean autoCreateRoles;
- protected List<String> permissionRoles;
- protected int descriptorChangeMonitorInterval = DEFAULT_DESCRIPTOR_CHANGE_MONITOR_INTERVAL;
+ protected PortletFactory portletFactory;
+ protected PortletRegistry registry;
+ protected SearchEngine searchEngine;
+ protected RoleManager roleManager;
+ protected PermissionManager permissionManager;
+ protected boolean autoCreateRoles;
+ protected List<String> permissionRoles;
+ protected int descriptorChangeMonitorInterval = DEFAULT_DESCRIPTOR_CHANGE_MONITOR_INTERVAL;
/**
* holds the max number of retries in case of unsuccessful PA start
* this addresses possible startup errors in clustered environments
@@ -72,6 +72,9 @@
protected NodeManager nodeManager;
protected JetspeedDescriptorService descriptorService;
+ protected PortletApplicationManagement pamProxy;
+ protected boolean startOnSetPAMProxy;
+
/**
* Creates a new PortletApplicationManager object.
*/
@@ -91,14 +94,28 @@
this.descriptorService = descriptorService;
}
+ public void setPAMProxy(PortletApplicationManagement pamProxy)
+ {
+ this.pamProxy = pamProxy;
+ if (!started && startOnSetPAMProxy)
+ {
+ start();
+ }
+ }
+
public void start()
{
+ if ( pamProxy == null)
+ {
+ startOnSetPAMProxy = true;
+ return;
+ }
if ( descriptorChangeMonitorInterval > 0 )
{
try
{
monitor = new DescriptorChangeMonitor(Thread.currentThread().getThreadGroup(),
- "PortletApplicationManager Descriptor Change Monitor Thread", this, descriptorChangeMonitorInterval, maxRetriedStarts);
+ "PortletApplicationManager Descriptor Change Monitor Thread", pamProxy, descriptorChangeMonitorInterval, maxRetriedStarts);
monitor.setContextClassLoader(getClass().getClassLoader());
monitor.start();
@@ -157,7 +174,7 @@
throws RegistryException
{
checkStarted();
- startPA(contextName, "/"+contextName, warStruct, paClassLoader, PortletApplication.LOCAL);
+ retryStartPortletApplication(contextName, "/"+contextName, warStruct, paClassLoader, PortletApplication.LOCAL);
}
public void startPortletApplication(String contextName, FileSystemHelper warStruct,
@@ -175,15 +192,58 @@
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
try
{
- startPA(contextName, contextPath, warStruct, paClassLoader, PortletApplication.WEBAPP);
+ retryStartPortletApplication(contextName, contextPath, warStruct, paClassLoader, PortletApplication.WEBAPP);
}
finally
{
Thread.currentThread().setContextClassLoader(contextClassLoader);
- }
-
+ }
}
+ protected void retryStartPortletApplication(String contextName, String contextPath, FileSystemHelper warStruct, ClassLoader paClassLoader, int paType) throws RegistryException
+ {
+ // Retry to start application according to configuration. Note
+ // that this method is not declared transactional to allow clean
+ // retries within a single transaction.
+ RegistryException tryStartException = null;
+ for (int i = 0; (i < maxRetriedStarts+1); i++)
+ {
+ try
+ {
+ // try to start portlet application
+ pamProxy.tryStartPortletApplication(contextName, contextPath, warStruct, paClassLoader, paType, 0, true);
+ // continue on success
+ tryStartException = null;
+ break;
+ }
+ catch (RegistryException re)
+ {
+ // save exception
+ tryStartException = re;
+ }
+ // brief pause between retries to let portlet application
+ // state settle
+ try
+ {
+ Thread.sleep(50);
+ }
+ catch (InterruptedException ie)
+ {
+ }
+ }
+ // throw try start exception
+ if (tryStartException != null)
+ {
+ log.error("Unable to start portlet application after "+maxRetriedStarts+" retries: "+tryStartException, tryStartException);
+ throw tryStartException;
+ }
+ }
+
+ public void tryStartPortletApplication(String contextName, String contextPath, FileSystemHelper warStruct, ClassLoader paClassLoader, int paType, long checksum, boolean silent) throws RegistryException
+ {
+ attemptStartPA(contextName, contextPath, warStruct, paClassLoader, paType, checksum, silent);
+ }
+
public void stopLocalPortletApplication(String contextName)
throws RegistryException
{
@@ -271,7 +331,7 @@
}
protected PortletApplication registerPortletApplication(PortletApplicationWar paWar,
- PortletApplication oldPA, int paType, ClassLoader paClassLoader)
+ PortletApplication oldPA, int paType, ClassLoader paClassLoader, boolean silent)
throws RegistryException
{
long revision = 0;
@@ -305,7 +365,10 @@
{
String msg = "Failed to load portlet application for "
+ paWar.getPortletApplicationName();
- log.error(msg, e);
+ if (!silent || log.isDebugEnabled())
+ {
+ log.error(msg, e);
+ }
throw new RegistryException(msg);
}
@@ -349,7 +412,10 @@
catch (Exception e)
{
String msg = "Failed to register portlet application, " + paName;
- log.error(msg, e);
+ if (!silent || log.isDebugEnabled())
+ {
+ log.error(msg, e);
+ }
if (registered)
{
@@ -359,7 +425,10 @@
}
catch (Exception re)
{
- log.error("Failed to rollback registration of portlet application " + paName, re);
+ if (!silent || log.isDebugEnabled())
+ {
+ log.error("Failed to rollback registration of portlet application " + paName, re);
+ }
}
}
@@ -367,15 +436,8 @@
}
}
- protected void startPA(String contextName, String contextPath, FileSystemHelper warStruct,
- ClassLoader paClassLoader, int paType)
- throws RegistryException
- {
- startPA(contextName, contextPath, warStruct, paClassLoader, paType, 0);
- }
-
- protected void startPA(String contextName, String contextPath, FileSystemHelper warStruct,
- ClassLoader paClassLoader, int paType, long checksum)
+ protected void attemptStartPA(String contextName, String contextPath, FileSystemHelper warStruct,
+ ClassLoader paClassLoader, int paType, long checksum, boolean silent)
throws RegistryException
{
boolean register = true;
@@ -403,7 +465,7 @@
{
if (paClassLoader == null)
{
- paClassLoader = paWar.createClassloader(getClass().getClassLoader());
+ paClassLoader = paWar.createClassloader(this.getClass().getClassLoader());
}
// create checksum from PA descriptors
checksum = paWar.getPortletApplicationChecksum();
@@ -416,7 +478,10 @@
catch (IOException e)
{
String msg = "Invalid PA WAR for " + contextName;
- log.error(msg, e);
+ if (!silent || log.isDebugEnabled())
+ {
+ log.error(msg, e);
+ }
if ( paClassLoader == null )
{
// nothing to be done about it anymore: this pa is beyond repair :(
@@ -460,7 +525,7 @@
{
log.debug("Register new portlet application " + contextName + ".");
}
- pa = registerPortletApplication(paWar, pa, paType, paClassLoader);
+ pa = registerPortletApplication(paWar, pa, paType, paClassLoader, silent);
}
catch (Exception e)
{
@@ -545,7 +610,7 @@
{
log.debug("Register (deploy=true) Portlet application " + contextName + " in database.");
}
- pa = registerPortletApplication(paWar, pa, paType, paClassLoader);
+ pa = registerPortletApplication(paWar, pa, paType, paClassLoader, silent);
}
else
if (reregister)
@@ -593,7 +658,10 @@
{
String msg = "Error starting portlet application " + contextName;
- log.error(msg, e);
+ if (!silent || log.isDebugEnabled())
+ {
+ log.error(msg, e);
+ }
// monitor PA for changes
// do not add monitor if a monitor already exists
if (!monitored && changeMonitor != null)
@@ -858,13 +926,13 @@
}
}
- private PortletApplicationManager pam;
+ private PortletApplicationManagement pam;
private long interval;
private boolean started = true;
private ArrayList monitorInfos;
private int maxRetriedStarts;
- public DescriptorChangeMonitor(ThreadGroup group, String name, PortletApplicationManager pam, long interval, int maxretriedStarts)
+ public DescriptorChangeMonitor(ThreadGroup group, String name, PortletApplicationManagement pam, long interval, int maxretriedStarts)
{
super(group, name);
this.pam = pam;
@@ -989,8 +1057,8 @@
{
try
{
- pam.startPA(monitorInfo.getContextName(), monitorInfo.getContextPath(), new DirectoryHelper(monitorInfo.getPADir()),
- monitorInfo.getPAClassLoader(), monitorInfo.getPortletApplicationType(), monitorInfo.getChecksum());
+ pam.tryStartPortletApplication(monitorInfo.getContextName(), monitorInfo.getContextPath(), new DirectoryHelper(monitorInfo.getPADir()),
+ monitorInfo.getPAClassLoader(), monitorInfo.getPortletApplicationType(), monitorInfo.getChecksum(), true);
// great! we have a successful start. set unsuccessful starts to 0
monitorInfo.setUnsuccessfulStarts(0);
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java?rev=769670&r1=769669&r2=769670&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java Wed Apr 29 05:59:46 2009
@@ -83,8 +83,8 @@
}
// override to implement versioning logic
- protected void startPA(String contextName, String contextPath, FileSystemHelper warStruct,
- ClassLoader paClassLoader, int paType, long checksum)
+ protected void attemptStartPA(String contextName, String contextPath, FileSystemHelper warStruct,
+ ClassLoader paClassLoader, int paType, long checksum, boolean silent)
throws RegistryException
{
PortletApplicationWar paWar = null;
@@ -101,7 +101,10 @@
catch (IOException e)
{
String msg = "Invalid PA WAR for " + contextName;
- log.error(msg, e);
+ if (!silent || log.isDebugEnabled())
+ {
+ log.error(msg, e);
+ }
if ( paClassLoader == null )
{
// nothing to be done about it anymore: this pa is beyond repair :(
@@ -115,7 +118,7 @@
if (regPA == null)
{
System.out.println("**** New portlet app found - registration required..." + contextName);
- regPA = this.registerPortletApplication(paWar, null, paType, paClassLoader);
+ regPA = registerPortletApplication(paWar, null, paType, paClassLoader, silent);
}
else
{
@@ -126,7 +129,7 @@
if (newVersion.compareTo(regVersion) > 0)
{
System.out.println(" - **** New Version is greater: registration required... " + contextName);
- regPA = this.registerPortletApplication(paWar, regPA, paType, paClassLoader);
+ regPA = registerPortletApplication(paWar, regPA, paType, paClassLoader, silent);
}
else
{
@@ -142,7 +145,10 @@
catch (Exception e)
{
String msg = "Error starting portlet application " + contextName;
- log.error(msg, e);
+ if (!silent || log.isDebugEnabled())
+ {
+ log.error(msg, e);
+ }
throw new RegistryException(msg, e);
}
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/tools/pamanager/TestPortletApplicationManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/tools/pamanager/TestPortletApplicationManager.java?rev=769670&r1=769669&r2=769670&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/tools/pamanager/TestPortletApplicationManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/tools/pamanager/TestPortletApplicationManager.java Wed Apr 29 05:59:46 2009
@@ -49,14 +49,8 @@
{
private static final Log log = LogFactory.getLog(TestPortletApplicationManager.class);
- /*
- * TODO: this test case is properly run with concurrent PAM access
- * enabled, use of the versioned PAM, and with multiple restarts.
- * Test will not pass with those settings, so these are being used
- * temporarily until these issues are addressed.
- */
- public static final boolean TEST_CONCURRENT_PAM_ACCESS = false;
- public static final boolean TEST_USE_VERSIONED_PAM = true;
+ public static final boolean TEST_CONCURRENT_PAM_ACCESS = true;
+ public static final boolean TEST_USE_VERSIONED_PAM = false;
public static final int TEST_PORTLET_APPLICATION_RESTARTS = 5;
public static final String CONTEXT_NAME = "test-pa";
@@ -215,6 +209,7 @@
if (TEST_CONCURRENT_PAM_ACCESS)
{
// start portlet application asynchronously in background threads per server
+ log.info("test concurrent register/start/stop portlet application, iteration "+i+"...");
TestExecuteThread startPortletApplication0 = new TestExecuteThread(server0, "portletApplicationManagerServer.startPortletApplication();");
TestExecuteThread startPortletApplication1 = new TestExecuteThread(server1, "portletApplicationManagerServer.startPortletApplication();");
startPortletApplication0.start();
@@ -227,6 +222,7 @@
else
{
// stop portlet application synchronously
+ log.info("test serial register/start/stop portlet application, iteration "+i+"...");
result = server0.execute("portletApplicationManagerServer.startPortletApplication();");
assertTrue(!result.contains("Exception"));
result = server1.execute("portletApplicationManagerServer.startPortletApplication();");
@@ -238,6 +234,7 @@
result = server0.execute("portletApplicationManagerServer.stopPortletApplication();");
assertTrue(!result.contains("Exception"));
// unregister portlet application
+ log.info("test unregister portlet application, iteration "+i+"...");
try
{
portletApplicationManager.unregisterPortletApplication(CONTEXT_NAME);
@@ -430,7 +427,7 @@
private void logProcessLine(final String line)
{
- if (!line.contains("INFO") && (line.contains("ERROR") || line.contains("Exception") || line.matches("^\\s+at\\s")))
+ if (!line.contains("INFO") && (line.contains("ERROR") || line.contains("Exception") || line.matches("\\s+at\\s.*")))
{
log.error("{"+name+"} "+line);
}
Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManagement.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManagement.java?rev=769670&r1=769669&r2=769670&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManagement.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManagement.java Wed Apr 29 05:59:46 2009
@@ -47,4 +47,6 @@
void startLocalPortletApplication(String contextName, FileSystemHelper warStruct, ClassLoader paClassLoader) throws RegistryException;
void stopLocalPortletApplication(String contextName) throws RegistryException;
public void unregisterPortletApplication(String paName) throws RegistryException;
+
+ void tryStartPortletApplication(String contextName, String contextPath, FileSystemHelper warStruct, ClassLoader paClassLoader, int paType, long checksum, boolean silent) throws RegistryException;
}
Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/alternate/versioned-deployment/deployment.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/alternate/versioned-deployment/deployment.xml?rev=769670&r1=769669&r2=769670&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/alternate/versioned-deployment/deployment.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/alternate/versioned-deployment/deployment.xml Wed Apr 29 05:59:46 2009
@@ -73,7 +73,7 @@
</property>
<property name="transactionAttributes">
<props>
- <prop key="start*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
+ <prop key="try*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop key="stop*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop key="unregister*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop key="register*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
@@ -82,6 +82,22 @@
</property>
</bean>
+ <!-- Inject PAM Proxy into PAM implementation -->
+ <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
+ <meta key="j2:cat" value="default" />
+ <property name="targetObject">
+ <ref bean="org.apache.jetspeed.tools.pamanager.PortletApplicationManager" />
+ </property>
+ <property name="targetMethod">
+ <value>setPAMProxy</value>
+ </property>
+ <property name="arguments">
+ <list>
+ <ref bean="PAM" />
+ </list>
+ </property>
+ </bean>
+
<!-- Portlet Application and Decorator deployment event listeners -->
<bean id="portletAppDeploymentListener" class="org.apache.jetspeed.deployment.impl.DeployPortletAppEventListener">
<constructor-arg index="0">
@@ -133,4 +149,4 @@
</constructor-arg>
</bean>
-</beans>
\ No newline at end of file
+</beans>
Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/deployment.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/deployment.xml?rev=769670&r1=769669&r2=769670&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/deployment.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/deployment.xml Wed Apr 29 05:59:46 2009
@@ -110,7 +110,7 @@
</property>
<property name="transactionAttributes">
<props>
- <prop key="start*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
+ <prop key="try*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop key="stop*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop key="unregister*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop key="register*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
@@ -119,6 +119,22 @@
</property>
</bean>
+ <!-- Inject PAM Proxy into PAM implementation -->
+ <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
+ <meta key="j2:cat" value="default" />
+ <property name="targetObject">
+ <ref bean="org.apache.jetspeed.tools.pamanager.PortletApplicationManager" />
+ </property>
+ <property name="targetMethod">
+ <value>setPAMProxy</value>
+ </property>
+ <property name="arguments">
+ <list>
+ <ref bean="PAM" />
+ </list>
+ </property>
+ </bean>
+
<!-- Portlet Application and Decorator deployment event listeners -->
<bean id="portletAppDeploymentListener" class="org.apache.jetspeed.deployment.impl.DeployPortletAppEventListener">
<meta key="j2:cat" value="default" />
@@ -174,4 +190,4 @@
</constructor-arg>
</bean>
-</beans>
\ No newline at end of file
+</beans>
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org