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.PortalClassLoaderUtil;
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 try {
040 ClassLoader classLoader = PortalClassLoaderUtil.getClassLoader();
041
042 DeploymentFactoryManager deploymentFactoryManager =
043 DeploymentFactoryManager.getInstance();
044
045 DeploymentFactory deploymentFactory =
046 (DeploymentFactory)classLoader.loadClass(
047 dfClassName).newInstance();
048
049 deploymentFactoryManager.registerDeploymentFactory(
050 deploymentFactory);
051
052 _deploymentManager = deploymentFactoryManager.getDeploymentManager(
053 dmId, dmUser, dmPassword);
054 }
055 catch (Exception e) {
056 _log.error(e, e);
057 }
058 }
059
060 public void deploy(File warDir, String warContext) throws Exception {
061 setStarted(false);
062
063 ProgressObject deployProgress = null;
064
065 TargetModuleID[] targetModuleIDs =
066 _deploymentManager.getAvailableModules(
067 ModuleType.WAR, _deploymentManager.getTargets());
068
069 for (TargetModuleID targetModuleID : targetModuleIDs) {
070 if (!targetModuleID.getModuleID().equals(warContext)) {
071 continue;
072 }
073
074 deployProgress = _deploymentManager.redeploy(
075 new TargetModuleID[] {targetModuleID}, warDir, null);
076
077 break;
078 }
079
080 if (deployProgress == null) {
081 deployProgress = _deploymentManager.distribute(
082 _deploymentManager.getTargets(), warDir, null);
083 }
084
085 deployProgress.addProgressListener(
086 new DeploymentProgressListener(this, warContext));
087
088 waitForStart(warContext);
089
090 if (_error) {
091 throw new Exception("Failed to deploy " + warDir);
092 }
093 }
094
095 public DeploymentManager getDeploymentManager() {
096 return _deploymentManager;
097 }
098
099 public void releaseDeploymentManager() {
100 _deploymentManager.release();
101 }
102
103 public synchronized void setError(boolean error) {
104 _error = error;
105 }
106
107 public synchronized void setStarted(boolean started) {
108 _started = started;
109
110 notifyAll();
111 }
112
113 protected synchronized void waitForStart(String warContext)
114 throws Exception {
115
116 while (!_error && !_started) {
117 wait();
118 }
119
120 if (_error) {
121 return;
122 }
123 }
124
125 private static Log _log = LogFactoryUtil.getLog(DeploymentHandler.class);
126
127 private DeploymentManager _deploymentManager;
128 private boolean _error;
129 private boolean _started;
130
131 }