I've felt that we need to migrate our choice of IoC (plexus) towards a better documented and better supported container (I'm leaning towards Spring)

I also recognize that this kind of change can't be done quickly or in a big-bang approach. I've started an assessment of the plexus usage within Archiva and have planned out a first draft on what we can do to change that usage.

There are plenty of plexus components that need to be migrated before we can make the change to use a container such as spring. There's also the whole Redback package that would need to be migrated as well.

So here's my first draft.
If there is interest, we can start to plan, schedule, and do the changes in small increments. This should probably live as a document in the wiki, but for now I think we can discuss this in the mailing list.

org.codehaus.plexus.cache.Cache;

 Used:
   archiva-repository-layer
   archiva-policies
 Plan:
   Use ehcache directly
   or use Spring Caching (which uses ehcache)

org.codehaus.plexus.commandline.DefaultExecutableResolver;
org.codehaus.plexus.commandline.ExecutableResolver;

 Used:
   archiva-webapp-test
 Plan:
   Investigate Need.
   Fork into archiva if truely needed.

org.codehaus.plexus.tools.cli.AbstractCli;

 Used:
   archiva-cli
 Plan:
   Use commons-cli instead.

org.codehaus.plexus.util.cli.Commandline;
org.codehaus.plexus.util.cli.CommandLineUtils;
org.codehaus.plexus.util.cli.StreamConsumer;
org.codehaus.plexus.util.cli.WriterStreamConsumer;

 Used:
   archiva-webapp-test
 Plan:
   Use JDK 1.5 and java.lang.ProcessBuilder

org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
org.codehaus.plexus.context.Context;
org.codehaus.plexus.context.ContextException;
org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException;
org.codehaus.plexus.personality.plexus.lifecycle.phase.StoppingException;
org.codehaus.plexus.PlexusConstants;
org.codehaus.plexus.PlexusContainer;
org.codehaus.plexus.PlexusTestCase;

 Used:
   archiva-cli
   archiva-repository-layer
   archiva-webapp
   archiva-artifact-reports
   archiva-configuration
   archiva-core-consumers
   archiva-database
   archiva-database-consumers
   archiva-indexer
   archiva-lucene-consumers
   archiva-proxy
   archiva-scheduled
   archiva-webapp
 Plan:
   Switch to Spring Container.

org.codehaus.plexus.digest.ChecksumFile;
org.codehaus.plexus.digest.Digester;
org.codehaus.plexus.digest.DigesterException;

 Used:
   archiva-policies
   archiva-commons
   archiva-core-consumers
   archiva-transaction
   archiva-database-consumers
 Plan:
   Migrate to commons-codec

org.codehaus.plexus.evaluator.DefaultExpressionEvaluator;
org.codehaus.plexus.evaluator.EvaluatorException;
org.codehaus.plexus.evaluator.ExpressionEvaluator;
org.codehaus.plexus.evaluator.ExpressionSource;
org.codehaus.plexus.evaluator.sources.PropertiesExpressionSource;
org.codehaus.plexus.evaluator.sources.SystemPropertyExpressionSource;

 Used:
   archiva-repository-layer
   archiva-configuration
 Plan:
   Migrate expression-evaluator to archiva codebase.

org.codehaus.plexus.i18n.I18N;

 Used:
   archiva-converter
 Plan:
   Migrate to standard JDK i18n pattern.

org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
org.codehaus.plexus.jdo.JdoFactory;

 Used:
   archiva-scheduled
   archiva-database
 Plan:
   Migrate to JDK 1.5 + JPA + Annotations

org.codehaus.plexus.logging.AbstractLogEnabled;
org.codehaus.plexus.logging.Logger;

 Used:
   archiva-repository-layer
   archiva-webapp
 Plan:
   Use slf4j directly

org.codehaus.plexus.redback.authentication.AuthenticationDataSource;
org.codehaus.plexus.redback.authentication.AuthenticationException;
org.codehaus.plexus.redback.authentication.AuthenticationResult;
org.codehaus.plexus.redback.authorization.AuthorizationException;
org.codehaus.plexus.redback.authorization.AuthorizationResult;
org.codehaus.plexus.redback.keys.KeyManager;
org.codehaus.plexus.redback.keys.memory.MemoryKeyManager;
org.codehaus.plexus.redback.policy.AccountLockedException;
org.codehaus.plexus.redback.policy.DefaultUserSecurityPolicy;
org.codehaus.plexus.redback.policy.MustChangePasswordException;
org.codehaus.plexus.redback.policy.UserSecurityPolicy;
org.codehaus.plexus.redback.rbac.RBACManager;
org.codehaus.plexus.redback.rbac.RbacManagerException;
org.codehaus.plexus.redback.rbac.Resource;
org.codehaus.plexus.redback.rbac.UserAssignment;
org.codehaus.plexus.redback.role.RoleManager;
org.codehaus.plexus.redback.role.RoleManagerException;
org.codehaus.plexus.redback.system.check.EnvironmentCheck;
org.codehaus.plexus.redback.system.DefaultSecuritySession;
org.codehaus.plexus.redback.system.DefaultSecuritySystem;
org.codehaus.plexus.redback.system.SecuritySession;
org.codehaus.plexus.redback.system.SecuritySystem;
org.codehaus.plexus.redback.system.SecuritySystemConstants;
org.codehaus.plexus.redback.users.memory.MemoryUserManager;
org.codehaus.plexus.redback.users.User;
org.codehaus.plexus.redback.users.UserManager;
org.codehaus.plexus.redback.users.UserNotFoundException;
org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;

 Used:
   archiva-security
   archiva-webapp
 Plan:
   Develop redback <-> spring integration and use it.

org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry;
org.codehaus.plexus.registry.Registry;
org.codehaus.plexus.registry.RegistryException;
org.codehaus.plexus.registry.RegistryListener;

 Used:
   archiva-artifact-reports
   archiva-configuration
   archiva-core-consumers
   archiva-database-consumers
   archiva-indexer
   archiva-lucene-consumers
   archiva-proxy
   archiva-repository-layer
   archiva-scheduled
   archiva-security
   archiva-webapp
 Plan:
   Use commons-configuration
   or Spring JavaConfig

org.codehaus.plexus.scheduler.AbstractJob;
org.codehaus.plexus.scheduler.CronExpressionValidator;
org.codehaus.plexus.scheduler.Scheduler;

 Uses:
   archiva-scheduled
   archiva-webapp
 Plan:
   Use Spring Scheduler / Quartz.

org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
org.codehaus.plexus.taskqueue.execution.TaskExecutor;
org.codehaus.plexus.taskqueue.Task;
org.codehaus.plexus.taskqueue.TaskQueue;
org.codehaus.plexus.taskqueue.TaskQueueException;

 Used:
   archiva-scheduled
   archiva-webapp
 Plan:
   Move to Spring JMS?

org.codehaus.plexus.util.DirectoryWalker;
org.codehaus.plexus.util.DirectoryWalkListener;
org.codehaus.plexus.util.FileUtils;
org.codehaus.plexus.util.IOUtil;
org.codehaus.plexus.util.SelectorUtils;

 Used:
   archiva-repository-layer
   archiva-artifact-converter
   archiva-common
   archiva-configuration
   archiva-core-consumers
   archiva-database-consumers
   archiva-indexer
   archiva-metadata-reports
   archiva-policies
   archiva-transaction
   archiva-webapp
 Plan:
   Use commons-io equivalents

org.codehaus.plexus.util.StringUtils;

 Used:
   archiva-repository-layer
 Plan:
   Switch to commons-lang

org.codehaus.plexus.util.xml.pull.XmlPullParserException;

 Used:
   archiva-artifact-converter
   archiva-webapp
 Plan:
   Implement AnonymousProjectReader idea from 1.0 days to
   read the xml / modelVersion and then load the appropriate
   ProjectModel###Reader object.

org.codehaus.plexus.webdav.AbstractDavServerComponent;
org.codehaus.plexus.webdav.DavServerComponent;
org.codehaus.plexus.webdav.DavServerException;
org.codehaus.plexus.webdav.DavServerListener;
org.codehaus.plexus.webdav.DavServerManager;
org.codehaus.plexus.webdav.servlet.DavServerRequest;
org.codehaus.plexus.webdav.servlet.multiplexed.MultiplexedWebDavServlet;
org.codehaus.plexus.webdav.util.MimeTypes;
org.codehaus.plexus.webdav.util.WebdavMethodUtil;

 Used:
   archiva-webapp
 Plan:
   Fork it.could.webdav into new archiva-davserver component.

org.codehaus.plexus.xwork.action.PlexusActionSupport;

 Used:
   archiva-webapp
 Plan:
   Switch to SwingMVC

- Joakim

Reply via email to