mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Point checkin for virt server notifiction.
Now the virt server can react properly when a file in WEB-INF (such as a jar or web.xml file) is submitted to staging. Details ------- More testing is needed, but the basic stuff looks ok. Here's a list of the events within the webapp that the virt server is now able to receive & handle properly: o Invite user to web project o Create web project o Delete sandbox o Delete web project o Submission of files to WEB-INF The virt server does not yet get: o Revert events o Out-of-band changes from CIFS (and probably never will). The plan to deal with changes made to critical files in WEB-INF is to have an exlicit control available within the webapp. It does not yet handle "approved with changes" very gracefully. That can probably be fixed over the next few days. Gory details ----------- projects/core/source/java/org/alfresco/util/VirtServerUtils.java Moved pattern that detects whether virt server needs updating in from AVMConstants, due to build dependencies; now this function is needed by workflow, which is in the repository package. projects/repository/config/alfresco/avm-services-context.xml Added AVMSubmitTransactionListener bean to allow virt server notification to hapen immediately after the submit transaction has been committed sucessfully. projects/repository/source/java/org/alfresco/repo/avm/wf/AVMSubmitPackageHandler.java Added transaction listner that does the virt server update, and added the list of staging diffs to AlfrescoTransactionSupport as a bound resource. projects/repository/source/java/org/alfresco/repo/avm/wf/AVMSubmitTransactionListener.java Does the actual notification of the virt server. The logic in this class still needs some work to handle "approved with changes" gracefully, but it does do the right thing when it comes to recursively reloading staging when a jar or web.xml file is modified. Light testing so far, but looks ok. Consider this a point checkin only. A singleton of this class is instantiated via the Spring config avm-services-context.xml, and used by AVMSubmitPackageHandler. projects/web-client/source/java/org/alfresco/web/bean/wcm/AVMConstants.java Removed the utility function that tests whether or not updating a file would require the virt server to be notified. This class would benifit from a major cleanup when time permits. projects/web-client/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java Using the function that was moved/renamed from AVMConstants to VirtServerUtils that tests if a given file update requires a virt server notification message. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4990 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -28,16 +28,18 @@ import org.alfresco.config.JNDIConstants;
|
|||||||
import org.alfresco.mbeans.VirtServerRegistry;
|
import org.alfresco.mbeans.VirtServerRegistry;
|
||||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||||
import org.alfresco.repo.domain.PropertyValue;
|
import org.alfresco.repo.domain.PropertyValue;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
|
||||||
import org.alfresco.service.cmr.avm.AVMNotFoundException;
|
import org.alfresco.service.cmr.avm.AVMNotFoundException;
|
||||||
import org.alfresco.service.cmr.avm.AVMService;
|
import org.alfresco.service.cmr.avm.AVMService;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
|
import org.alfresco.service.ServiceRegistry;
|
||||||
|
import org.alfresco.util.VirtServerUtils;
|
||||||
import org.alfresco.web.app.Application;
|
import org.alfresco.web.app.Application;
|
||||||
import org.alfresco.web.bean.repository.Repository;
|
import org.alfresco.web.bean.repository.Repository;
|
||||||
import org.alfresco.web.config.ClientConfigElement;
|
import org.alfresco.web.config.ClientConfigElement;
|
||||||
import org.springframework.web.context.WebApplicationContext;
|
import org.springframework.web.context.WebApplicationContext;
|
||||||
import org.springframework.web.jsf.FacesContextUtils;
|
import org.springframework.web.jsf.FacesContextUtils;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper methods and constants related to AVM directories, paths and store name manipulation.
|
* Helper methods and constants related to AVM directories, paths and store name manipulation.
|
||||||
*
|
*
|
||||||
@@ -654,21 +656,6 @@ public final class AVMConstants
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param path Path to match against
|
|
||||||
*
|
|
||||||
* @return true if the path should require a virtualisation server reload, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean requiresVServerUpdate(String path)
|
|
||||||
{
|
|
||||||
if (path == null || path.length() == 0)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("Path value is mandatory.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return WEB_INF_PATH_PATTERN.matcher(path).matches();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update notification on the virtualisation server webapp as required for the specified path
|
* Update notification on the virtualisation server webapp as required for the specified path
|
||||||
*
|
*
|
||||||
@@ -677,7 +664,7 @@ public final class AVMConstants
|
|||||||
*/
|
*/
|
||||||
public static void updateVServerWebapp(String path, boolean force)
|
public static void updateVServerWebapp(String path, boolean force)
|
||||||
{
|
{
|
||||||
if (force || requiresVServerUpdate(path))
|
if (force || VirtServerUtils.requiresUpdateNotification(path))
|
||||||
{
|
{
|
||||||
VirtServerRegistry vServerRegistry = AVMConstants.getVirtServerRegistry();
|
VirtServerRegistry vServerRegistry = AVMConstants.getVirtServerRegistry();
|
||||||
|
|
||||||
@@ -701,7 +688,7 @@ public final class AVMConstants
|
|||||||
*/
|
*/
|
||||||
public static void removeVServerWebapp(String path, boolean force)
|
public static void removeVServerWebapp(String path, boolean force)
|
||||||
{
|
{
|
||||||
if (force || requiresVServerUpdate(path))
|
if (force || VirtServerUtils.requiresUpdateNotification(path))
|
||||||
{
|
{
|
||||||
VirtServerRegistry vServerRegistry = AVMConstants.getVirtServerRegistry();
|
VirtServerRegistry vServerRegistry = AVMConstants.getVirtServerRegistry();
|
||||||
|
|
||||||
@@ -775,10 +762,4 @@ public final class AVMConstants
|
|||||||
Pattern.compile("([^:]+:/" + JNDIConstants.DIR_DEFAULT_WWW +
|
Pattern.compile("([^:]+:/" + JNDIConstants.DIR_DEFAULT_WWW +
|
||||||
"/" + JNDIConstants.DIR_DEFAULT_APPBASE + ")(.*)");
|
"/" + JNDIConstants.DIR_DEFAULT_APPBASE + ")(.*)");
|
||||||
|
|
||||||
// patterns for WEB-INF files that require virtualisation server reload
|
|
||||||
private final static Pattern WEB_INF_PATH_PATTERN =
|
|
||||||
Pattern.compile(".*:/" + JNDIConstants.DIR_DEFAULT_WWW +
|
|
||||||
"/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" +
|
|
||||||
".*/WEB-INF/((classes/.*)|(lib/.*)|(web.xml))",
|
|
||||||
Pattern.CASE_INSENSITIVE);
|
|
||||||
}
|
}
|
||||||
|
@@ -62,6 +62,9 @@ import org.alfresco.web.forms.Rendition;
|
|||||||
import org.alfresco.web.ui.common.Utils;
|
import org.alfresco.web.ui.common.Utils;
|
||||||
import org.alfresco.web.ui.common.component.UIListItem;
|
import org.alfresco.web.ui.common.component.UIListItem;
|
||||||
import org.alfresco.web.ui.wcm.WebResources;
|
import org.alfresco.web.ui.wcm.WebResources;
|
||||||
|
import org.alfresco.util.VirtServerUtils;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submit items for WCM workflow dialog.
|
* Submit items for WCM workflow dialog.
|
||||||
@@ -352,7 +355,8 @@ public class SubmitDialog extends BaseDialogBean
|
|||||||
// mysite:/www/avm_webapps/ROOT/WEB-INF/web.xml
|
// mysite:/www/avm_webapps/ROOT/WEB-INF/web.xml
|
||||||
// mysite:/www/avm_webapps/ROOT/WEB-INF/lib/moo.jar
|
// mysite:/www/avm_webapps/ROOT/WEB-INF/lib/moo.jar
|
||||||
|
|
||||||
update_vserver = AVMConstants.requiresVServerUpdate( destPath );
|
update_vserver = VirtServerUtils.requiresUpdateNotification( destPath );
|
||||||
|
|
||||||
if ( update_vserver ) { this.virtUpdatePath = destPath; }
|
if ( update_vserver ) { this.virtUpdatePath = destPath; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user