I. faire du JDOM II. jms activemq III. log log4j IV. ds datasource camel bean jdbc V. Rest VI. Soap I.faire du JDOM I.1.on créé deux beans qui contiennent le code de conversion string<->jdom I.1.a. bean ToStringConverter qui contient le code de conversion string<-jdom package beans; import org.apache.camel.Converter; import org.apache.camel.Exchange; import org.apache.camel.TypeConversionException; import org.apache.camel.support.TypeConverterSupport; import org.jdom.Document; import org.jdom.output.XMLOutputter; @Converter public class ToStringConverter extends TypeConverterSupport { @SuppressWarnings("unchecked") public T convertTo(Class type, Exchange ex, Object message) throws TypeConversionException { /** TO java.lang.String */ if (String.class.isAssignableFrom(type)) { /** FROM org.jdom.Document */ if (message != null && message.getClass().isAssignableFrom(Document.class)) { Document value = (Document) message; return (T) new XMLOutputter().outputString(value); } } return null; } } I.1.b. bean FromStringConverter qui contient le code de conversion string->jdom package beans; import java.io.StringReader; import org.apache.camel.Converter; import org.apache.camel.Exchange; import org.apache.camel.TypeConversionException; import org.apache.camel.support.TypeConverterSupport; import org.jdom.Document; import org.jdom.input.SAXBuilder; @Converter public class FromStringConverter extends TypeConverterSupport { @SuppressWarnings("unchecked") public T convertTo(Class type, Exchange ex, Object message) throws TypeConversionException { /** FROM java.lang.String */ if (message != null && message.getClass().isAssignableFrom(String.class)) { String value = (String) message; /** TO org.jdom.Document */ if (Document.class.isAssignableFrom(type)) { SAXBuilder sb = new SAXBuilder(); Document doc = null; try { doc = sb.build(new StringReader(value)); } catch (Throwable e) { throw new TypeConversionException(message, type, e); } return (T) doc; } } return null; } } I.2. faire un cConfig dans la route pour les enregistrer : imports : import org.apache.camel.*; import beans.*; import org.jdom.Document; code : camelContext.getTypeConverterRegistry().addTypeConverter(org.jdom.Document.class, String.class, new beans.FromStringConverter() ); camelContext.getTypeConverterRegistry().addTypeConverter(String.class, org.jdom.Document.class, new beans.ToStringConverter() ); dépendances : camel-juel-alldep-2.10.4.jar jdom-1.1.jar commons-dbcp-1.4.jar mysql-connector-java-5.1.22-bin.jar camel-jdbc-alldep-2.10.4.jar II.JMS ActiveMQ II.1 on met une cjmsconnectionfactory customized String url = context.AMQ_url; /* Dont modify below */ javax.jms.ConnectionFactory cf = null; if(context.AMQ_login == null || context.AMQ_password == null) { cf = new org.apache.activemq.ActiveMQConnectionFactory(url); } else { cf = new org.apache.activemq.ActiveMQConnectionFactory(context.AMQ_login, context.AMQ_password, url); } org.apache.activemq.pool.PooledConnectionFactory pcf = new org.apache.activemq.pool.PooledConnectionFactory(); pcf.setConnectionFactory(cf); pcf.setExpiryTimeout(context.AMQ_expiryTimeout); pcf.setIdleTimeout(context.AMQ_idleTimeout); pcf.setMaxConnections(context.AMQ_maxConnections); pcf.setMaximumActiveSessionPerConnection(context.AMQ_maxActiveSessions); jmsConnectionFactory = pcf; II.2 puis on utilise la cf dans la route III. log log4j III.1 on met un javadslprocessor, par exemple pour afficher le header "mon_header" .log(org.apache.camel.LoggingLevel.INFO, nom_logger, "message : ${headers.mon_header}") III.2 On modifie la conf karaf : fichier etc/org.ops4j.pax.logging.cfg Le premier pavé fait le lien entre les loggers symboliques et les appenders configurés plus loin L'additivité permet, quand on écrit une alerte, d'envoyer aussi un mail log4j.rootLogger = INFO, out, osgi:VmLogAppender log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer log4j.category.business=INFO, business log4j.additivity.business=false log4j.category.error=WARN, error log4j.additivity.error=false log4j.category.alert=ERROR, alert log4j.additivity.alert=false log4j.category.alert.smtp=ERROR, smtp log4j.additivity.alert.smtp=true log4j.category.content=INFO, content log4j.additivity.content=false # CONSOLE appender not used by default log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n # File appender log4j.appender.out=org.apache.log4j.RollingFileAppender log4j.appender.out.layout=org.apache.log4j.PatternLayout log4j.appender.out.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n log4j.appender.out.file=${karaf.home}/log/tesb.log log4j.appender.out.append=true log4j.appender.out.maxFileSize=1MB log4j.appender.out.maxBackupIndex=10 # Sift appender log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender log4j.appender.sift.key=bundle.name log4j.appender.sift.default=tesb log4j.appender.sift.appender=org.apache.log4j.FileAppender log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout log4j.appender.sift.appender.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log log4j.appender.sift.appender.append=true # Business Appender log4j.appender.business= org.apache.log4j.DailyRollingFileAppender log4j.appender.business.layout = org.apache.log4j.PatternLayout #log4j.appender.business.layout.ConversionPattern = %d{DATE} | %m%n log4j.appender.business.layout.ConversionPattern = %d{DATE}###%-5p###%m###%t%n log4j.appender.business.file = ${user.home}/talendLogs/business/business.log log4j.appender.business.append = true log4j.appender.business.DatePattern='.'yyyy-MM-dd # Content Appender log4j.appender.content= org.apache.log4j.DailyRollingFileAppender log4j.appender.content.layout = org.apache.log4j.PatternLayout log4j.appender.content.layout.ConversionPattern = %d{DATE}###%-5p###%m###%t%n log4j.appender.content.file = /usr2/talend/contentLog/content.log log4j.appender.content.append = true log4j.appender.content.DatePattern='.'yyyy-MM-dd # Error Appender log4j.appender.error= org.apache.log4j.DailyRollingFileAppender log4j.appender.error.layout = org.apache.log4j.PatternLayout #log4j.appender.error.layout.ConversionPattern = %d{DATE} | %m%n log4j.appender.error.layout.ConversionPattern = %d{DATE}###%-5p###%m###%t%n log4j.appender.error.file = ${user.home}/talendLogs/business/error.log log4j.appender.error.append = true log4j.appender.error.DatePattern='.'yyyy-MM-dd # alert Appender log4j.appender.alert= org.apache.log4j.DailyRollingFileAppender log4j.appender.alert.layout = org.apache.log4j.PatternLayout #log4j.appender.alert.layout.ConversionPattern = %d{DATE} | %m%n log4j.appender.alert.layout.ConversionPattern = %d{DATE}###%-5p###%m###%t%n log4j.appender.alert.file = ${user.home}/talendLogs/business/alert.log log4j.appender.alert.append = true log4j.appender.alert.DatePattern='.'yyyy-MM-dd #smtp appender log4j.appender.smtp=org.apache.log4j.net.SMTPAppender log4j.appender.smtp.BufferSize=1 log4j.appender.smtp.SMTPHost=localhost log4j.appender.smtp.From=talend@auchan.net log4j.appender.smtp.To=jmdollat@auchan.net log4j.appender.smtp.Subject=Alerte Talend log4j.appender.alert.smtp.layout=org.apache.log4j.PatternLayout log4j.appender.alert.smtp.layout.ConversionPattern=%d,%p,%t,%c,%m%n IV. ds datasource camel bean jdbc IV.1 on crée un cbean id : alias qui sera utilisé dans les autres composants. type : simple si l'on fait appel à un bean externe customized si on met le code dans le cbeanregister, comme ici : imports : import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; code : BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUsername("user"); ds.setPassword("pass"); ds.setUrl("jdbc:mysql://host:port/base"); beanInstance = ds; IV.2. exécution puis pour exécuter une requete, créer un csetbody avec la requete puis créer un cmessagingendpoint contentant l'uri "jdbc:id_du_bean" IV.3. Résultat le résultat est dans le body : après un cmessagefilter avec un filtre simple "${body.size()} > 0" on a "${body[0][colonne_selectionnee]}" V.Rest V.1.On créé un chttp URI : "http://host:port/base_api" type : server V.2. choisir s'il y aura une réponse avec un javadsl .setExchangePattern(ExchangePattern.InOnly) V.3. les paramètres sont dans des headers camel "${headers.message}"