You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2006/04/23 03:59:38 UTC
svn commit: r396195 - in /geronimo/branches/1.1/modules:
kernel/src/java/org/apache/geronimo/kernel/repository/Version.java
system/src/java/org/apache/geronimo/system/configuration/ConfigInstallerGBean.java
Author: ammulder
Date: Sat Apr 22 18:59:36 2006
New Revision: 396195
URL: http://svn.apache.org/viewcvs?rev=396195&view=rev
Log:
Add serial UID to Version since we serialize it into config.ser
Update config installer to handle plugins in JARs in the repo
Modified:
geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/Version.java
geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/ConfigInstallerGBean.java
Modified: geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/Version.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/Version.java?rev=396195&r1=396194&r2=396195&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/Version.java (original)
+++ geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/Version.java Sat Apr 22 18:59:36 2006
@@ -26,6 +26,9 @@
*/
// This code was lifted from Apache Maven
public class Version implements Comparable, Serializable {
+ // Geronimo adds Serial UID because we serialize versions into config.ser
+ private static final long serialVersionUID = 7941704456058067109L;
+
private Integer majorVersion;
private Integer minorVersion;
Modified: geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/ConfigInstallerGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/ConfigInstallerGBean.java?rev=396195&r1=396194&r2=396195&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/ConfigInstallerGBean.java (original)
+++ geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/ConfigInstallerGBean.java Sat Apr 22 18:59:36 2006
@@ -36,6 +36,7 @@
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
+import java.util.zip.ZipEntry;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import javax.security.auth.login.FailedLoginException;
@@ -131,7 +132,25 @@
}
readNameAndID(xml, plugins);
} else {
- log.warn("Cannot extract plugin list from packed entries in repository yet ("+dir.getAbsolutePath()+")");
+ if(!dir.isFile() || !dir.canRead()) {
+ throw new IllegalStateException("Cannot read artifact dir "+dir.getAbsolutePath());
+ }
+ try {
+ JarFile jar = new JarFile(dir);
+ try {
+ ZipEntry entry = jar.getEntry("META-INF/geronimo-plugin.xml");
+ if(entry == null) {
+ continue;
+ }
+ InputStream in = jar.getInputStream(entry);
+ readNameAndID(in, plugins);
+ in.close();
+ } finally {
+ jar.close();
+ }
+ } catch (IOException e) {
+ log.error("Unable to read JAR file "+dir.getAbsolutePath(), e);
+ }
}
}
return plugins;
@@ -139,26 +158,52 @@
public ConfigurationArchiveData getPluginMetadata(Artifact configId) {
File dir = writeableRepo.getLocation(configId);
- File meta = new File(dir, "META-INF");
- if(!meta.isDirectory() || !meta.canRead()) {
- return null;
- }
- File xml = new File(meta, "geronimo-plugin.xml");
+ Document doc;
+ ConfigurationData configData;
+ String source = dir.getAbsolutePath();
try {
- ConfigurationData configData = configStore.loadConfiguration(configId);
- if(!xml.isFile() || !xml.canRead() || xml.length() == 0) {
- return new ConfigurationArchiveData(null, new URL[0], createDefaultMetadata(configData));
+ if(dir.isDirectory()) {
+ File meta = new File(dir, "META-INF");
+ if(!meta.isDirectory() || !meta.canRead()) {
+ return null;
+ }
+ File xml = new File(meta, "geronimo-plugin.xml");
+ configData = configStore.loadConfiguration(configId);
+ if(!xml.isFile() || !xml.canRead() || xml.length() == 0) {
+ return new ConfigurationArchiveData(null, new URL[0], createDefaultMetadata(configData));
+ }
+ source = xml.getAbsolutePath();
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ doc = builder.parse(xml);
+ } else {
+ if(!dir.isFile() || !dir.canRead()) {
+ throw new IllegalStateException("Cannot read configuration "+dir.getAbsolutePath());
+ }
+ configData = configStore.loadConfiguration(configId);
+ JarFile jar = new JarFile(dir);
+ try {
+ ZipEntry entry = jar.getEntry("META-INF/geronimo-plugin.xml");
+ if(entry == null) {
+ return new ConfigurationArchiveData(null, new URL[0], createDefaultMetadata(configData));
+ }
+ source = dir.getAbsolutePath()+"#META-INF/geronimo-plugin.xml";
+ InputStream in = jar.getInputStream(entry);
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ doc = builder.parse(in);
+ in.close();
+ } finally {
+ jar.close();
+ }
}
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document doc = builder.parse(xml);
- ConfigurationArchiveData result = loadConfigurationMetadata(doc, xml);
+ ConfigurationArchiveData result = loadConfigurationMetadata(doc, source);
overrideDependencies(configData, result.getConfiguration());
return result;
} catch (InvalidConfigException e) {
log.warn("Unable to generate metadata for "+configId, e);
} catch (Exception e) {
- log.warn("Invalid XML at "+xml.getAbsolutePath(), e);
+ log.warn("Invalid XML at "+source, e);
}
return null;
}
@@ -231,21 +276,21 @@
} finally {
jar.close();
}
- return loadConfigurationMetadata(doc, file);
+ return loadConfigurationMetadata(doc, file.getAbsolutePath());
}
- private ConfigurationArchiveData loadConfigurationMetadata(Document doc, File file) throws SAXException, MalformedURLException {
+ private ConfigurationArchiveData loadConfigurationMetadata(Document doc, String file) throws SAXException, MalformedURLException {
Element root = doc.getDocumentElement();
NodeList configs = root.getElementsByTagName("configuration");
if(configs.getLength() != 1) {
- log.error("Configuration archive "+file.getAbsolutePath()+" does not have exactly one configuration in META-INF/geronimo-plugin.xml");
+ log.error("Configuration archive "+file+" does not have exactly one configuration in META-INF/geronimo-plugin.xml");
return null;
}
ConfigurationMetadata data = processConfiguration((Element) configs.item(0));
String repo = getChildText(root, "source-repository");
URL repoURL;
if(repo == null || repo.equals("")) {
- log.warn("Configuration archive "+file.getAbsolutePath()+" does not list a repository for downloading dependencies.");
+ log.warn("Configuration archive "+file+" does not list a repository for downloading dependencies.");
repoURL = null;
} else {
repoURL = new URL(repo);
@@ -916,6 +961,20 @@
}
} catch (Exception e) {
log.warn("Invalid XML at "+xml.getAbsolutePath(), e);
+ }
+ }
+
+ private void readNameAndID(InputStream xml, Map plugins) {
+ try {
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ SAXParser parser = factory.newSAXParser();
+ PluginNameIDHandler handler = new PluginNameIDHandler();
+ parser.parse(xml, handler);
+ if(handler.isComplete()) {
+ plugins.put(handler.getName(), Artifact.create(handler.getID()));
+ }
+ } catch (Exception e) {
+ log.warn("Invalid XML", e);
}
}