On 19/02/2008, at 9:37 AM, Joakim Erdfelt wrote:

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.

Sounds great.

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.

Another thing is that (if it's easier/makes sense) we can continue using those plexus components but add alternate wiring information to them. I think some of them are valuable or need a different fix (eg, the webdav).



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.

+1



org.codehaus.plexus.cache.Cache;

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

the latter sounds best. Also worth reviewing whether this is a design issue - I'm surprised the policies needs a cache?

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

Used:
  archiva-webapp-test
Plan:
  Investigate Need.

agreed.


  Fork into archiva if truely needed.

well - there should be no problem with using plexus-utils if it provides something for the time being. commons-exec did start moving again too, I noticed.



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

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

I also like the one by Sam Pullara that I used in the continuum data management tools - you might like to check it out (uses annotations)



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

Sounds good if it has the necessary functionality.



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.

We need to assess the impact of this on the webapp - I think we can take all the plexus-isms out of there and just use the annotations, then we could switch to the spring objectfactory pretty easily.



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

Are you sure it provides this? I thought these were convenience wrappers for streaming, etc.



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.

Need more info on what this does - seems like something the container should handle?

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

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

Bigger job, but long term seems to make sense. This can be isolated in the database module for now. Also not sure why JDO stuff is in - scheduled.



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

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

+1


  Develop redback <-> spring integration and use it.

+1



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

Will need to look into this. I might just want to migrate the registry to commons.



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.

+1



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?

I don't think it needs that - commons-collections and quartz can probably do it :)


  Use commons-io equivalents

+1



org.codehaus.plexus.util.StringUtils;

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

+1

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.

Already implemented using StAX using the modello stax reader. That would be the fastest approach - just reuse what Maven provides.


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

Let's look at this separately - I don't really want to maintain a DAV implementation - I think we should work with someone else that does.



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

Used:
  archiva-webapp
Plan:
  Switch to SwingMVC

Swing?

I'm not convinced SpringMVC is a good move - we would be better going to struts2 or staying with Webwork since it's minimal impact to the code. The other doesn't bring any obvious benefit for all the work?

Good proposal, though - when will you be getting started?

- Brett

--
Brett Porter
[EMAIL PROTECTED]
http://blogs.exist.com/bporter/

Reply via email to