Author: chris.laprun(a)jboss.com
Date: 2007-03-09 19:20:00 -0500 (Fri, 09 Mar 2007)
New Revision: 6622
Modified:
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/MockConsumerRegistry.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistry.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ProducerInfo.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/RegistrationInfo.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/portlet/consumers/WSRPConsumerConfigurationPortlet.java
trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/consumer.jsp
trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/view.jsp
Log:
- Fixed improper initialization of RegistrationInfo: should remove requiresRegistration
(and nullRegistration) at some point.
- Added ConsumerRegistry.deactivateConsumer method.
- Added register and deregister methods on ProducerInfo (should make refresh use
register). Needs testing.
- Fixed typo in persistentExpirationCacheSeconds name
- Started adding register/deregister/activate/deactivate support in WSRP admin portlet
(doesn't work well so far).
Modified:
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/MockConsumerRegistry.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/MockConsumerRegistry.java 2007-03-09
22:40:51 UTC (rev 6621)
+++
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/MockConsumerRegistry.java 2007-03-10
00:20:00 UTC (rev 6622)
@@ -45,7 +45,12 @@
private Map consumers = new HashMap(3);
private final static RegistrationInfo NULL_REGISTRATION_INFO = new
RegistrationInfo();
+ static
+ {
+ NULL_REGISTRATION_INFO.setRequiresRegistration(false);
+ }
+
public MockConsumerRegistry()
{
consumers.put("inDB", new MockWSRPConsumer("inDB"));
@@ -96,4 +101,9 @@
{
return NULL_REGISTRATION_INFO;
}
+
+ public void deactivateConsumerWith(String id) throws ConsumerException
+ {
+ // do nothing
+ }
}
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistry.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistry.java 2007-03-09
22:40:51 UTC (rev 6621)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistry.java 2007-03-10
00:20:00 UTC (rev 6622)
@@ -56,4 +56,6 @@
void updateProducerInfo(ProducerInfo producerInfo);
RegistrationInfo getDefaultRegistrationInfo();
+
+ void deactivateConsumerWith(String id) throws ConsumerException;
}
\ No newline at end of file
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java 2007-03-09
22:40:51 UTC (rev 6621)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java 2007-03-10
00:20:00 UTC (rev 6622)
@@ -156,6 +156,7 @@
if (nullRegistration == null)
{
nullRegistration = new RegistrationInfo();
+ nullRegistration.setRequiresRegistration(false);
session.persist(nullRegistration);
}
}
@@ -175,30 +176,19 @@
// if the consumer associated with the given id is already registered, don't do
anything
if (federatingPortletInvoker.getFederatedInvoker(id) == null)
{
- WSRPConsumer consumer = getConsumer(id);
+ startOrStopConsumer(id, true);
+ }
+ }
- if (consumer == null)
- {
- throw new ConsumerException("Consumer with id '" + id +
"' doesn't exist!");
- }
+ public void deactivateConsumerWith(String id) throws ConsumerException
+ {
+ ParameterValidation.throwIllegalArgExceptionIfNullOrEmpty(id, "Consumer
identifier", "deactivateConsumerWith");
- WSRPConsumerService service = new WSRPConsumerService();
- service.setConsumer(consumer);
- service.setFederatingPortletInvoker(federatingPortletInvoker);
-
- try
- {
- service.start();
- }
- catch (Exception e)
- {
- throw new ConsumerException("Couldn't start Consumer service
'" + id + "'", e);
- }
-
- // update ProducerInfo
- updateProducerInfo(service.getConsumer().getProducerInfo());
+ // only process if there is a registered Consumer with the specified id
+ if (federatingPortletInvoker.getFederatedInvoker(id) != null)
+ {
+ startOrStopConsumer(id, false);
}
-
}
public void updateProducerInfo(ProducerInfo producerInfo)
@@ -239,4 +229,37 @@
{
return nullRegistration;
}
+
+ private void startOrStopConsumer(String id, boolean start)
+ {
+ WSRPConsumer consumer = getConsumer(id);
+
+ if (consumer == null)
+ {
+ throw new ConsumerException("Consumer with id '" + id +
"' doesn't exist!");
+ }
+
+ WSRPConsumerService service = new WSRPConsumerService();
+ service.setConsumer(consumer);
+ service.setFederatingPortletInvoker(federatingPortletInvoker);
+
+ try
+ {
+ if (start)
+ {
+ service.start();
+ }
+ else
+ {
+ service.stop();
+ }
+ }
+ catch (Exception e)
+ {
+ throw new ConsumerException("Couldn't " + (start ?
"start" : "stop") + " Consumer service '" + id +
"'", e);
+ }
+
+ // update ProducerInfo
+ updateProducerInfo(service.getConsumer().getProducerInfo());
+ }
}
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ProducerInfo.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ProducerInfo.java 2007-03-09
22:40:51 UTC (rev 6621)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ProducerInfo.java 2007-03-10
00:20:00 UTC (rev 6622)
@@ -77,7 +77,7 @@
private String persistentId;
/** The cache expiration duration (in seconds) for cached values */
- private Integer persitentExpirationCacheSeconds;
+ private Integer persistentExpirationCacheSeconds;
/** The activated status of the associated Consumer */
private boolean persistentActive;
@@ -226,6 +226,8 @@
log.debug("ProducerInfo refresh needed for producer '" +
persistentId + "'");
serviceDescription = getServiceDescription();
+ // todo: use register() here!
+
// do we need to call initCookie or not?
requiresInitCookie = serviceDescription.getRequiresInitCookie();
@@ -454,7 +456,7 @@
private boolean useCache()
{
- return persitentExpirationCacheSeconds != null &&
persitentExpirationCacheSeconds.intValue() > 0;
+ return persistentExpirationCacheSeconds != null &&
persistentExpirationCacheSeconds.intValue() > 0;
}
private void resetCacheTimerIfNeeded()
@@ -462,7 +464,7 @@
if (useCache())
{
// reset expiration time
- expirationTimeMillis = System.currentTimeMillis() +
(persitentExpirationCacheSeconds.intValue() * 1000);
+ expirationTimeMillis = System.currentTimeMillis() +
(persistentExpirationCacheSeconds.intValue() * 1000);
}
}
@@ -477,12 +479,12 @@
public Integer getExpirationCacheSeconds()
{
- return persitentExpirationCacheSeconds;
+ return persistentExpirationCacheSeconds;
}
public void setExpirationCacheSeconds(Integer expirationCacheSeconds)
{
- this.persitentExpirationCacheSeconds = expirationCacheSeconds;
+ this.persistentExpirationCacheSeconds = expirationCacheSeconds;
}
private ServiceDescription getServiceDescription() throws PortletInvokerException
@@ -563,7 +565,11 @@
public void resetRegistration() throws PortletInvokerException
{
- persistentRegistrationInfo.resetRegistration();
+ if (persistentRegistrationInfo != null)
+ {
+ persistentRegistrationInfo.resetRegistration();
+ }
+
refresh(true);
}
@@ -604,4 +610,78 @@
throw new RuntimeException(e);
}
}
+
+ public void register() throws PortletInvokerException
+ {
+ register(null);
+ }
+
+ private void register(ServiceDescription serviceDescription) throws
PortletInvokerException
+ {
+ if (persistentRegistrationInfo == null)
+ {
+ persistentRegistrationInfo = new RegistrationInfo(this);
+ }
+
+ if (!persistentRegistrationInfo.isRegistrationValid())
+ {
+
+ if (serviceDescription == null)
+ {
+ serviceDescription = getServiceDescription();
+ }
+
+ // check if the configured registration information is correct and if we can get
the service description
+ if (persistentRegistrationInfo.initialize(serviceDescription, getId()))
+ {
+ try
+ {
+ log.debug("Attempting registration");
+ RegistrationContext registrationContext =
persistentEndpointInfo.getRegistrationService()
+ .register(persistentRegistrationInfo.getRegistrationData());
+
+ if (registrationContext == null)
+ {
+ setActive(false);
+ throw new PortletInvokerException("Received null response after
registration from producer '" + persistentId + "'");
+ }
+
+ persistentRegistrationInfo.setRegistrationContext(registrationContext);
+ log.info("Successfully registered with handle: '" +
registrationContext.getRegistrationHandle() + "'");
+ }
+ catch (Exception e)
+ {
+ persistentRegistrationInfo.resetRegistration();
+ setActive(false);
+ throw new PortletInvokerException("Couldn't register with
producer '" + persistentId + "'", e);
+ }
+ }
+ else
+ {
+ log.info("Consumer is not ready to be registered with producer because
of missing or invalid registration information.");
+ setActive(false);
+ throw new PortletInvokerException("Consumer is not ready to be
registered with producer because of missing or invalid registration information.");
+ }
+ }
+ }
+
+ public void deregister() throws PortletInvokerException
+ {
+ if (persistentRegistrationInfo != null &&
persistentRegistrationInfo.isRegistrationValid())
+ {
+ try
+ {
+
persistentEndpointInfo.getRegistrationService().deregister(getRegistrationContext());
+ }
+ catch (Exception e)
+ {
+ throw new PortletInvokerException("Couldn't deregister with producer
'" + persistentId + "'", e);
+ }
+ finally
+ {
+ persistentRegistrationInfo.resetRegistration();
+ }
+ }
+
+ }
}
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/RegistrationInfo.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/RegistrationInfo.java 2007-03-09
22:40:51 UTC (rev 6621)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/RegistrationInfo.java 2007-03-10
00:20:00 UTC (rev 6622)
@@ -58,7 +58,7 @@
private String consumerName;
private String registrationHandle;
private byte[] registrationState;
- private boolean requiresRegistration;
+ private boolean requiresRegistration; // todo: remove
private Map registrationProperties;
private transient RegistrationData registrationData;
@@ -74,7 +74,7 @@
public RegistrationInfo()
{
consumerName = WSRPConstants.DEFAULT_CONSUMER_NAME;
- requiresRegistration = false;
+ requiresRegistration = true;
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/portlet/consumers/WSRPConsumerConfigurationPortlet.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/portlet/consumers/WSRPConsumerConfigurationPortlet.java 2007-03-09
22:40:51 UTC (rev 6621)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/portlet/consumers/WSRPConsumerConfigurationPortlet.java 2007-03-10
00:20:00 UTC (rev 6622)
@@ -23,7 +23,9 @@
package org.jboss.portal.wsrp.portlet.consumers;
+import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.wsrp.consumer.ConsumerRegistry;
+import org.jboss.portal.wsrp.consumer.ProducerInfo;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
@@ -52,7 +54,11 @@
public static final String OP_LIST = "list";
public static final String OP_ACTIVATE = "activate";
public static final String OP_CONFIGURE = "configure";
+ public static final String OP_REGISTER = "register";
+ private static final String OP_ERROR = "error";
public static final String ID = "id";
+ public static final String ACTIVATE = "activate";
+ public static final String REGISTER = "register";
public static final String CONSUMER = "consumer";
public static final String CONSUMERS_REGISTRY = "ConsumersRegistry";
public static final String OP_EDIT = "editConsumer";
@@ -82,6 +88,7 @@
{
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(JSP_PATH
+ "view.jsp");
rd.include(request, response);
+ return;
}
// configure a specific consumer
@@ -97,6 +104,7 @@
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(JSP_PATH
+ "consumer.jsp");
rd.include(request, response);
+ return;
}
if (NOT_SUPPORTED.equals(op))
@@ -106,8 +114,18 @@
PortletURL url = response.createRenderURL();
url.setParameter(OP, OP_LIST);
printWriter.println("<a href='" + url +
"'>back</a>");
+ return;
}
+ if (OP_ERROR.equals(op))
+ {
+ PrintWriter printWriter = response.getWriter();
+ printWriter.print(request.getParameter("message"));
+ PortletURL url = response.createRenderURL();
+ url.setParameter(OP, OP_LIST);
+ printWriter.println("<br/><a href='" + url +
"'>back</a>");
+ return;
+ }
}
public void processAction(ActionRequest request, ActionResponse response) throws
PortletException, PortletSecurityException, IOException
@@ -115,19 +133,73 @@
String op = request.getParameter(OP);
if (op == null)
{
- op = OP_LIST;
+ return;
}
+ String id = request.getParameter(ID);
+ if (id == null)
+ {
+ response.setRenderParameter(OP, OP_ERROR);
+ response.setRenderParameter("message", "No Consumer identifier
was provided for the request!");
+ return;
+ }
+
if (OP_ACTIVATE.equals(op))
{
- response.setRenderParameter(OP, NOT_SUPPORTED);
- response.setRenderParameter("method", "activate");
+ String activate = request.getParameter(ACTIVATE);
+ if (activate != null)
+ {
+ boolean start = Boolean.parseBoolean(activate);
+ if (start)
+ {
+ registry.activateConsumerWith(id);
+ }
+ else
+ {
+ registry.deactivateConsumerWith(id);
+ }
+ }
+
+ return;
}
+ if (OP_REGISTER.equals(op))
+ {
+ String regString = request.getParameter(REGISTER);
+ if (regString != null)
+ {
+ boolean register = Boolean.parseBoolean(regString);
+
+ try
+ {
+ ProducerInfo info = registry.getConsumer(id).getProducerInfo();
+ if (register)
+ {
+ info.register();
+ }
+ else
+ {
+ info.deregister();
+ }
+
+ response.setRenderParameter(OP, OP_CONFIGURE);
+ response.setRenderParameter(ID, id);
+ }
+ catch (PortletInvokerException e)
+ {
+ response.setRenderParameter(OP, OP_ERROR);
+ response.setRenderParameter("message",
e.getLocalizedMessage());
+ }
+ }
+
+ return;
+ }
+
if (OP_EDIT.equals(op))
{
response.setRenderParameter(OP, NOT_SUPPORTED);
response.setRenderParameter("method", "modifying consumer
information");
+ return;
}
}
}
\ No newline at end of file
Modified: trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/consumer.jsp
===================================================================
--- trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/consumer.jsp 2007-03-09
22:40:51 UTC (rev 6621)
+++ trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/consumer.jsp 2007-03-10
00:20:00 UTC (rev 6622)
@@ -154,6 +154,21 @@
</td>
</tr>
<%
+}
+else
+{
+%>
+<tr>
+ <td colspan="2">
+ <a href="<portlet:actionURL>
+ <portlet:param name="<%=WSRPConsumerConfigurationPortlet.OP%>"
value="<%=WSRPConsumerConfigurationPortlet.OP_REGISTER%>"/>
+ <portlet:param name="<%=WSRPConsumerConfigurationPortlet.ID%>"
value="<%=consumer.getProducerId()%>"/>
+ </portlet:actionURL>">
+ <input type="submit" name="registerConsumer"
value="Register" class="portlet-form-button"/>
+ </a>
+ </td>
+</tr>
+<%
}
%>
<tr>
Modified: trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/view.jsp
===================================================================
--- trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/view.jsp 2007-03-09
22:40:51 UTC (rev 6621)
+++ trunk/wsrp/src/resources/portal-wsrp-war/WEB-INF/jsp/consumers/view.jsp 2007-03-10
00:20:00 UTC (rev 6622)
@@ -1,5 +1,6 @@
<%@ page import="org.jboss.portal.wsrp.WSRPConsumer" %>
<%@ page import="org.jboss.portal.wsrp.consumer.ConsumerRegistry" %>
+<%@ page import="org.jboss.portal.wsrp.consumer.RegistrationInfo" %>
<%@ page
import="org.jboss.portal.wsrp.portlet.consumers.WSRPConsumerConfigurationPortlet"
%>
<%@ page import="java.util.Iterator" %>
<%@ taglib
uri="http://java.sun.com/portlet" prefix="portlet"
%>
@@ -30,9 +31,13 @@
WSRPConsumer consumer = (WSRPConsumer)consumers.next();
String id = consumer.getProducerId();
style = (rowIndex % 2 == 0) ? evenStyle : oddStyle;
+ boolean isActive = consumer.getProducerInfo().isActive();
+ RegistrationInfo regInfo =
consumer.getProducerInfo().getRegistrationInfo();
+ boolean isRegistered = (regInfo != null &&
regInfo.isRegistrationValid());
%>
<tr>
- <td class="<%=style%>">x</td>
+ <td class="<%=style%>"><%= isActive ? "x"
: ""%>
+ </td>
<td class="<%=style%>"><a
href="<portlet:renderURL>
<portlet:param
name="<%=WSRPConsumerConfigurationPortlet.OP%>"
value="<%=WSRPConsumerConfigurationPortlet.OP_CONFIGURE%>" />
<portlet:param
name="<%=WSRPConsumerConfigurationPortlet.ID%>"
value="<%=id%>"/>
@@ -40,15 +45,27 @@
</a>
</td>
<td class="<%=style%>">
+ <a href="<portlet:renderURL>
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.OP%>"
value="<%=WSRPConsumerConfigurationPortlet.OP_CONFIGURE%>" />
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.ID%>"
value="<%=id%>"/>
+ </portlet:renderURL>">configure</a> |
<a href="<portlet:actionURL>
- <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.OP%>"
value="<%=WSRPConsumerConfigurationPortlet.OP_ACTIVATE%>"/>
- <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.ID%>"
value="<%=id%>"/>
- <portlet:param name="activate"
value="false"/>
- </portlet:actionURL>">deactivate</a> |
- <a href="<portlet:renderURL>
- <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.OP%>"
value="<%=WSRPConsumerConfigurationPortlet.OP_CONFIGURE%>" />
- <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.ID%>"
value="<%=id%>"/>
- </portlet:renderURL>">configure</a>
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.OP%>"
value="<%=WSRPConsumerConfigurationPortlet.OP_ACTIVATE%>"/>
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.ID%>"
value="<%=id%>"/>
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.ACTIVATE%>"
value="<%=isActive ? "false" : "true"%>"/>
+ </portlet:actionURL>"><%=isActive ? "de" :
""%>activate</a>
+ <%
+ if (isActive)
+ {
+ %>
+ | <a href="<portlet:actionURL>
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.OP%>"
value="<%=WSRPConsumerConfigurationPortlet.OP_REGISTER%>"/>
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.ID%>"
value="<%=id%>"/>
+ <portlet:param
name="<%=WSRPConsumerConfigurationPortlet.REGISTER%>"
value="<%=isRegistered ? "false" : "true"%>"/>
+ </portlet:actionURL>"><%=isRegistered ? "de" :
""%>register</a>
+ <%
+ }
+ %>
</td>
</tr>
<%