001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: *
023: * Free Software Foundation, Inc.
024: * 59 Temple Place, Suite 330
025: * Boston, MA 02111-1307 USA
026: *
027: * @author Scott Ferguson
028: */
029:
030: package com.caucho.server.deploy;
031:
032: /**
033: * The start-mode="automatic", redeploy-model="automatic" controller strategy.
034: *
035: * <table>
036: * <tr><th>input <th>stopped <th>active <th>modified <th>error
037: * <tr><td>request<td>startImpl<td>- <td>restartImpl<td>restartImpl
038: * <tr><td>include<td>startImpl<td>- <td>- <td>-
039: * <tr><td>start <td>startImpl<td>- <td>restartImpl<td>restartImpl
040: * <tr><td>restart<td>startImpl<td>- <td>restartImpl<td>restartImpl
041: * <tr><td>stop <td>- <td>stopImpl<td>stopImpl <td>stopImpl
042: * <tr><td>alarm <td>- <td>- <td>stopImpl <td>stopImpl
043: * </table>
044: */
045: public class StartAutoRedeployAutoStrategy extends
046: AbstractDeployControllerStrategy {
047: private final static StartAutoRedeployAutoStrategy STRATEGY = new StartAutoRedeployAutoStrategy();
048:
049: private StartAutoRedeployAutoStrategy() {
050: }
051:
052: /**
053: * Returns the start="lazy" redeploy="automatic" strategy
054: *
055: * @return the singleton strategy
056: */
057: public static DeployControllerStrategy create() {
058: return STRATEGY;
059: }
060:
061: /**
062: * Called at initialization time for automatic start.
063: *
064: * @param controller the owning controller
065: */
066: public <I extends DeployInstance> void startOnInit(
067: DeployController<I> controller) {
068: controller.startImpl();
069: }
070:
071: /**
072: * Checks for updates from an admin command. The target state is
073: * the started state.
074: *
075: * @param controller the owning controller
076: */
077: public <I extends DeployInstance> void update(
078: DeployController<I> controller) {
079: if (controller.isStoppedLazy()) {
080: // server/1d18
081: } else if (controller.isStopped()) {
082: // server/1d15
083: controller.startImpl();
084: } else if (controller.isModifiedNow()) {
085: // 1d1n, 1d1o
086: controller.restartImpl();
087: } else if (controller.isError()) {
088: controller.restartImpl();
089: } else if (controller.isActiveIdle()) {
090: controller.restartImpl();
091: } else { /* active */
092: }
093: }
094:
095: /**
096: * Returns the current instance, redeploying if necessary.
097: *
098: * @param controller the owning controller
099: * @return the current deploy instance
100: */
101: public <I extends DeployInstance> I request(
102: DeployController<I> controller) {
103: if (controller.isStoppedLazy()) {
104: // server/1d16
105: return controller.startImpl();
106: } else if (controller.isStopped()) {
107: // server/1d10
108: return controller.getDeployInstance();
109: } else if (controller.isModified()) {
110: // server/1d1i
111: return controller.restartImpl();
112: } else { /* active */
113: // server/1d1c
114: return controller.getDeployInstance();
115: }
116: }
117:
118: /**
119: * Returns the current instance, starting if necessary.
120: *
121: * @param controller the owning controller
122: * @return the current deploy instance
123: */
124: public <I extends DeployInstance> I subrequest(
125: DeployController<I> controller) {
126: if (controller.isStoppedLazy()) {
127: // server/1d17
128: return controller.startImpl();
129: } else if (controller.isStopped()) {
130: // server/1d11
131: return controller.getDeployInstance();
132: } else if (controller.isModified()) {
133: // server/1d1j
134: return controller.getDeployInstance();
135: } else { /* active */
136: // server/1d1d
137: return controller.getDeployInstance();
138: }
139: }
140:
141: /**
142: * Redeployment on a timeout alarm.
143: *
144: * @param controller the owning controller
145: */
146: public <I extends DeployInstance> void alarm(
147: DeployController<I> controller) {
148: if (controller.isStopped()) {
149: // server/1d12
150: } else if (controller.isStoppedLazy()) {
151: // server/1d18
152: } else if (controller.isModified()) {
153: // server/1d1k
154: controller.logModified(controller.getLog());
155: controller.restartImpl();
156: } else if (controller.isActiveIdle()) {
157: } else { /* active */
158: }
159: }
160: }
|