001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999-2004 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * Initial developer(s): Benoit PELLETIER
022: * --------------------------------------------------------------------------
023: * $Id: JarCleanTask.java 6673 2005-04-28 16:53:00Z benoitf $
024: * --------------------------------------------------------------------------
025: */package org.objectweb.jonas_lib.deployment.work;
026:
027: import java.io.File;
028: import java.net.MalformedURLException;
029: import java.util.Vector;
030:
031: import org.objectweb.jonas.container.EJBService;
032: import org.objectweb.jonas.service.ServiceManager;
033:
034: import org.objectweb.util.monolog.api.BasicLevel;
035:
036: /**
037: * JOnAS Jar unused copy clean task class. This class provides a way for
038: * removing copies wich are unconsistent for jar files.
039: * @author Florent BENOIT
040: * @author Benoit PELLETIER
041: */
042: public class JarCleanTask extends AbsCleanTask {
043:
044: /**
045: * reference to the deployerLog
046: */
047: private static DeployerLog jarDeployerLog = null;
048:
049: /**
050: * Default constructor : Construct a new cleaner.
051: * @param jarDeployerLog the deployer logger
052: */
053: public JarCleanTask(DeployerLog jarDeployerLog) {
054: super ();
055: JarCleanTask.jarDeployerLog = jarDeployerLog;
056: }
057:
058: /**
059: * Return true if the work copy exists and is up to date
060: * @param logEntry entry in a deploy log
061: * @return true if the work copy exists and is up to date
062: * @throws CleanerException if it fails
063: */
064: protected boolean isValidLogEntry(LogEntry logEntry)
065: throws CleanerException {
066: String fTimeStamp = null;
067: File jarOriginalFile = logEntry.getOriginal();
068: File jarCopyFile = logEntry.getCopy();
069:
070: if (getLogger().isLoggable(BasicLevel.DEBUG)) {
071: getLogger().log(BasicLevel.DEBUG,
072: "LogEntry exist :" + jarOriginalFile.exists());
073: }
074:
075: // if the file doesn't exist, return
076: if (!jarOriginalFile.exists()) {
077: return false;
078: }
079:
080: //get the timestamp
081: try {
082: fTimeStamp = FileManager.fileToTimeStampDir(jarOriginalFile
083: .toURL(), ".jar");
084: } catch (FileManagerException efme) {
085: throw new CleanerException(
086: "Can't get the timestamp of the file "
087: + jarOriginalFile + " : "
088: + efme.getMessage());
089: } catch (MalformedURLException mue) {
090: throw new CleanerException(
091: "Can't get the timestamp of the file "
092: + jarOriginalFile + " : "
093: + mue.getMessage());
094: }
095:
096: if (getLogger().isLoggable(BasicLevel.DEBUG)) {
097: getLogger().log(BasicLevel.DEBUG,
098: "LogEntry fTimeStamp :" + fTimeStamp);
099: getLogger().log(
100: BasicLevel.DEBUG,
101: "LogEntry isValid :"
102: + fTimeStamp.equalsIgnoreCase(jarCopyFile
103: .getName()));
104: }
105:
106: //compare
107: return (fTimeStamp.equalsIgnoreCase(jarCopyFile.getName()));
108:
109: }
110:
111: /**
112: * Remove the work copy specified in the log entry and the log entry
113: * @param logEntry entry in a deploy log
114: * @throws CleanerException if it fails
115: */
116: protected void removeLogEntry(LogEntry logEntry)
117: throws CleanerException {
118: // it's a file but this should work
119: removeRecursiveDirectory(logEntry.getCopy());
120:
121: try {
122: jarDeployerLog.removeEntry(logEntry);
123: } catch (DeployerLogException edle) {
124: throw new CleanerException("Can't remove an entry"
125: + edle.getMessage());
126: }
127:
128: }
129:
130: /**
131: * Gets the log entries
132: * @return the log entries
133: */
134: protected Vector getLogEntries() {
135: return jarDeployerLog.getEntries();
136: }
137:
138: /**
139: * Check if the package pointed by the log entry is currently deploy
140: * @param logEntry entry in a deploy log
141: * @return true if the package pointed by the log entry is currently deployed
142: * @throws CleanerException if it fails
143: */
144: protected boolean isDeployLogEntry(LogEntry logEntry)
145: throws CleanerException {
146:
147: // get the ejbjar service
148: ServiceManager sm = null;
149:
150: try {
151: sm = ServiceManager.getInstance();
152: } catch (Exception e) {
153: throw new CleanerException(
154: "Cannot get ServiceManager instance");
155: }
156: EJBService ejbService = (EJBService) sm.getEjbService();
157:
158: // check if the jar file is deployed
159: return ejbService.isJarDeployedByWorkName(logEntry.getCopy()
160: .getName());
161:
162: }
163: }
|