You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by Laurent Rouvet <la...@roovay.com> on 2005/05/20 12:44:19 UTC

Portage mailet to james-3.0-dev .... & Avalon XXX

Hi,

I'm trying to move my mailet to james-3.0-dev (mainly because I've a 
connection pool bug to fix and that I'm currently using james 2.2.1RC1 
but I don't have the source for that version).

First of all, I would to said that each time (it's the second time) that 
I'm moving my code to a new James version, I spend several hours in 
order to be able to compile and deploy.
I think that it's not a James issue but that problem come from phoenix 
and avalon which are complicated, not soo stable, and not well finished.
However I think that framework is technicaly quite nice, I had probably 
choiced it too.

So, regarding previus discussions, I'd encourage to choice a more stable 
and well know framework. I'd like a J2EE framework like Jboss or 
Geronimo (if that one be come enought usable).


Back to my problem:

I'm use james-3.0-dev 170743   which compile and work ok  :-D
but I've several problems with my own mailet:

- I've notice that cornerstone.jar is not used anymore but replaced by a 
list of small jar: cornerstone-XXXX-api/impl-1.0.jar

  -> is it right ?
     because my mailet don't compile because the package
org.apache.avalon.service.datasource(s) use NOW a (s)


That small problem fixed, I'm able to compile it, but I got the 
following error at start:


20/05/05 11:44:08 ERROR spoolmanager: Unable to init mailet 
EmailSupportStore: javax.mail.MessagingException: Error initializing 
EmailSupportStore;
   nested exception is:
	java.lang.ClassCastException
javax.mail.MessagingException: Error initializing EmailSupportStore;
   nested exception is:
	java.lang.ClassCastException
	at email.james.mailets.EmailSupportStore.init(EmailSupportStore.java:56)
	at org.apache.mailet.GenericMailet.init(GenericMailet.java:129)
	at org.apache.james.transport.MailetLoader.getMailet(MailetLoader.java:60)
	at 
org.apache.james.transport.JamesSpoolManager.initialize(JamesSpoolManager.java:250)
	at 
org.apache.avalon.framework.container.ContainerUtil.initialize(ContainerUtil.java:282)
	at 
org.apache.excalibur.containerkit.lifecycle.LifecycleHelper.startup(LifecycleHelper.java:144)
	at 
org.apache.avalon.phoenix.components.application.DefaultApplication.startup(DefaultApplication.java:480)
...


My code (full code attached):

  try {
    ComponentManager componentManager =
	  (ComponentManager)getMailetContext().getAttribute(
				Constants.AVALON_COMPONENT_MANAGER);
    DataSourceSelector datasources =
	(DataSourceSelector)componentManager.lookup(
					DataSourceSelector.ROLE);
    datasource = new DataSourceWrapper(
	(DataSourceComponent)datasources.select(datasourceName));
    if (crmDatasourceName != null)
	crmDatasource = new DataSourceWrapper(
	  (DataSourceComponent)datasources.select(crmDatasourceName));
  }
  catch (Exception e) {
     // line 56
     throw new
	MessagingException("Error initializing EmailSupportStore", e);
  }



Does there is some compatibility issue between james 2.2 and james 3?
Does I'm using the right version? or does I mixing wrong APIs?
Any idea of my ClassCastException error?

Thanks

Laurent Rouvet



Re: Portage mailet to james-3.0-dev .... & Avalon XXX

Posted by ap...@bago.org.
> Ok, I find it.
> If I'm right, in order to convert a mailet from 2.2 to 3.0
> 
> At least, we have to change :
> 
>    /* ok with James 2.2.0
>    ComponentManager componentManager = (ComponentManager)
> 			getMailetContext().getAttribute(
> 				Constants.AVALON_COMPONENT_MANAGER);
>    DataSourceSelector datasources (DataSourceSelector)
> 		componentManager.lookup(DataSourceSelector.ROLE);
>    */
> 
>    ServiceManager serviceManager = (ServiceManager) 	
> 			getMailetContext().getAttribute(
> 				Constants.AVALON_COMPONENT_MANAGER);
> 
>    DataSourceSelector datasources = (DataSourceSelector)
> 			serviceManager.lookup(DataSourceSelector.ROLE);

This is the main difference between james-2.2.1-dev and james-3.0-dev.

We have a new version because the component to service change is not
backward compatible: the change is needed because component are deprecated
in the avalon framework.

3.0-dev will probably change a lot before a 3.0 release and you probably
need to change again your mailet to upgrade to future 3.0-dev trunk builds.
Probably mailet APIs will change a lot before a 3.0 final.

You probably should stick to the current version or to the branch 2_1_fcs
(with components and old mailets).

> Does someone already list the Mailet API change?
> I noticed that all the mailet into the v3 have been changed...

The mailet have beed changed mainly to to reflect the componet=>service
issue of the avalon framework.

I hope that my work on the SMTPServer extensions (PIPELINE fix, AUTH fix,
DSN support), the DSNReport attribute to transport delivery-status
informations and a reworked RemoteDelivery for better error catching will be
committed in the alpha stage of the 3.0 version.

I hope that someone will port every james component to POJO objects + avalon
adapter/container so it will be faster to support different container
(spring, pico or directly a j2ee container).

Stefano


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: Portage mailet to james-3.0-dev .... & Avalon XXX

Posted by Laurent Rouvet <la...@roovay.com>.
Ok, I find it.
If I'm right, in order to convert a mailet from 2.2 to 3.0

At least, we have to change :

   /* ok with James 2.2.0
   ComponentManager componentManager = (ComponentManager)
			getMailetContext().getAttribute(
				Constants.AVALON_COMPONENT_MANAGER);
   DataSourceSelector datasources (DataSourceSelector)
		componentManager.lookup(DataSourceSelector.ROLE);
   */

   ServiceManager serviceManager = (ServiceManager) 	
			getMailetContext().getAttribute(
				Constants.AVALON_COMPONENT_MANAGER);

   DataSourceSelector datasources = (DataSourceSelector)
			serviceManager.lookup(DataSourceSelector.ROLE);


Does someone already list the Mailet API change?
I noticed that all the mailet into the v3 have been changed...


Laurent Rouvet



Laurent Rouvet wrote:
> Hi,
> 
> I'm trying to move my mailet to james-3.0-dev (mainly because I've a 
> connection pool bug to fix and that I'm currently using james 2.2.1RC1 
> but I don't have the source for that version).
> 
> First of all, I would to said that each time (it's the second time) that 
> I'm moving my code to a new James version, I spend several hours in 
> order to be able to compile and deploy.
> I think that it's not a James issue but that problem come from phoenix 
> and avalon which are complicated, not soo stable, and not well finished.
> However I think that framework is technicaly quite nice, I had probably 
> choiced it too.
> 
> So, regarding previus discussions, I'd encourage to choice a more stable 
> and well know framework. I'd like a J2EE framework like Jboss or 
> Geronimo (if that one be come enought usable).
> 
> 
> Back to my problem:
> 
> I'm use james-3.0-dev 170743   which compile and work ok  :-D
> but I've several problems with my own mailet:
> 
> - I've notice that cornerstone.jar is not used anymore but replaced by a 
> list of small jar: cornerstone-XXXX-api/impl-1.0.jar
> 
>  -> is it right ?
>     because my mailet don't compile because the package
> org.apache.avalon.service.datasource(s) use NOW a (s)
> 
> 
> That small problem fixed, I'm able to compile it, but I got the 
> following error at start:
> 
> 
> 20/05/05 11:44:08 ERROR spoolmanager: Unable to init mailet 
> EmailSupportStore: javax.mail.MessagingException: Error initializing 
> EmailSupportStore;
>   nested exception is:
>     java.lang.ClassCastException
> javax.mail.MessagingException: Error initializing EmailSupportStore;
>   nested exception is:
>     java.lang.ClassCastException
>     at 
> email.james.mailets.EmailSupportStore.init(EmailSupportStore.java:56)
>     at org.apache.mailet.GenericMailet.init(GenericMailet.java:129)
>     at 
> org.apache.james.transport.MailetLoader.getMailet(MailetLoader.java:60)
>     at 
> org.apache.james.transport.JamesSpoolManager.initialize(JamesSpoolManager.java:250) 
> 
>     at 
> org.apache.avalon.framework.container.ContainerUtil.initialize(ContainerUtil.java:282) 
> 
>     at 
> org.apache.excalibur.containerkit.lifecycle.LifecycleHelper.startup(LifecycleHelper.java:144) 
> 
>     at 
> org.apache.avalon.phoenix.components.application.DefaultApplication.startup(DefaultApplication.java:480) 
> 
> ...
> 
> 
> My code (full code attached):
> 
>  try {
>    ComponentManager componentManager =
>       (ComponentManager)getMailetContext().getAttribute(
>                 Constants.AVALON_COMPONENT_MANAGER);
>    DataSourceSelector datasources =
>     (DataSourceSelector)componentManager.lookup(
>                     DataSourceSelector.ROLE);
>    datasource = new DataSourceWrapper(
>     (DataSourceComponent)datasources.select(datasourceName));
>    if (crmDatasourceName != null)
>     crmDatasource = new DataSourceWrapper(
>       (DataSourceComponent)datasources.select(crmDatasourceName));
>  }
>  catch (Exception e) {
>     // line 56
>     throw new
>     MessagingException("Error initializing EmailSupportStore", e);
>  }
> 
> 
> 
> Does there is some compatibility issue between james 2.2 and james 3?
> Does I'm using the right version? or does I mixing wrong APIs?
> Any idea of my ClassCastException error?
> 
> Thanks
> 
> Laurent Rouvet
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
> 
> package email.james.mailets;
> 
> 
> import javax.mail.MessagingException;
> import javax.mail.internet.MimeMessage;
> 
> import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
> import org.apache.avalon.excalibur.datasource.DataSourceComponent;
> import org.apache.avalon.framework.component.ComponentManager;
> import org.apache.james.Constants;
> import org.apache.james.util.JDBCUtil;
> import org.apache.log4j.Logger;
> import org.apache.mailet.GenericMailet;
> import org.apache.mailet.Mail;
> import org.apache.mailet.MailetException;
> 
> import email.james.util.DataSourceWrapper;
> import email.model.EMail;
> 
> public class EmailSupportStore extends GenericMailet {
>     static Logger logger = Logger.getLogger(EmailSupportStore.class);
> 
>      protected DataSourceWrapper datasource;
>      protected DataSourceWrapper crmDatasource;
> 	 protected String datasourceName;
> 	 protected String crmDatasourceName;
> 
>      private final JDBCUtil theJDBCUtil =  new JDBCUtil() {
> 		 protected void delegatedLog(String logString) {
> 		 	log("EmailSupportStore: " + logString);
> 		 }
>      };
> 
>      // code from JDBCListserv
>      public void init() throws MessagingException {
> 		 datasourceName = getInitParameter("datasource");
> 		 crmDatasourceName = getInitParameter("CRMdatasource");
>          logger.info("Initialisation datasource="+ datasourceName +" CRMdatasource="+crmDatasourceName);
> 		 if (datasourceName == null) {
> 		 	throw new MailetException("datasource not specified for EmailSupportStore");
> 		 }
> 		 if (crmDatasourceName == null) {
> 		 	logger.info("CRMdatasource not specified for EmailSupportStore");
> 		 }
> 
> 		 try {
> 			 ComponentManager componentManager = (ComponentManager)getMailetContext().getAttribute(Constants.AVALON_COMPONENT_MANAGER);
> 			 DataSourceSelector datasources = (DataSourceSelector)componentManager.lookup(DataSourceSelector.ROLE);
> 			 datasource = new DataSourceWrapper((DataSourceComponent)datasources.select(datasourceName));
> 			 if (crmDatasourceName != null)
> 			         crmDatasource = new DataSourceWrapper((DataSourceComponent)datasources.select(crmDatasourceName));
> 		 }
> 		 catch (Exception e) {
> 		 	throw new MessagingException("Error initializing EmailSupportStore", e);
> 		 }
>     }
> 
>     public void service(Mail mail) throws MessagingException {
>         MimeMessage message = mail.getMessage();
> 
>         try {
>             EMail.received(datasource, datasourceName, crmDatasource, crmDatasourceName, message);
>         } catch (Exception ex) {
>             getMailetContext().log("Error while storing mail to Email Support: ",
>                     ex);
>             getMailetContext().sendMail(mail.getSender(), mail.getRecipients(),
>                     message, Mail.ERROR);
>         }
>         // We always consume this message
>         mail.setState(Mail.GHOST);
>     }
> }
> 
> 
> 
> ------------------------------------------------------------------------
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org