The plugin installer has an odd interpretation of where to copy files
into the server that I think would be good to fix before 2.0 gets
out. I've already fixed it in branches 2.0 and trunk. See
GERONIMO-3385
This changes the behavior of the plugin installer so it might be a
good idea to have the new behavior in 2.0 to avoid backward
compatibility problems in the future.
To apply to the 2.0.0
svn merge -r 563591: 563592 https://svn.apache.org/repos/asf/geronimo/
server/branches/2.0 .
There are 3 changes:
- trim source file so it can be turned into a file :-)
- don't prepend "var/" to the target directory
- create the target directory if it doesn't already exist.
This only affects the plugin installer which isn't used in any of our
tests.
thanks
david jencks
Here's the diff for easy reference:
Modified:
geronimo/server/branches/2.0/modules/geronimo-system/src/main/
java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java
geronimo/server/branches/2.0/modules/geronimo-system/src/main/
java/org/apache/geronimo/system/plugin/PluginMetadata.java
Modified: geronimo/server/branches/2.0/modules/geronimo-system/src/
main/java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.0/
modules/geronimo-system/src/main/java/org/apache/geronimo/system/
plugin/PluginInstallerGBean.java?
view=diff&rev=563592&r1=563591&r2=563592
========================================================================
======
--- geronimo/server/branches/2.0/modules/geronimo-system/src/main/
java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java
(original)
+++ geronimo/server/branches/2.0/modules/geronimo-system/src/main/
java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java Tue
Aug 7 10:50:04 2007
@@ -802,17 +802,20 @@
monitor.getResults().setCurrentFile(data.getSourceFile());
monitor.getResults().setCurrentMessage("Copying
"+data.getSourceFile()+" from plugin to Geronimo installation");
Set set;
+ String sourceFile = data.getSourceFile().trim();
try {
- set = configStore.resolve(configID, null,
data.getSourceFile());
+ set = configStore.resolve(configID, null, sourceFile);
} catch (NoSuchConfigException e) {
log.error("Unable to identify module "+configID+"
to copy files from");
throw new IllegalStateException("Unable to identify
module "+configID+" to copy files from", e);
}
if(set.size() == 0) {
- log.error("Installed configuration into repository
but cannot locate file to copy "+data.getSourceFile());
+ log.error("Installed configuration into repository
but cannot locate file to copy "+sourceFile);
continue;
}
- File targetDir = data.isRelativeToVar() ?
serverInfo.resolveServer("var/"+data.getDestDir()) :
serverInfo.resolve(data.getDestDir());
+ File targetDir = data.isRelativeToServer() ?
serverInfo.resolveServer(data.getDestDir()) : serverInfo.resolve
(data.getDestDir());
+
+ createDirectory(targetDir);
if(!targetDir.isDirectory()) {
log.error("Plugin install cannot write file
"+data.getSourceFile()+" to "+data.getDestDir()+" because
"+targetDir.getAbsolutePath()+" is not a directory");
continue;
@@ -843,6 +846,15 @@
}
}
+ private static void createDirectory(File dir) throws IOException {
+ if (dir != null && !dir.exists()) {
+ boolean success = dir.mkdirs();
+ if (!success) {
+ throw new IOException("Cannot create directory " +
dir.getAbsolutePath());
+ }
+ }
+ }
+
private void copyFile(InputStream in, FileOutputStream out)
throws IOException {
byte[] buf = new byte[4096];
int count;
@@ -1919,7 +1931,7 @@
for (int i = 0; i < data.getFilesToCopy().length; i++) {
PluginMetadata.CopyFile file = data.getFilesToCopy()[i];
Element copy = doc.createElement("copy-file");
- copy.setAttribute("relative-to", file.isRelativeToVar
() ? "server" : "geronimo");
+ copy.setAttribute("relative-to", file.isRelativeToServer
() ? "server" : "geronimo");
copy.setAttribute("dest-dir", file.getDestDir());
copy.appendChild(doc.createTextNode(file.getSourceFile
()));
config.appendChild(copy);
Modified: geronimo/server/branches/2.0/modules/geronimo-system/src/
main/java/org/apache/geronimo/system/plugin/PluginMetadata.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.0/
modules/geronimo-system/src/main/java/org/apache/geronimo/system/
plugin/PluginMetadata.java?view=diff&rev=563592&r1=563591&r2=563592
========================================================================
======
--- geronimo/server/branches/2.0/modules/geronimo-system/src/main/
java/org/apache/geronimo/system/plugin/PluginMetadata.java (original)
+++ geronimo/server/branches/2.0/modules/geronimo-system/src/main/
java/org/apache/geronimo/system/plugin/PluginMetadata.java Tue Aug 7
10:50:04 2007
@@ -278,18 +278,18 @@
}
public static class CopyFile implements Serializable {
- private final boolean relativeToVar; // if not, relative to
the Geronimo install directory
+ private final boolean relativeToServer; // if not, relative
to the Geronimo install directory
private final String sourceFile;
private final String destDir;
- public CopyFile(boolean relativeToVar, String sourceFile,
String destDir) {
- this.relativeToVar = relativeToVar;
+ public CopyFile(boolean relativeToServer, String sourceFile,
String destDir) {
+ this.relativeToServer = relativeToServer;
this.sourceFile = sourceFile;
this.destDir = destDir;
}
- public boolean isRelativeToVar() {
- return relativeToVar;
+ public boolean isRelativeToServer() {
+ return relativeToServer;
}
public String getSourceFile() {