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="lazy", 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 StartLazyRedeployAutomaticStrategy extends
046: AbstractDeployControllerStrategy {
047: private final static StartLazyRedeployAutomaticStrategy STRATEGY = new StartLazyRedeployAutomaticStrategy();
048:
049: private StartLazyRedeployAutomaticStrategy() {
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.stopLazyImpl();
069: }
070:
071: /**
072: * Checks for updates from an admin command. The target state will be the
073: * initial state, i.e. update will not start a lazy instance.
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/1d08
081: } else if (controller.isStopped()) {
082: // server/1d05
083: controller.stopLazyImpl();
084: } else if (controller.isModifiedNow()) {
085: // 1d0n, 1d0o
086: controller.stopLazyImpl();
087: } else if (controller.isError()) {
088: controller.stopLazyImpl();
089: } else if (controller.isActiveIdle()) {
090: controller.stopLazyImpl();
091: } else { /* active */
092: // server/1d0h
093: }
094: }
095:
096: /**
097: * Returns the current instance, redeploying if necessary.
098: *
099: * @param controller the owning controller
100: * @return the current deploy instance
101: */
102: public <I extends DeployInstance> I request(
103: DeployController<I> controller) {
104: if (controller.isStoppedLazy()) {
105: // server/1d06
106: return controller.startImpl();
107: } else if (controller.isStopped()) {
108: // server/1d00
109: return controller.getDeployInstance();
110: } else if (controller.isModified()) {
111: // server/1d0i
112: return controller.restartImpl();
113: } else { /* active */
114: // server/1d0c
115: return controller.getDeployInstance();
116: }
117: }
118:
119: /**
120: * Returns the current instance, starting if necessary.
121: *
122: * @param controller the owning controller
123: * @return the current deploy instance
124: */
125: public <I extends DeployInstance> I subrequest(
126: DeployController<I> controller) {
127: if (controller.isStoppedLazy()) {
128: // server/1d07
129: return controller.startImpl();
130: } else if (controller.isStopped()) {
131: // server/1d01
132: return controller.getDeployInstance();
133: } else if (controller.isError() && controller.isModified()) {
134: // server/1d0x
135: return controller.restartImpl();
136: } else if (controller.isModified()) {
137: // server/1d0j
138: return controller.getDeployInstance();
139: } else { /* active */
140: // server/1d0d
141: return controller.getDeployInstance();
142: }
143: }
144:
145: /**
146: * Redeployment on a timeout alarm.
147: *
148: * @param controller the owning controller
149: */
150: public <I extends DeployInstance> void alarm(
151: DeployController<I> controller) {
152: if (controller.isStoppedLazy()) {
153: // server/1d08
154: } else if (controller.isStopped()) {
155: // server/1d02
156: } else if (controller.isError()) {
157: // server/1d0w
158: } else if (controller.isModified()) {
159: // server/1d0k
160: controller.stopLazyImpl();
161: } else if (controller.isActiveIdle()) {
162: controller.stopLazyImpl();
163: } else { /* active */
164: }
165: }
166: }
|