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