001
014
015 package com.liferay.portal.tools.deploy;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.util.ClassLoaderUtil;
020
021 import java.io.File;
022
023 import javax.enterprise.deploy.shared.ModuleType;
024 import javax.enterprise.deploy.shared.factories.DeploymentFactoryManager;
025 import javax.enterprise.deploy.spi.DeploymentManager;
026 import javax.enterprise.deploy.spi.TargetModuleID;
027 import javax.enterprise.deploy.spi.factories.DeploymentFactory;
028 import javax.enterprise.deploy.spi.status.ProgressObject;
029
030
034 public class DeploymentHandler {
035
036 public DeploymentHandler(
037 String dmId, String dmUser, String dmPassword, String dfClassName) {
038
039 DeploymentManager deploymentManager = null;
040
041 try {
042 ClassLoader classLoader = ClassLoaderUtil.getPortalClassLoader();
043
044 DeploymentFactoryManager deploymentFactoryManager =
045 DeploymentFactoryManager.getInstance();
046
047 Class<?> clazz = classLoader.loadClass(dfClassName);
048
049 DeploymentFactory deploymentFactory =
050 (DeploymentFactory)clazz.newInstance();
051
052 deploymentFactoryManager.registerDeploymentFactory(
053 deploymentFactory);
054
055 deploymentManager = deploymentFactoryManager.getDeploymentManager(
056 dmId, dmUser, dmPassword);
057 }
058 catch (Exception e) {
059 _log.error(e, e);
060 }
061
062 _deploymentManager = deploymentManager;
063 }
064
065 public void deploy(File warDir, String warContext) throws Exception {
066 setStarted(false);
067
068 ProgressObject deployProgress = null;
069
070 TargetModuleID[] targetModuleIDs =
071 _deploymentManager.getAvailableModules(
072 ModuleType.WAR, _deploymentManager.getTargets());
073
074 for (TargetModuleID targetModuleID : targetModuleIDs) {
075 if (!targetModuleID.getModuleID().equals(warContext)) {
076 continue;
077 }
078
079 deployProgress = _deploymentManager.redeploy(
080 new TargetModuleID[] {targetModuleID}, warDir, null);
081
082 break;
083 }
084
085 if (deployProgress == null) {
086 deployProgress = _deploymentManager.distribute(
087 _deploymentManager.getTargets(), warDir, null);
088 }
089
090 deployProgress.addProgressListener(
091 new DeploymentProgressListener(this, warContext));
092
093 waitForStart(warContext);
094
095 if (_error) {
096 throw new Exception("Failed to deploy " + warDir);
097 }
098 }
099
100 public DeploymentManager getDeploymentManager() {
101 return _deploymentManager;
102 }
103
104 public void releaseDeploymentManager() {
105 _deploymentManager.release();
106 }
107
108 public synchronized void setError(boolean error) {
109 _error = error;
110 }
111
112 public synchronized void setStarted(boolean started) {
113 _started = started;
114
115 notifyAll();
116 }
117
118 protected synchronized void waitForStart(String warContext)
119 throws Exception {
120
121 while (!_error && !_started) {
122 wait();
123 }
124
125 if (_error) {
126 return;
127 }
128 }
129
130 private static final Log _log = LogFactoryUtil.getLog(
131 DeploymentHandler.class);
132
133 private final DeploymentManager _deploymentManager;
134 private boolean _error;
135 private boolean _started;
136
137 }