Author: djencks
Date: Tue Sep 16 16:52:24 2008
New Revision: 696105
URL: http://svn.apache.org/viewvc?rev=696105&view=rev
Log:
GERONIMO-4304 Register allowable plugin repositories, with credentials as appropriate
Added:
geronimo/server/trunk/framework/configs/plugin/src/main/resources/
geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties (with props)
Removed:
geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/SourceRepositoryFactory.java
Modified:
geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/InstallModulesMojo.java
geronimo/server/trunk/framework/configs/plugin/pom.xml
geronimo/server/trunk/framework/configs/plugin/src/main/plan/plan.xml
geronimo/server/trunk/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/jmx/RemoteDeploymentManager.java
geronimo/server/trunk/framework/modules/geronimo-deploy-tool/src/main/java/org/apache/geronimo/deployment/cli/CommandListConfigurations.java
geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstaller.java
geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java
geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryDownloader.java
geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryList.java
geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/RemoteSourceRepository.java
geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/CopyFileTest.java
geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/PluginInstallerTest.java
geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java
geronimo/server/trunk/plugins/clustering/geronimo-farm/src/main/java/org/apache/geronimo/farm/discovery/JmxDiscoveryPublisher.java
geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java
geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/AddRepositoryHandler.java
geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/BaseImportExportHandler.java
Modified: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/InstallModulesMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/InstallModulesMojo.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/InstallModulesMojo.java (original)
+++ geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/InstallModulesMojo.java Tue Sep 16 16:52:24 2008
@@ -23,6 +23,8 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.Collections;
+import java.net.URL;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.kernel.basic.BasicKernel;
@@ -31,6 +33,8 @@
import org.apache.geronimo.system.plugin.DownloadResults;
import org.apache.geronimo.system.plugin.PluginInstallerGBean;
import org.apache.geronimo.system.plugin.SourceRepository;
+import org.apache.geronimo.system.plugin.PluginRepositoryList;
+import org.apache.geronimo.system.plugin.PluginRepositoryDownloader;
import org.apache.geronimo.system.plugin.model.ArtifactType;
import org.apache.geronimo.system.plugin.model.AttributesType;
import org.apache.geronimo.system.plugin.model.PluginArtifactType;
@@ -156,8 +160,9 @@
String targetServerPath = targetServerDirectory.getAbsolutePath();
Kernel kernel = new BasicKernel("Assembly");
+ PluginRepositoryList pluginRepoList = new PluginRepositoryDownloader(Collections.singletonMap(localRepo, (String[]) null), true);
try {
- PluginInstallerGBean installer = new PluginInstallerGBean(targetRepositoryPath, targetServerPath, servers, kernel, getClass().getClassLoader());
+ PluginInstallerGBean installer = new PluginInstallerGBean(targetRepositoryPath, targetServerPath, servers, pluginRepoList, kernel, getClass().getClassLoader());
installer.install(pluginList, sourceRepo, true, null, null, downloadPoller);
if (overrides != null) {
for (Override override: this.overrides) {
Modified: geronimo/server/trunk/framework/configs/plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/plugin/pom.xml?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/plugin/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/plugin/pom.xml Tue Sep 16 16:52:24 2008
@@ -144,12 +144,12 @@
<config-xml-content>
<gbean name="DownloadedPluginRepos">
<attribute name="repositoryList">http://geronimo.apache.org/plugins/plugin-repository-list-2.2.txt</attribute>
- <attribute name="userRepositories">~/.m2/repository</attribute>
</gbean>
</config-xml-content>
<!--<artifact-alias key="org.apache.geronimo.framework/jsr88-cli//car">org.apache.geronimo.framework/plugin/${version}/car</artifact-alias>-->
<!--<artifact-alias key="org.apache.geronimo.framework/jsr88-cli/${version}/car">org.apache.geronimo.framework/plugin/${version}/car</artifact-alias>-->
<copy-file dest-dir="schema">schema/xsd/</copy-file>
+ <copy-file dest-dir="var/config" relative-to="server">plugin-repositories.properties</copy-file>
</plugin-artifact>
</instance>
</configuration>
Modified: geronimo/server/trunk/framework/configs/plugin/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/plugin/src/main/plan/plan.xml?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/plugin/src/main/plan/plan.xml (original)
+++ geronimo/server/trunk/framework/configs/plugin/src/main/plan/plan.xml Tue Sep 16 16:52:24 2008
@@ -37,6 +37,9 @@
<reference name="ThreadPool">
<name>DefaultThreadPool</name>
</reference>
+ <reference name="PluginRepositoryList">
+ <name>DownloadedPluginRepos</name>
+ </reference>
<references name="ServerInstances">
<pattern>
<name>DefaultServer</name>
@@ -93,7 +96,10 @@
<gbean name="DownloadedPluginRepos" class="org.apache.geronimo.system.plugin.PluginRepositoryDownloader">
<attribute name="repositoryList">http://geronimo.apache.org/plugins/plugin-repository-list-2.2.txt</attribute>
- <attribute name="userRepositories">~/.m2/repository</attribute>
+ <attribute name="userRepositoryList">var/config/plugin-repositories.properties</attribute>
+ <reference name="ServerInfo">
+ <name>ServerInfo</name>
+ </reference>
</gbean>
<gbean name="Archiver" class="org.apache.geronimo.system.plugin.ArchiverGBean">
Added: geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties?rev=696105&view=auto
==============================================================================
--- geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties (added)
+++ geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties Tue Sep 16 16:52:24 2008
@@ -0,0 +1,3 @@
+#List of known plugin repositories. Fomat: <url>=<username>=<password>
+~/.m2/repository
+http\://localhost\:8080/plugin/maven-repo/=system=manager
\ No newline at end of file
Propchange: geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/framework/configs/plugin/src/main/resources/plugin-repositories.properties
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/server/trunk/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/jmx/RemoteDeploymentManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/jmx/RemoteDeploymentManager.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/jmx/RemoteDeploymentManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-deploy-jsr88/src/main/java/org/apache/geronimo/deployment/plugin/jmx/RemoteDeploymentManager.java Tue Sep 16 16:52:24 2008
@@ -180,10 +180,10 @@
- public PluginListType listPlugins(URL mavenRepository, String username, String password) throws FailedLoginException, IOException {
+ public PluginListType listPlugins(URL mavenRepository) throws FailedLoginException, IOException {
PluginInstaller installer = getPluginInstaller();
try {
- return installer.listPlugins(mavenRepository, username, password);
+ return installer.listPlugins(mavenRepository);
} finally {
kernel.getProxyManager().destroyProxy(installer);
}
Modified: geronimo/server/trunk/framework/modules/geronimo-deploy-tool/src/main/java/org/apache/geronimo/deployment/cli/CommandListConfigurations.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deploy-tool/src/main/java/org/apache/geronimo/deployment/cli/CommandListConfigurations.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-deploy-tool/src/main/java/org/apache/geronimo/deployment/cli/CommandListConfigurations.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-deploy-tool/src/main/java/org/apache/geronimo/deployment/cli/CommandListConfigurations.java Tue Sep 16 16:52:24 2008
@@ -21,17 +21,14 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.enterprise.deploy.shared.ModuleType;
import javax.enterprise.deploy.spi.DeploymentManager;
import javax.enterprise.deploy.spi.exceptions.TargetException;
-import javax.enterprise.deploy.spi.Target;
import javax.enterprise.deploy.spi.TargetModuleID;
import javax.security.auth.login.FailedLoginException;
@@ -42,8 +39,6 @@
import org.apache.geronimo.deployment.plugin.GeronimoDeploymentManager;
import org.apache.geronimo.deployment.plugin.TargetModuleIDImpl;
import org.apache.geronimo.kernel.config.NoSuchStoreException;
-import org.apache.geronimo.kernel.Kernel;
-import org.apache.geronimo.kernel.KernelRegistry;
import org.apache.geronimo.system.plugin.DownloadResults;
import org.apache.geronimo.system.plugin.PluginInstallerGBean;
import org.apache.geronimo.system.plugin.model.PluginArtifactType;
@@ -137,7 +132,7 @@
URL repository;
try {
repository = new URL(repo);
- data = mgr.listPlugins(repository, null, null);
+ data = mgr.listPlugins(repository);
} catch (IOException e) {
throw new DeploymentException("Unable to list configurations", e);
} catch (FailedLoginException e) {
Modified: geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstaller.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstaller.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstaller.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstaller.java Tue Sep 16 16:52:24 2008
@@ -42,12 +42,8 @@
*
* @param mavenRepository The base URL to the maven repository. This must
* contain the file geronimo-plugins.xml
- * @param username Optional username, if the maven repo uses HTTP Basic authentication.
- * Set this to null if no authentication is required.
- * @param password Optional password, if the maven repo uses HTTP Basic authentication.
- * Set this to null if no authentication is required.
*/
- public PluginListType listPlugins(URL mavenRepository, String username, String password) throws IOException, FailedLoginException;
+ public PluginListType listPlugins(URL mavenRepository) throws IOException, FailedLoginException;
/**
* Lists the plugins installed in the local Geronimo server, by name and
Modified: geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginInstallerGBean.java Tue Sep 16 16:52:24 2008
@@ -50,13 +50,13 @@
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.ReferenceCollection;
import org.apache.geronimo.gbean.ReferenceCollectionEvent;
import org.apache.geronimo.gbean.ReferenceCollectionListener;
+import org.apache.geronimo.gbean.annotation.GBean;
+import org.apache.geronimo.gbean.annotation.ParamReference;
+import org.apache.geronimo.gbean.annotation.ParamSpecial;
+import org.apache.geronimo.gbean.annotation.SpecialAttributeType;
import org.apache.geronimo.kernel.InvalidGBeanException;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.kernel.basic.BasicKernel;
@@ -80,26 +80,28 @@
import org.apache.geronimo.kernel.repository.WritableListableRepository;
import org.apache.geronimo.kernel.util.XmlUtil;
import org.apache.geronimo.system.configuration.ConfigurationStoreUtil;
-import org.apache.geronimo.system.configuration.RepositoryConfigurationStore;
import org.apache.geronimo.system.configuration.PluginAttributeStore;
+import org.apache.geronimo.system.configuration.RepositoryConfigurationStore;
import org.apache.geronimo.system.plugin.model.ArtifactType;
+import org.apache.geronimo.system.plugin.model.AttributesType;
import org.apache.geronimo.system.plugin.model.ConfigXmlContentType;
import org.apache.geronimo.system.plugin.model.CopyFileType;
import org.apache.geronimo.system.plugin.model.DependencyType;
import org.apache.geronimo.system.plugin.model.HashType;
import org.apache.geronimo.system.plugin.model.LicenseType;
+import org.apache.geronimo.system.plugin.model.ModuleType;
import org.apache.geronimo.system.plugin.model.PluginArtifactType;
import org.apache.geronimo.system.plugin.model.PluginListType;
import org.apache.geronimo.system.plugin.model.PluginType;
import org.apache.geronimo.system.plugin.model.PrerequisiteType;
import org.apache.geronimo.system.plugin.model.PropertyType;
-import org.apache.geronimo.system.plugin.model.AttributesType;
-import org.apache.geronimo.system.plugin.model.ModuleType;
import org.apache.geronimo.system.repository.Maven2Repository;
import org.apache.geronimo.system.serverinfo.BasicServerInfo;
import org.apache.geronimo.system.serverinfo.ServerInfo;
import org.apache.geronimo.system.threads.ThreadPool;
import org.codehaus.plexus.util.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
@@ -109,8 +111,8 @@
*
* @version $Rev$ $Date$
*/
-public class PluginInstallerGBean implements PluginInstaller
-{
+@GBean
+public class PluginInstallerGBean implements PluginInstaller {
private static final Logger log = LoggerFactory.getLogger(PluginInstallerGBean.class);
private static int counter;
@@ -125,6 +127,7 @@
private final ClassLoader classLoader;
private final Map<String, ServerInstance> servers = new HashMap<String, ServerInstance>();
private final Collection<PersistentConfigurationList> persistentConfigurationLists;
+ private final PluginRepositoryList pluginRepositoryList;
// This regular expression for repository filename is taken from Maven1Repository.MAVEN_1_PATTERN
private static final Pattern MAVEN_1_PATTERN_PART = Pattern.compile("(.+)-([0-9].+)\\.([^0-9]+)");
@@ -143,15 +146,16 @@
* @param classLoader classLoader @throws IOException exception if server instance cannot be loaded
* @throws java.io.IOException from bad ServerInstance
*/
- public PluginInstallerGBean(ConfigurationManager configManager,
- WritableListableRepository repository,
- ConfigurationStore configStore,
- Collection<? extends ServerInstanceData> serverInstanceDatas,
- final ServerInfo serverInfo,
- ThreadPool threadPool,
- final ArtifactManager artifactManager,
- Collection<PersistentConfigurationList> persistentConfigurationLists,
- final ClassLoader classLoader) throws IOException {
+ public PluginInstallerGBean(@ParamReference(name = "ConfigManager", namingType = "ConfigurationManager")ConfigurationManager configManager,
+ @ParamReference(name = "Repository", namingType = "Repository")WritableListableRepository repository,
+ @ParamReference(name = "ConfigStore", namingType = "ConfigurationStore")ConfigurationStore configStore,
+ @ParamReference(name = "ServerInstances", namingType = "ServerInstanceData")Collection<ServerInstanceData> serverInstanceDatas,
+ @ParamReference(name = "ServerInfo") final ServerInfo serverInfo,
+ @ParamReference(name = "ThreadPool")ThreadPool threadPool,
+ @ParamReference(name = "ArtifactManager") final ArtifactManager artifactManager,
+ @ParamReference(name = "PersistentConfigurationLists", namingType = "AttributeStore")Collection<PersistentConfigurationList> persistentConfigurationLists,
+ @ParamReference(name = "PluginRepositoryList")PluginRepositoryList pluginRepositoryList,
+ @ParamSpecial(type = SpecialAttributeType.classLoader) final ClassLoader classLoader) throws IOException {
this.writeableRepo = repository;
this.configStore = configStore;
this.serverInfo = serverInfo;
@@ -166,21 +170,23 @@
this.configManager = configManager;
localSourceRepository = new GeronimoSourceRepository(configManager.getRepositories(), configManager.getArtifactResolver());
setUpServerInstances(serverInstanceDatas, serverInfo, artifactManager, servers, writeableRepo, true);
+ this.pluginRepositoryList = pluginRepositoryList;
}
/**
* Constructor for use in assembling a new server.
*
- * @param serverInstanceDatas set of server layouts
- * @param kernel kernel for current server
- * @param classLoader classLoader
* @param targetRepositoryPath location of repo to install into (not in current server)
* @param targetServerPath location of server to install into (not current server
- * @throws IOException if layouts can't be loaded
+ * @param serverInstanceDatas set of server layouts
+ * @param pluginRepositoryList
+ * @param kernel kernel for current server
+ * @param classLoader classLoader @throws IOException if layouts can't be loaded
*/
public PluginInstallerGBean(String targetRepositoryPath,
String targetServerPath,
Collection<? extends ServerInstanceData> serverInstanceDatas,
+ PluginRepositoryList pluginRepositoryList,
final Kernel kernel,
final ClassLoader classLoader) throws Exception {
final ArtifactManager artifactManager = new DefaultArtifactManager();
@@ -199,6 +205,7 @@
setUpServerInstances(serverInstanceDatas, serverInfo, artifactManager, servers, writeableRepo, false);
this.configManager = buildConfigurationManager(artifactManager, writeableRepo, kernel, configStore, classLoader, servers);
localSourceRepository = new GeronimoSourceRepository(configManager.getRepositories(), configManager.getArtifactResolver());
+ this.pluginRepositoryList = pluginRepositoryList;
}
private static void setUpServerInstances(Collection<? extends ServerInstanceData> serverInstanceDatas,
@@ -280,7 +287,12 @@
}
/* now for tests only */
- PluginInstallerGBean(ConfigurationManager configManager, WritableListableRepository repository, ConfigurationStore configStore, ServerInfo serverInfo, ThreadPool threadPool, Collection<ServerInstance> servers) {
+ PluginInstallerGBean(ConfigurationManager configManager,
+ WritableListableRepository repository,
+ ConfigurationStore configStore,
+ ServerInfo serverInfo,
+ ThreadPool threadPool,
+ Collection<ServerInstance> servers, PluginRepositoryList pluginRepositoryList) {
this.configManager = configManager;
localSourceRepository = new GeronimoSourceRepository(configManager.getRepositories(), configManager.getArtifactResolver());
this.writeableRepo = repository;
@@ -308,6 +320,7 @@
}
});
}
+ this.pluginRepositoryList = pluginRepositoryList;
}
/**
@@ -323,18 +336,18 @@
DownloadResults downloadPoller = new DownloadResults();
File targetServerPath = serverInfo.resolveServer(relativeTargetServerPath);
if (targetServerPath.exists()) {
- FileUtils.forceDelete(targetServerPath);
+ FileUtils.forceDelete(targetServerPath);
}
String targetServerPathName = targetServerPath.getAbsolutePath();
Kernel kernel = new BasicKernel("assembly");
-
+
try {
// kernel.boot();
PluginInstallerGBean installer = new PluginInstallerGBean(
targetRepositoryPath,
targetServerPathName,
serverInstanceDatas,
- kernel,
+ pluginRepositoryList, kernel,
classLoader);
installer.install(pluginList, localSourceRepository, true, null, null, downloadPoller);
@@ -350,7 +363,7 @@
throw new NullPointerException("No such server: " + server + ", known servers: " + servers.keySet());
}
PluginAttributeStore attributeStore = serverInstance.getAttributeStore();
- for (ModuleType module: overrides.getModule()) {
+ for (ModuleType module : overrides.getModule()) {
Artifact artifact = Artifact.create(module.getName());
attributeStore.setModuleGBeans(artifact, module.getGbean(), module.isLoad(), module.getCondition());
attributeStore.save();
@@ -532,18 +545,16 @@
*
* @param mavenRepository The base URL to the maven repository. This must
* contain the file geronimo-plugins.xml
- * @param username Optional username, if the maven repo uses HTTP Basic authentication.
- * Set this to null if no authentication is required.
- * @param password Optional password, if the maven repo uses HTTP Basic authentication.
- * Set this to null if no authentication is required.
*/
- public PluginListType listPlugins(URL mavenRepository, String username, String password) throws IOException, FailedLoginException {
+ public PluginListType listPlugins(URL mavenRepository) throws IOException, FailedLoginException {
try {
- SourceRepository repo = SourceRepositoryFactory.getSourceRepository(mavenRepository.toString(), username, password);
- return repo.getPluginList();
+ SourceRepository repo = pluginRepositoryList.getSourceRepository(mavenRepository.toString());
+ if (repo != null) {
+ return repo.getPluginList();
+ }
} catch (IllegalStateException e) {
- return null;
}
+ return null;
}
private SourceRepository getDefaultSourceRepository(String defaultRepository,
@@ -551,10 +562,10 @@
if (restrictToDefaultRepository && defaultRepository == null) {
throw new IllegalArgumentException("You must supply a default repository if you want to restrict to it");
}
- SourceRepository defaultSourceRepository = defaultRepository == null ? null : SourceRepositoryFactory.getSourceRepository(defaultRepository);
+ SourceRepository defaultSourceRepository = defaultRepository == null ? null : pluginRepositoryList.getSourceRepository(defaultRepository);
return defaultSourceRepository;
}
-
+
/**
* Installs a configuration from a remote repository into the local Geronimo server,
* including all its dependencies. The caller will get the results when the
@@ -601,7 +612,7 @@
public void install(PluginListType pluginsToInstall, SourceRepository defaultRepository, boolean restrictToDefaultRepository, String username, String password, DownloadPoller poller) {
install(pluginsToInstall, defaultRepository, restrictToDefaultRepository, username, password, poller, true);
}
-
+
public void install(PluginListType pluginsToInstall, SourceRepository defaultRepository, boolean restrictToDefaultRepository, String username, String password, DownloadPoller poller, boolean validatePlugins) {
List<Artifact> downloadedArtifacts = new ArrayList<Artifact>();
try {
@@ -618,7 +629,7 @@
PluginArtifactType instance = metadata.getPluginArtifact().get(0);
if (instance.getModuleId() != null) {
- if (metadata.isPluginGroup() !=null && !metadata.isPluginGroup()) {
+ if (metadata.isPluginGroup() != null && !metadata.isPluginGroup()) {
metaMap.put(toArtifact(instance.getModuleId()), metadata);
}
}
@@ -653,7 +664,7 @@
Artifact entry = toArtifact(instance.getModuleId());
List<SourceRepository> repos = getRepos(pluginsToInstall, defaultRepository, restrictToDefaultRepository, instance);
downloadArtifact(entry, metaMap, repos,
- username, password, new ResultsFileWriteMonitor(poller), working, parentStack, false, servers, true);
+ username, password, new ResultsFileWriteMonitor(poller, log), working, parentStack, false, servers, true);
downloadedArtifacts.add(entry);
} else {
List<DependencyType> deps = instance.getDependency();
@@ -661,7 +672,7 @@
Artifact entry = toArtifact(dep);
List<SourceRepository> repos = getRepos(pluginsToInstall, defaultRepository, restrictToDefaultRepository, instance);
downloadArtifact(entry, metaMap, repos,
- username, password, new ResultsFileWriteMonitor(poller), working, parentStack, false, servers, dep.isStart());
+ username, password, new ResultsFileWriteMonitor(poller, log), working, parentStack, false, servers, dep.isStart());
downloadedArtifacts.add(entry);
}
}
@@ -721,7 +732,7 @@
repoLocations = pluginsToInstall.getDefaultRepository();
}
for (String repoLocation : repoLocations) {
- SourceRepository repo = SourceRepositoryFactory.getSourceRepository(repoLocation);
+ SourceRepository repo = pluginRepositoryList.getSourceRepository(repoLocation);
repos.add(repo);
}
}
@@ -810,21 +821,21 @@
public DownloadResults checkOnInstall(Object key) {
return checkOnInstall(key, true);
}
-
+
/**
- * Gets the current progress of a download operation.
+ * Gets the current progress of a download operation.
*
- * @param key Identifies the operation to check on
+ * @param key Identifies the operation to check on
* @param remove If true and the download operation has finished, the DownloadResults
- * will be forgotten and the next call to this function will return null.
- * Otherwise, the DownloadResults will be retained until this function is
- * called with the <tt>remove</tt> parameter set to true. This parameter is
- * only used when the download operation has finished
- * (DownloadResults.isFinished() returns true).
+ * will be forgotten and the next call to this function will return null.
+ * Otherwise, the DownloadResults will be retained until this function is
+ * called with the <tt>remove</tt> parameter set to true. This parameter is
+ * only used when the download operation has finished
+ * (DownloadResults.isFinished() returns true).
*/
public DownloadResults checkOnInstall(Object key, boolean remove) {
DownloadResults results = asyncKeys.get(key);
- if (results != null) {
+ if (results != null) {
results = results.duplicate();
if (results.isFinished() && remove) {
asyncKeys.remove(key);
@@ -856,16 +867,16 @@
// 2. Validate that we can install this
validatePlugin(data);
verifyPrerequisites(data);
-
+
PluginArtifactType instance = data.getPluginArtifact().get(0);
// 3. Install the CAR into the repository (it shouldn't be re-downloaded)
if (instance.getModuleId() != null) {
Artifact pluginArtifact = toArtifact(instance.getModuleId());
- ResultsFileWriteMonitor monitor = new ResultsFileWriteMonitor(poller);
+ ResultsFileWriteMonitor monitor = new ResultsFileWriteMonitor(poller, log);
writeableRepo.copyToRepository(carFile, pluginArtifact, monitor);
installConfigXMLData(pluginArtifact, instance, servers, true);
if (instance.getCopyFile() != null) {
- extractPluginFiles(pluginArtifact, data, monitor);
+ extractPluginFiles(pluginArtifact, instance, monitor);
}
}
@@ -873,9 +884,9 @@
PluginListType pluginList = new PluginListType();
pluginList.getPlugin().add(data);
pluginList.getDefaultRepository().addAll(instance.getSourceRepository());
-
+
SourceRepository defaultSourceRepository = getDefaultSourceRepository(defaultRepository, restrictToDefaultRepository);
-
+
install(pluginList, defaultSourceRepository, restrictToDefaultRepository, username, password, poller, false);
} catch (Exception e) {
poller.setFailure(e);
@@ -910,8 +921,8 @@
}
if (!upgrade) {
log.debug("Configuration {} is already installed", artifact);
- throw new MissingDependencyException(
- "Configuration " + artifact + " is already installed.", toArtifact(metadata.getModuleId()), (Stack<Artifact>) null);
+// throw new MissingDependencyException(
+// "Configuration " + artifact + " is already installed.", toArtifact(metadata.getModuleId()), (Stack<Artifact>) null);
}
}
}
@@ -1027,7 +1038,6 @@
soFar.add(configID);
}
// Download and install the main artifact
- boolean pluginWasInstalled = false;
Artifact[] matches = configManager.getArtifactResolver().queryArtifacts(configID);
PluginArtifactType instance = null;
if (matches.length == 0) {
@@ -1065,7 +1075,7 @@
if (hash != null) {
String actual = ConfigurationStoreUtil.getActualChecksum(tempFile, hash.getType());
if (!actual.equals(hash.getValue())) {
- log.error("File download incorrect (expected {} hash {} but got {})", new String[] { hash.getType(), hash.getValue(), actual });
+ log.error("File download incorrect (expected {} hash {} but got {})", new String[]{hash.getType(), hash.getValue(), actual});
throw new IOException("File download incorrect (expected " + hash.getType() + " hash " + hash.getValue() + " but got " + actual + ")");
}
}
@@ -1085,11 +1095,6 @@
}
monitor.getResults().setCurrentMessage("Copying " + result.getArtifact() + " to the repository");
result.install(writeableRepo, monitor);
- if (pluginData != null) {
- installConfigXMLData(result.getArtifact(), instance, servers, loadOverride);
- } else {
- log.debug("No config XML data to install.");
- }
if (dependency) {
monitor.getResults().addDependencyInstalled(configID);
configID = result.getArtifact();
@@ -1097,16 +1102,11 @@
configID = result.getArtifact();
monitor.getResults().addInstalledConfigID(configID);
}
- pluginWasInstalled = true;
if (pluginData != null) {
log.debug("Installed plugin with moduleId={} and name={}", pluginData.getPluginArtifact().get(0).getModuleId(), pluginData.getName());
- }
- else {
+ } else {
log.debug("Installed artifact={}", configID);
}
- } catch (InvalidGBeanException e) {
- log.error("Invalid gbean configuration", e);
- throw new IllegalStateException("Invalid GBean configuration: " + e.getMessage(), e);
} finally {
//todo probably not needede
result.close();
@@ -1170,14 +1170,29 @@
throw new IllegalStateException("Installed configuration into repository but ConfigStore cannot load it: " + e.getMessage(), e);
}
// Copy any files out of the artifact
- PluginType currentPlugin = getPluginMetadata(configID);
- if (pluginWasInstalled && currentPlugin != null) {
- extractPluginFiles(configID, currentPlugin, monitor);
+ for (ServerInstance serverInstance: servers.values()) {
+ if (serverInstance.getAttributeStore().isModuleInstalled(configID)) {
+ return;
+ }
+ }
+ if (instance == null) {
+ PluginType currentPlugin = getPluginMetadata(configID);
+ if (currentPlugin != null) {
+ instance = currentPlugin.getPluginArtifact().get(0);
+ }
+ }
+ if (instance != null) {
+ try {
+ installConfigXMLData(configID, instance, servers, loadOverride);
+ } catch (InvalidGBeanException e) {
+ log.error("Invalid gbean configuration", e);
+ throw new IllegalStateException("Invalid GBean configuration: " + e.getMessage(), e);
+ }
+ extractPluginFiles(configID, instance, monitor);
}
}
- private void extractPluginFiles(Artifact configID, PluginType currentPlugin, ResultsFileWriteMonitor monitor) throws IOException {
- PluginArtifactType instance = currentPlugin.getPluginArtifact().get(0);
+ private void extractPluginFiles(Artifact configID, PluginArtifactType instance, ResultsFileWriteMonitor monitor) throws IOException {
for (CopyFileType data : instance.getCopyFile()) {
monitor.getResults().setCurrentFilePercent(-1);
monitor.getResults().setCurrentFile(data.getValue());
@@ -1196,7 +1211,7 @@
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 {}", configID, sourceFile);
+ log.error("Installed configuration into repository but cannot locate file to copy {}", sourceFile);
return;
}
if (set.iterator().next().getPath().endsWith("/")) {
@@ -1228,11 +1243,11 @@
createDirectory(targetDir);
URI targetURI = targetDir.toURI();
if (!targetDir.isDirectory()) {
- log.error("Plugin install cannot write file {} to {} because {} is not a directory", new String[] { data.getValue(), destDir, targetDir.getAbsolutePath() });
+ log.error("Plugin install cannot write file {} to {} because {} is not a directory", new String[]{data.getValue(), destDir, targetDir.getAbsolutePath()});
return;
}
if (!targetDir.canWrite()) {
- log.error("Plugin install cannot write file {} to {} because {} is not writable", new String[] { data.getValue(), destDir, targetDir.getAbsolutePath() });
+ log.error("Plugin install cannot write file {} to {} because {} is not writable", new String[]{data.getValue(), destDir, targetDir.getAbsolutePath()});
return;
}
int start = -1;
@@ -1495,8 +1510,8 @@
* Generates dependencies and an optional prerequisite based on a list of
* dependencies for a Gernonimo module.
*
- * @param real A list with elements of type Dependency
- * @param deps A list with elements of type String (holding a module ID / Artifact name)
+ * @param real A list with elements of type Dependency
+ * @param deps A list with elements of type String (holding a module ID / Artifact name)
* @param includeVersion whether to include a version in the plugin xml dependency
*/
private static void processDependencyList(List<Dependency> real, List<DependencyType> deps, boolean includeVersion) {
@@ -1628,7 +1643,8 @@
serverInstance.getAttributeStore().setModuleGBeans(configID, configXmlContent.getGbean(), loadOverride && configXmlContent.isLoad(), configXmlContent.getCondition());
}
} else {
- getServerInstance("default", servers).getAttributeStore().setModuleGBeans(configID, null, loadOverride, null);
+ ServerInstance serverInstance = getServerInstance("default", servers);
+ serverInstance.getAttributeStore().setModuleGBeans(configID, null, loadOverride, null);
}
}
if (pluginData == null) {
@@ -1743,8 +1759,8 @@
private int totalBytes;
private String file;
- public ResultsFileWriteMonitor(DownloadPoller results) {
- this.results = results;
+ public ResultsFileWriteMonitor(DownloadPoller results, Logger log) {
+ this.results = new LoggingPoller(results, log);
}
public void setTotalBytes(int totalBytes) {
@@ -1783,27 +1799,72 @@
}
}
- public static final GBeanInfo GBEAN_INFO;
+ private static class LoggingPoller implements DownloadPoller {
+ private final DownloadPoller downloadPoller;
+ private final Logger log;
- static {
- GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(PluginInstallerGBean.class);
- infoFactory.addInterface(PluginInstaller.class);
- infoFactory.addReference("ConfigManager", ConfigurationManager.class, "ConfigurationManager");
- infoFactory.addReference("Repository", WritableListableRepository.class, "Repository");
- infoFactory.addReference("ConfigStore", ConfigurationStore.class, "ConfigurationStore");
- infoFactory.addReference("ServerInfo", ServerInfo.class, "GBean");
- infoFactory.addReference("ThreadPool", ThreadPool.class, "GBean");
- infoFactory.addReference("ServerInstances", ServerInstanceData.class, "ServerInstanceData");
- infoFactory.addReference("ArtifactManager", ArtifactManager.class, "GBean");
- infoFactory.addReference("PersistentConfigurationLists", PersistentConfigurationList.class, "AttributeStore");
- infoFactory.addAttribute("classLoader", ClassLoader.class, false);
- infoFactory.setConstructor(new String[]{"ConfigManager", "Repository", "ConfigStore",
- "ServerInstances", "ServerInfo", "ThreadPool", "ArtifactManager", "PersistentConfigurationLists", "classLoader"});
+ private LoggingPoller(DownloadPoller downloadPoller, Logger log) {
+ this.downloadPoller = downloadPoller;
+ this.log = log;
+ }
- GBEAN_INFO = infoFactory.getBeanInfo();
- }
+ public void addRemovedConfigID(Artifact obsolete) {
+ log.info("Removed artifact: " + obsolete);
+ downloadPoller.addRemovedConfigID(obsolete);
+ }
+
+ public void addInstalledConfigID(Artifact target) {
+ log.info("Installed artifact:" + target);
+ downloadPoller.addInstalledConfigID(target);
+ }
+
+ public void addRestartedConfigID(Artifact target) {
+ log.info("Restarted artifact:" + target);
+ downloadPoller.addRestartedConfigID(target);
+ }
+
+ public void addSkippedConfigID(MissingDependencyException e) {
+ log.info("Skipped artifact due to: ", e);
+ downloadPoller.addSkippedConfigID(e);
+ }
+
+ public void addDependencyPresent(Artifact dep) {
+ log.info("Artifact already installed:" + dep);
+ downloadPoller.addDependencyPresent(dep);
+ }
+
+ public void addDependencyInstalled(Artifact dep) {
+ log.info("Installed dependency:" + dep);
+ downloadPoller.addDependencyInstalled(dep);
+ }
+
+ public void setCurrentFile(String currentFile) {
+ log.info("Current file:" + currentFile);
+ downloadPoller.setCurrentFile(currentFile);
+ }
+
+ public void setCurrentMessage(String currentMessage) {
+ log.info(currentMessage);
+ downloadPoller.setCurrentMessage(currentMessage);
+ }
- public static GBeanInfo getGBeanInfo() {
- return GBEAN_INFO;
+ public void setCurrentFilePercent(int currentFileProgress) {
+ downloadPoller.setCurrentFilePercent(currentFileProgress);
+ }
+
+ public void addDownloadBytes(long bytes) {
+ downloadPoller.addDownloadBytes(bytes);
+ }
+
+ public void setFailure(Exception failure) {
+ log.info("Failure: ", failure);
+ downloadPoller.setFailure(failure);
+ }
+
+ public void setFinished() {
+ log.info("Finished");
+ downloadPoller.setFinished();
+ }
}
+
}
Modified: geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryDownloader.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryDownloader.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryDownloader.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryDownloader.java Tue Sep 16 16:52:24 2008
@@ -18,21 +18,32 @@
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Properties;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.geronimo.gbean.AbstractName;
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.annotation.GBean;
+import org.apache.geronimo.gbean.annotation.ParamAttribute;
+import org.apache.geronimo.gbean.annotation.ParamReference;
+import org.apache.geronimo.gbean.annotation.ParamSpecial;
+import org.apache.geronimo.gbean.annotation.SpecialAttributeType;
import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.system.serverinfo.ServerInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* An implementation of PluginRepositoryList that downloads plugins from
@@ -40,55 +51,121 @@
*
* @version $Rev$ $Date$
*/
+@GBean
public class PluginRepositoryDownloader implements PluginRepositoryList {
private static final Logger log = LoggerFactory.getLogger(PluginRepositoryDownloader.class);
private List<String> downloadRepositories = new ArrayList<String>();
- private List<String> userRepositories = new ArrayList<String>();
- private Kernel kernel;
- private AbstractName name;
- private URL repositoryList;
-
- public PluginRepositoryDownloader(List<String> downloadRepositories, List<String> userRepositories, URL repositoryList, Kernel kernel, AbstractName name) {
+ private Map<String, String[]> userRepositories = new HashMap<String, String[]>();
+ private final File userRepositoryList;
+ private final boolean restrictToKnownRepositories;
+ private final Kernel kernel;
+ private final AbstractName name;
+ private final URL repositoryList;
+ private static final String COMMENT = "List of known plugin repositories. Fomat: <url>=<username>=<password>";
+
+ public PluginRepositoryDownloader(@ParamAttribute(name = "downloadRepositories")List<String> downloadRepositories,
+ @ParamAttribute(name = "userRepositoryList")String userRepositoryList,
+ @ParamAttribute(name = "repositoryList")URL repositoryList,
+ @ParamAttribute(name = "restrictToKnownRepositories")boolean restrictToKnownRepositories,
+ @ParamReference(name = "ServerInfo")ServerInfo serverInfo,
+ @ParamSpecial(type = SpecialAttributeType.kernel)Kernel kernel,
+ @ParamSpecial(type = SpecialAttributeType.abstractName)AbstractName name) {
if (downloadRepositories != null) this.downloadRepositories = downloadRepositories;
- if (userRepositories != null) this.userRepositories = userRepositories;
this.repositoryList = repositoryList;
+ this.userRepositoryList = serverInfo.resolveServer(userRepositoryList);
+ this.restrictToKnownRepositories = restrictToKnownRepositories;
this.kernel = kernel;
this.name = name;
+ loadUserRepositories();
}
- /**
- * The list of repositories that were downloaded from central.
- */
- public void setDownloadRepositories(List<String> downloadRepositories) {
- this.downloadRepositories = downloadRepositories;
- if (this.downloadRepositories == null) this.downloadRepositories = new ArrayList<String>();
+ public PluginRepositoryDownloader(Map<String, String[]> userRepositories, boolean restrictToKnownRepositories) {
+ this.userRepositories.putAll(userRepositories);
+ this.restrictToKnownRepositories = restrictToKnownRepositories;
+ userRepositoryList = null;
+ kernel = null;
+ name = null;
+ repositoryList = null;
}
- /**
- * Any repositories that the user added manually
- */
- public void setUserRepositories(List<String> userRepositories) {
- this.userRepositories = userRepositories;
- if (this.userRepositories == null) this.userRepositories = new ArrayList<String>();
+ private synchronized void loadUserRepositories() {
+ userRepositories.clear();
+ Properties properties = new Properties();
+ boolean modified = false;
+ try {
+ InputStream in = new FileInputStream(userRepositoryList);
+ try {
+ properties.load(in);
+ for (Map.Entry entry : properties.entrySet()) {
+ String url = (String) entry.getKey();
+ if (!url.endsWith("/")) {
+ url = url + "/";
+ modified = true;
+ }
+ String rawCreds = (String) entry.getValue();
+ String[] creds = null;
+ if (rawCreds.length() > 0) {
+ creds = rawCreds.split("=");
+ if (creds.length != 2) {
+ break;
+ }
+ }
+ userRepositories.put(url, creds);
+ }
+ } finally {
+ in.close();
+ }
+ } catch (IOException e) {
+ //not much to do
+ }
+ if (modified) {
+ saveUserRepositories();
+ }
+ }
+
+ private synchronized void saveUserRepositories() {
+ Properties properties = new Properties();
+ for (Map.Entry<String, String[]> entry : userRepositories.entrySet()) {
+ String url = entry.getKey();
+ String[] creds = entry.getValue();
+ if (creds == null || creds.length != 2) {
+ properties.setProperty(url, "");
+ } else {
+ properties.setProperty(url, creds[0] + "=" + creds[1]);
+ }
+ }
+ try {
+ OutputStream out = new FileOutputStream(userRepositoryList);
+ try {
+ properties.store(out, COMMENT);
+ } finally {
+ out.close();
+ }
+ } catch (IOException e) {
+ //not much to do
+ }
}
+
/**
* Gets the union of centrally-listed repositories and user-added repositories.
*/
public List<URL> getRepositories() {
List<URL> list = new ArrayList<URL>();
- for (String url : downloadRepositories) {
- url = url.trim();
- if (!url.endsWith("/")) {
- url = url + "/";
- }
- try {
- list.add(new URL(url));
- } catch (MalformedURLException e) {
- log.error("Unable to format plugin repository URL " + url, e);
+ if (!restrictToKnownRepositories) {
+ for (String url : downloadRepositories) {
+ url = url.trim();
+ if (!url.endsWith("/")) {
+ url = url + "/";
+ }
+ try {
+ list.add(new URL(url));
+ } catch (MalformedURLException e) {
+ log.error("Unable to format plugin repository URL " + url, e);
+ }
}
}
- for (String userRepository : userRepositories) {
+ for (String userRepository : userRepositories.keySet()) {
userRepository = userRepository.trim();
URL url = null;
try {
@@ -103,9 +180,37 @@
return list;
}
- static URI resolveRepository(String userRepository) {
+ public SourceRepository getSourceRepository(String repo) {
+ if (repo == null) {
+ throw new IllegalArgumentException("No repo supplied");
+ }
+ URI repoURI = resolveRepository(repo);
+ if (repoURI == null) {
+ throw new IllegalStateException("Can't locate repo " + repo);
+ }
+ if (!repo.endsWith("/")) {
+ repo = repo + "/";
+ }
+ String scheme = repoURI.getScheme();
+ if (scheme.startsWith("http")) {
+ String[] creds = userRepositories.get(repo);
+ if (creds == null) {
+ return new RemoteSourceRepository(repoURI, null, null);
+ } else {
+ return new RemoteSourceRepository(repoURI, creds[0], creds[1]);
+ }
+ } else if ("file".equals(scheme)) {
+ return new LocalSourceRepository(new File(repoURI));
+ }
+ throw new IllegalStateException("Cannot identify desired repo type for " + repo);
+ }
+
+ private URI resolveRepository(String userRepository) {
if (!userRepository.endsWith("/")) {
- userRepository = userRepository + "/";
+ userRepository = userRepository + "/";
+ }
+ if (restrictToKnownRepositories && !userRepositories.containsKey(userRepository)) {
+ return null;
}
try {
URI uri = new URI(userRepository);
@@ -160,32 +265,9 @@
/**
* Adds a new repository that the user put in manually.
*/
- public void addUserRepository(URL repo) {
- userRepositories.add(repo.toString());
- try {
- kernel.setAttribute(name, "userRepositories", userRepositories);
- } catch (Exception e) {
- log.error("Unable to save user repositories", e);
- }
+ public synchronized void addUserRepository(URL repo, String userName, String password) {
+ userRepositories.put(repo.toString(), userName == null ? null : new String[]{userName, password});
+ saveUserRepositories();
}
- public static final GBeanInfo GBEAN_INFO;
-
- static {
- GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(PluginRepositoryDownloader.class);
-
- infoFactory.addAttribute("downloadRepositories", List.class, true);
- infoFactory.addAttribute("userRepositories", List.class, true);
- infoFactory.addAttribute("repositoryList", URL.class, true);
- infoFactory.addAttribute("kernel", Kernel.class, false);
- infoFactory.addAttribute("abstractName", AbstractName.class, false);
- infoFactory.addInterface(PluginRepositoryList.class);
- infoFactory.setConstructor(new String[]{"downloadRepositories", "userRepositories", "repositoryList", "kernel", "abstractName"});
-
- GBEAN_INFO = infoFactory.getBeanInfo();
- }
-
- public static GBeanInfo getGBeanInfo() {
- return GBEAN_INFO;
- }
}
Modified: geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryList.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryList.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryList.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/PluginRepositoryList.java Tue Sep 16 16:52:24 2008
@@ -27,5 +27,7 @@
public interface PluginRepositoryList {
public List<URL> getRepositories();
public void refresh();
- public void addUserRepository(URL repo);
+ public void addUserRepository(URL repo, String userName, String password);
+
+ public SourceRepository getSourceRepository(String repo);
}
Modified: geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/RemoteSourceRepository.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/RemoteSourceRepository.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/RemoteSourceRepository.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-plugin/src/main/java/org/apache/geronimo/system/plugin/RemoteSourceRepository.java Tue Sep 16 16:52:24 2008
@@ -57,8 +57,8 @@
public class RemoteSourceRepository implements SourceRepository {
private final URI base;
- private String username = null;
- private String password = null;
+ private final String username;
+ private final String password;
public RemoteSourceRepository(URI base, String username, String password) {
if (!base.getPath().endsWith("/")) {
@@ -72,7 +72,7 @@
public PluginListType getPluginList() {
try {
URL uri = base.resolve("geronimo-plugins.xml").toURL();
- InputStream in = openStream(null, uri);
+ InputStream in = openStream(uri);
if (in != null) {
try {
return PluginXmlUtil.loadPluginList(in);
@@ -86,7 +86,7 @@
return null;
}
- public OpenResult open(Artifact artifact, FileWriteMonitor monitor) throws IOException, FailedLoginException {
+ public OpenResult open(final Artifact artifact, final FileWriteMonitor monitor) throws IOException, FailedLoginException {
// If the artifact version is resolved then look for the artifact in the repo
if (artifact.isResolved()) {
@@ -162,8 +162,9 @@
});
for (Version version : available) {
- URL location = getURL(new Artifact(artifact.getGroupId(), artifact.getArtifactId(), version, artifact.getType()));
- OpenResult result = open(artifact, location);
+ Artifact versionedArtifact = new Artifact(artifact.getGroupId(), artifact.getArtifactId(), version, artifact.getType());
+ URL location = getURL(versionedArtifact);
+ OpenResult result = open(versionedArtifact, location);
if (result != null) {
return result;
}
@@ -174,12 +175,11 @@
}
private OpenResult open(Artifact artifact, URL location) throws IOException, FailedLoginException {
- InputStream in = openStream(artifact, location);
+ InputStream in = openStream(location);
return (in == null) ? null : new RemoteOpenResult(artifact, in);
}
- private InputStream openStream(Artifact artifact, URL location) throws IOException, FailedLoginException {
- int size = 0;
+ private InputStream openStream(URL location) throws IOException, FailedLoginException {
URLConnection con = location.openConnection();
if (con instanceof HttpURLConnection) {
HttpURLConnection http = (HttpURLConnection) con;
@@ -198,15 +198,8 @@
} else if (http.getResponseCode() == 404) {
return null; // Not found at this repository
}
- if (http.getContentLength() > 0) {
- size = http.getContentLength();
- }
} else if (http.getResponseCode() == 404) {
return null; // Not found at this repository
- } else {
- if (http.getContentLength() > 0) {
- size = http.getContentLength();
- }
}
return http.getInputStream();
}
@@ -220,10 +213,10 @@
try {
URL metaURL = base.resolve( "maven-metadata.xml").toURL();
- in = openStream(null, metaURL);
+ in = openStream(metaURL);
if (in == null) { // check for local maven metadata
metaURL = base.resolve("maven-metadata-local.xml").toURL();
- in = openStream(null, metaURL);
+ in = openStream(metaURL);
}
if (in != null) {
DocumentBuilder builder = XmlUtil.newDocumentBuilderFactory().newDocumentBuilder();
@@ -315,6 +308,9 @@
private File file;
private RemoteOpenResult(Artifact artifact, InputStream in) {
+ if (!artifact.isResolved()) {
+ throw new IllegalStateException("Artifact is not resolved: " + artifact);
+ }
this.artifact = artifact;
this.in = in;
}
Modified: geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/CopyFileTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/CopyFileTest.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/CopyFileTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/CopyFileTest.java Tue Sep 16 16:52:24 2008
@@ -93,7 +93,8 @@
public void execute(String consumerName, Runnable runnable) {
new Thread(runnable).start();
}
- }, new ArrayList<ServerInstance>());
+ }, new ArrayList<ServerInstance>(),
+ null);
}
public void testCopyFile() throws Exception {
Modified: geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/PluginInstallerTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/PluginInstallerTest.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/PluginInstallerTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-plugin/src/test/java/org/apache/geronimo/system/plugin/PluginInstallerTest.java Tue Sep 16 16:52:24 2008
@@ -16,39 +16,20 @@
*/
package org.apache.geronimo.system.plugin;
-import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
-import java.util.List;
-import java.util.LinkedHashSet;
import java.util.concurrent.TimeUnit;
import junit.framework.TestCase;
-import org.apache.geronimo.gbean.AbstractName;
-import org.apache.geronimo.kernel.config.Configuration;
-import org.apache.geronimo.kernel.config.ConfigurationData;
-import org.apache.geronimo.kernel.config.ConfigurationManager;
-import org.apache.geronimo.kernel.config.ConfigurationStore;
-import org.apache.geronimo.kernel.config.LifecycleException;
-import org.apache.geronimo.kernel.config.LifecycleMonitor;
-import org.apache.geronimo.kernel.config.LifecycleResults;
-import org.apache.geronimo.kernel.config.NoSuchConfigException;
-import org.apache.geronimo.kernel.config.NoSuchStoreException;
-import org.apache.geronimo.kernel.config.InvalidConfigException;
import org.apache.geronimo.kernel.mock.MockConfigStore;
import org.apache.geronimo.kernel.mock.MockWritableListableRepository;
import org.apache.geronimo.kernel.mock.MockConfigurationManager;
-import org.apache.geronimo.kernel.repository.Artifact;
-import org.apache.geronimo.kernel.repository.ArtifactResolver;
-import org.apache.geronimo.kernel.repository.Repository;
-import org.apache.geronimo.kernel.repository.Version;
-import org.apache.geronimo.kernel.repository.MissingDependencyException;
import org.apache.geronimo.system.plugin.model.PluginArtifactType;
import org.apache.geronimo.system.plugin.model.PluginListType;
import org.apache.geronimo.system.plugin.model.PluginType;
import org.apache.geronimo.system.serverinfo.BasicServerInfo;
+import org.apache.geronimo.system.serverinfo.ServerInfo;
import org.apache.geronimo.system.threads.ThreadPool;
/**
@@ -67,8 +48,9 @@
String url = getClass().getResource("/geronimo-plugins.xml").toString();
int pos = url.lastIndexOf("/");
testRepo = url.substring(0, pos);
+ ServerInfo serverInfo = new BasicServerInfo(".");
installer = new PluginInstallerGBean(new MockConfigurationManager(), new MockWritableListableRepository(), new MockConfigStore(),
- new BasicServerInfo("."), new ThreadPool() {
+ serverInfo, new ThreadPool() {
public int getPoolSize() {
return 0;
}
@@ -88,11 +70,12 @@
public void execute(String consumerName, Runnable runnable) {
new Thread(runnable).start();
}
- }, new ArrayList<ServerInstance>());
+ }, new ArrayList<ServerInstance>(),
+ new PluginRepositoryDownloader(Collections.<String>emptyList(), "", null, false, serverInfo, null, null));
}
public void testParsing() throws Exception {
- PluginListType list = installer.listPlugins(new URL(testRepo), null, null);
+ PluginListType list = installer.listPlugins(new URL(testRepo));
assertNotNull(list);
assertEquals(1, list.getDefaultRepository().size());
assertEquals(fakeRepo, list.getDefaultRepository().get(0));
Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java Tue Sep 16 16:52:24 2008
@@ -247,6 +247,10 @@
attributeChanged();
}
+ public boolean isModuleInstalled(Artifact artifact) {
+ return serverOverride.getConfiguration(artifact) != null;
+ }
+
public void addConfigSubstitutions(Properties properties) {
localConfigSubstitutions.putAll(properties);
Map<String, Object> configSubstutions = loadAllConfigSubstitutions(localConfigSubstitutions, prefix);
Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java Tue Sep 16 16:52:24 2008
@@ -39,4 +39,6 @@
public void setModuleGBeans(Artifact moduleName, List<GbeanType> gbeans, boolean load, String condition) throws InvalidGBeanException;
void addConfigSubstitutions(Properties properties);
+
+ boolean isModuleInstalled(Artifact artifact);
}
Modified: geronimo/server/trunk/plugins/clustering/geronimo-farm/src/main/java/org/apache/geronimo/farm/discovery/JmxDiscoveryPublisher.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/clustering/geronimo-farm/src/main/java/org/apache/geronimo/farm/discovery/JmxDiscoveryPublisher.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/clustering/geronimo-farm/src/main/java/org/apache/geronimo/farm/discovery/JmxDiscoveryPublisher.java (original)
+++ geronimo/server/trunk/plugins/clustering/geronimo-farm/src/main/java/org/apache/geronimo/farm/discovery/JmxDiscoveryPublisher.java Tue Sep 16 16:52:24 2008
@@ -31,7 +31,7 @@
import org.apache.geronimo.kernel.rmi.RMIRegistryService;
/**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
*/
@GBean
public class JmxDiscoveryPublisher implements GBeanLifecycle {
@@ -49,7 +49,7 @@
) throws URISyntaxException, IOException {
this.discoveryAgent = discoveryAgent;
String query = null;
- if (nodeName != null) {
+ if (nodeName != null && nodeName.length() > 0) {
query = "node=" + nodeName;
}
if (clusterName != null) {
Modified: geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java (original)
+++ geronimo/server/trunk/plugins/clustering/geronimo-plugin-farm/src/main/java/org/apache/geronimo/farm/plugin/FarmGBean.java Tue Sep 16 16:52:24 2008
@@ -40,6 +40,8 @@
import org.apache.geronimo.system.plugin.DownloadResults;
import org.apache.geronimo.system.plugin.PluginInstaller;
import org.apache.geronimo.system.plugin.model.PluginListType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* //need interface for operations
@@ -49,6 +51,7 @@
*/
@GBean
public class FarmGBean implements NodeListener, org.apache.geronimo.system.plugin.Farm {
+ private static final Logger log = LoggerFactory.getLogger(FarmGBean.class);
private String defaultRepository;
private EntityManagerFactory emf;
@@ -65,6 +68,7 @@
public Map<String, DownloadResults> addNode(String clusterName, NodeInfo nodeInfo) {
+ log.info("Node " + nodeInfo.getName() + " added to cluster " + clusterName);
JpaClusterInfo cluster;
JpaNodeInfo jpaNodeInfo;
synchronized (this) {
@@ -82,6 +86,7 @@
}
public void removeNode(String clusterName, String nodeName) {
+ log.info("Node " + nodeName + " renoved from cluster " + clusterName);
synchronized (this) {
JpaContext clusterContext = new JpaContext(emf);
JpaClusterInfo cluster = clusterContext.getClusterInfo(clusterName);
Modified: geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/AddRepositoryHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/AddRepositoryHandler.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/AddRepositoryHandler.java (original)
+++ geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/AddRepositoryHandler.java Tue Sep 16 16:52:24 2008
@@ -145,7 +145,10 @@
return false;
}
}
- lists.get(0).addUserRepository(url);
+ //TODO fish these out of the request?
+ String userName = null;
+ String password = null;
+ lists.get(0).addUserRepository(url, userName, password);
request.setAttribute("repository", repo);
return true;
}
Modified: geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/BaseImportExportHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/BaseImportExportHandler.java?rev=696105&r1=696104&r2=696105&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/BaseImportExportHandler.java (original)
+++ geronimo/server/trunk/plugins/console/plugin-portlets/src/main/java/org/apache/geronimo/console/car/BaseImportExportHandler.java Tue Sep 16 16:52:24 2008
@@ -70,7 +70,7 @@
if (list == null || !repo.equals(listRepo)) {
try {
- list = pluginInstaller.listPlugins(new URL(repo), user, pass);
+ list = pluginInstaller.listPlugins(new URL(repo));
} catch (FailedLoginException e) {
throw new PortletException("Invalid login for repository '" + repo + "'", e);
}
|