Re: Missing Stack Trace when Handling SOAP Fault from a CXF Endpoint
Just a quick note for CXF server return the stack trace back to the client. If you are using SOAP 11 , CXF can put the stack trace into the fault message if you enable the option faultStackTraceEnabled like this I'm now working on CXF-3445 to make sure this feature can work with SOAP12. [1]https://issues.apache.org/jira/browse/CXF-3445 -- View this message in context: http://camel.465427.n5.nabble.com/Missing-Stack-Trace-when-Handling-SOAP-Fault-from-a-CXF-Endpoint-tp3774168p4287903.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: FTP over Proxy
Hi, For sure that we are interested. Here is the page describing the process to create a ticket + patch http://camel.apache.org/contributing.html Regards, Charles Moulliard Apache Committer -- View this message in context: http://camel.465427.n5.nabble.com/FTP-over-Proxy-tp3314841p4288277.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Resequencing on many individual topics (1000's)
I have figure out a way to limit the number of threads per JMS consumer. I needed to use the JMSConfiguration pojo to configure my ActiveMQComponent. The not-so-apparent change was changing the consumerType to simple instead of default. Hopefully this helps anyone else with the same issue. -josh On 31/03/2011 11:48, Joshua Watkins joshua.watk...@gamesys.co.uk wrote: I have run into a bit of a pickle. I am trying to use camel and Activemq to resequence messages off of thousands of individual topics. A particular topic would have a sequence number in messages delivered to it for that topic. Additionally, I don't know the specific topics to listen to ahead of time. So, at run time I will dynamically need to listen to NEWS.US.IDAHO.BOISE, or NEWS.EU.SPAIN.MADRID. Unfortunately, since the resequencer can't work with multiple streams of messages I can't simply subscribe to NEWS. or a subtopic. (This is a bit undesirable anyway as I would potentially be getting messages that I am not interested in.) I have also tried simply creating a route dynamically with the specific topic and its resequencer. This however led to thousands of threads being created (1 thread for the JMS consumer and 2 threads for each resequencer). Then I thought it would be better to use mildly more specific routes (NEWS.EU.SPAIN. ) and use a filter to funnel a particular stream of messages to the resequencer. This ran into the problem of missing out on messages to the topic while I was altering the route. Retroactive consumer support doesn't seem to be supported in the Activemq component. (And I am guessing that I was right to believe that routes must be removed and re-added to the CamelContext to take effect.) So, am I missing an easy solution for this? Is there a way for me to pool JMS topic consumer threads somehow? Can live camel routes be altered at runtime without them missing topic messages? Thanks, Josh
global onException doesnt apply for routes loaded with loadRoutesDefinition
Hi, i am using camel 2.6.0 and try to load additional camel routes from XML outside the SpringXML. In the spring-context-xml i create a camel context with a global route and a global onException-definition. In addition i have an RoutesBuilder which loads additional (customer-)routes from XML using CamelContext.loadRoutesDefinition(...). I would like the global onExeption-Definition to apply for the customer-routes, too, but this doesn't work. If i move the route from the separated xml-file to the Spring-XML everthing works fine. Is there something missing in the RoutesBuilder? Currently it looks like this: InputStream is = this.getClass().getResourceAsStream(file); RoutesDefinition routes = context.loadRoutesDefinition(is); routes.setErrorHandlerBuilder(context.getErrorHandlerBuilder()); // this doesn't change anything because context.getErrorHandlerBuilder() returns null context.addRouteDefinitions(routes.getRoutes()); Thanks, jwuelker
Using CamelJmsDestinationName to publish to topics in Xml
I am trying to use the CamelJmsDestinationName header to send to a topic. However prepending topic: or activemq:topic: to my topic name simply sends reroutes the message to a queue with the name activemq:topic:dynamicdestinationName. Ex: route descriptiontest dynamicDeliveryAddress/description from uri=activemq:queue:dynamicDelivery/ setHeader headerName=CamelJmsDestinationName constanttopic:dynamicdestinationName/constant /setHeader to uri=activemq:queue:didntWork / /route Is there a way for me to publish to a topic using the CamelJmsDestinationName in xml? Thanks, -josh
Re: Using CamelJmsDestinationName to publish to topics in Xml
Hi, route descriptiontest dynamicDeliveryAddress/description from uri=activemq:queue:dynamicDelivery/ setHeader headerName=CamelJmsDestinationName constantdynamicdestinationName/constant /setHeader to uri=activemq:topic:dummy / /route worked for me once. but i was using java dsl at the time. /björn On Thu, Apr 7, 2011 at 2:25 PM, Joshua Watkins joshua.watk...@gamesys.co.uk wrote: I am trying to use the CamelJmsDestinationName header to send to a topic. However prepending topic: or activemq:topic: to my topic name simply sends reroutes the message to a queue with the name activemq:topic:dynamicdestinationName. Ex: route descriptiontest dynamicDeliveryAddress/description from uri=activemq:queue:dynamicDelivery/ setHeader headerName=CamelJmsDestinationName constanttopic:dynamicdestinationName/constant /setHeader to uri=activemq:queue:didntWork / /route Is there a way for me to publish to a topic using the CamelJmsDestinationName in xml? Thanks, -josh
RE: JMS queue consumer hangs
Paul: What version of ActiveMQ are you using? Using version 5.4.x I had a similar problem, which is described in this thread: http://camel.465427.n5.nabble.com/InOut-over-JMS-always-leads-to-Timout-ExchangeTimedOutException-td4237336.html Try going back to 5.3.x or use the new 5.5.0! HTH, Mike L. (aka patzerbud) Date: Wed, 6 Apr 2011 04:37:46 -0700 To: users@camel.apache.org Subject: Re: JMS queue consumer hangs Another note I would like to add is since the subsequent endpoints after the tcpDeliverer processor are slow. For example the processor that sends message via HTTP post may need to get a session from the remote HTTP server first and than send the message. I am using Camel version 2.5 Thanks Paul -- View this message in context: http://camel.465427.n5.nabble.com/JMS-queue-consumer-hangs-tp4286088p4286093.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Using Apache Camel as replacement for cron-driven shell scripts
It is perfectly reasonable and doable, please see comments inline. On Thu, 07 Apr 2011 13:24:02 +0300, Andrey Popp 8may...@gmail.com wrote: I'm wondering of the following setup: * Apache Camel running as daemon. In our project we pack Camel with maven-shade-plugin into uber-jar and launch it under nohup java -jar. I do not have an access to wiki, but I can send you pom.xml and custom Main.java, or publish it here for reference. * Ability to submit new routes' configuration from command line (as of CAMEL-1004 it seem Apache Camel is able to replace routes at runtime) as plain Java/Scala code files. Dynamic reconfiguration works. We start with from() and gradually build the route(s) based on database setup. If you arrange a system to load Java code on demand, be it Java, Scala, or Groovy (to skip compile step), then: 1. instantiate a class that extends RouteBuilder and performs route construction in configure() 2. call camel.addRoute(builder) 3. done :) We keep a started routes Map of String-List key-ed by database Id and shutdown old instances in front-to-back order [because our routes consists of multiple from() steps] via camel.stopRoute()+removeRoute(). * Apache Camel should try to compile routes and in the case of success -- replace current routes with the new ones. The replace part could be tricky depending on your requirements. If you started a slightly different copy of the route, you may get duplicates or other undesirable behavior. But route definition should be tested before production somewhere else, so you can probably just shutdown old stuff before staring new one.
RE: JMS queue consumer hangs
Hello Mike, I am indeed using 5.4.1 and I will take your advice and try to upgrade to 5.5.0. However I think the problem may be something else. To see where exactly the route is failing I changed my configuration a little bit: === from(gatewayQueue:queue:OUTGOING).inOnly() .processRef(tcpDeliverer) .choice() .when(someCondition).to(seda:TCP) .otherwise().choice() .when(anotherCondition).to(seda:HTTPDeliverer) .when(yetAnotherCondition).to(seda:SMPP) .otherwise(); from(seda:SMPP).inOnly().to(smpp:smppConfiguration).processRef(finalProcessorToHandleSentMessage); from(seda:HTTPDeliverer).inOnly().processRef(processorThatSendsMessageViaHTTPPost).processRef(finalProcessorToHandleSentMessage); from(seda:TCP).inOnly().processRef(finalProcessorToHandleSentMessage); == This time I realized that the seda:TCP consumer is hanging but the while this happens the JMS consumer kept on flowing. It turns out that there is some issue with the finalProcessorToHandleSentMessage processor. This processor is trying to put the message object into a cache and there seems to be some problems with this operation. Nevertheless I am still a little confused as to why the consumer queues stop consuming in such a situation since in all circumstances they are inOnly. -- View this message in context: http://camel.465427.n5.nabble.com/JMS-queue-consumer-hangs-tp4286088p4288588.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: error in schema
Did you install the cxf feature? You can still use the the broker namespace in http://pastie.org/1761075 . the Eclipse error can be ignore, as the Spring can load the schema from the activemq-core jar. If you want eclipse happy you should change to use http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd instead of http://activemq.apache.org/schema/core/activemq-core.xsd Willem On 4/7/11 12:21 AM, dead_devil_66 wrote: Thanks for answering. :) Seems that the namespace issues are a recurring problem... Now, as far as i can see, i have no errors declared in the xml files. *But*, after installing in Fuse ESB, i got the same error message. This time, i checked the log file. This is the content: http://pastie.org/1763870 These lines got up my attention: 16:50:55,492 | ERROR | ExtenderThread-7 | ContextLoaderListener | 72 - org.springframework.osgi.extender - 1.2.0 | Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=null, config=osgibundle:/META-INF/spring/*.xml)) org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:*META-INF/cxf/cxf.xml*] Offending resource: URL [bundleentry://260.fwk2272087/META-INF/spring/camel-cxf.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from OSGi resource[classpath:META-INF/cxf/cxf.xml|bnd.id=260|bnd.sym=null]; nested exception is java.io.FileNotFoundException: OSGi resource[classpath:META-INF/cxf/cxf.xml|bnd.id=260|bnd.sym=null] cannot be resolved to URL because it does not exist After reading this, i thought that by moving camel-cxf.xml to META-INF/cxf, that i could solve this issue. Wrong! After doing that, this is the error i got: http://pastie.org/1763972 soo, what is happening now...? -- View this message in context: http://camel.465427.n5.nabble.com/error-in-schema-tp4285364p4286673.html Sent from the Camel - Users mailing list archive at Nabble.com. -- Willem -- FuseSource Web: http://www.fusesource.com Blog:http://willemjiang.blogspot.com (English) http://jnn.javaeye.com (Chinese) Twitter: willemjiang Connect at CamelOne May 24-26 The Open Source Integration Conference http://camelone.com
Re: Using Apache Camel as replacement for cron-driven shell scripts
In our project we pack Camel with maven-shade-plugin into uber-jar and launch it under nohup java -jar. I do not have an access to wiki, but I can send you pom.xml and custom Main.java, or publish it here for reference. It would be great, thanks. The replace part could be tricky depending on your requirements. If you started a slightly different copy of the route, you may get duplicates or other undesirable behavior. But route definition should be tested before production somewhere else, so you can probably just shutdown old stuff before staring new one. The main reason behind this requirement is to preserve ability of simple and quick modifications of integration code as present in shell scripts, so the workflow is: $ ssh server $ vim ./MyRoutes.scala ... edit edit edit ... $ some-ctl-script submit-routes ./MyRoutes.scala Compiling routes...[OK] Shutdown old routes... [OK] Starting new routes... [OK]
Re: Using CamelJmsDestinationName to publish to topics in Xml
That worked. Thanks! On 07/04/2011 13:36, Björn Bength bjorn.ben...@gmail.com wrote: Hi, route descriptiontest dynamicDeliveryAddress/description from uri=activemq:queue:dynamicDelivery/ setHeader headerName=CamelJmsDestinationName constantdynamicdestinationName/constant /setHeader to uri=activemq:topic:dummy / /route worked for me once. but i was using java dsl at the time. /björn On Thu, Apr 7, 2011 at 2:25 PM, Joshua Watkins joshua.watk...@gamesys.co.uk wrote: I am trying to use the CamelJmsDestinationName header to send to a topic. However prepending topic: or activemq:topic: to my topic name simply sends reroutes the message to a queue with the name activemq:topic:dynamicdestinationName. Ex: route descriptiontest dynamicDeliveryAddress/description from uri=activemq:queue:dynamicDelivery/ setHeader headerName=CamelJmsDestinationName constanttopic:dynamicdestinationName/constant /setHeader to uri=activemq:queue:didntWork / /route Is there a way for me to publish to a topic using the CamelJmsDestinationName in xml? Thanks, -josh
Sending via smtp fails after some time
I am sending emails from a server. The emails get sent fine for some hours (up to 24) but then I start getting exceptions that are ultimately: Caused by: javax.mail.AuthenticationFailedException: null I am using the default javaMailSender and sending via gmail. The jvm is started with Dmail.smtp.starttls.enable=true. Any ideas what would cause gmail to accept the messages and then decide later to reject the auth? (camel 2.5.0) thanks! (the #'s are substituted by the scala compiler) --- private lazy val smtpUri = smtp://#{smtpHost}:#{smtpPort}?username=#{smtpUsername}password=#{smtpPassword} val msg = Alert for device '#{device.name}'. #{alert.description}. log.info(Sending notification: to=#toEmail, msg=#msg) val headers = Map[String,Object]( To - toEmail, From - supp...@vimana.us, Subject - Device Alert: #device.name - #alert.definition.name) producerTemplate.sendBodyAndHeaders(smtpUri, msg, headers.asJava) -- View this message in context: http://camel.465427.n5.nabble.com/Sending-via-smtp-fails-after-some-time-tp4288728p4288728.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: maven plugin
I was using 2.6, but I tried 2.7 and its working fine. Thanks, Mark On Thu, Apr 7, 2011 at 3:51 AM, Claus Ibsen claus.ib...@gmail.com wrote: Hi What version of Camel are you using? I have created a ticket to remove the DOT stuff https://issues.apache.org/jira/browse/CAMEL-3841 On Mon, Apr 4, 2011 at 4:53 PM, Mark Webb elihusma...@gmail.com wrote: I am testing some routes and would like to create some sample routes to play with. I am using maven to create these projects with the following command: mvn archetype:create -DgroupId=a.b.c.d -DartifactId=MyRouter -DarchetypeArtifactId=camel-router -DarchetypeGroupId=org.apache.camel This command works fine, I can run the command mvn package, and that runs fine. I then try and run the command mvn camel:run and the command hangs, and this is the last line printed out: Apr 4, 2011 9:47:02 AM org.apache.camel.spring.Main generateDot INFO: Generating DOT file for routes: C:\temp\MyRouter\target/site/cameldoc for: org.apache.camel.spring.SpringCamelContext@622209db with name: camelContext Before running the command, I added in the following lines to the pom.xml file: configuration useDotfalse/useDot /configuration I even tried to specify the path to dot.exe and got the same results. So is there any way I can run the camel route without running dot from maven? Thanks, Mark -- Claus Ibsen - FuseSource Email: cib...@fusesource.com Web: http://fusesource.com CamelOne 2011: http://fusesource.com/camelone2011/ Twitter: davsclaus Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/
Re: Does activemq/jms component have keepalive option?
Hi, Thanks for the pointer! I have changed to use PooledConnectionFactory as you suggest and it seems to work well now. Here is my config: does it look sensible? bean id=activemq class=org.apache.activemq. camel.component.ActiveMQComponent property name=transacted value=true/ property name=configuration ref=myConfigDelivery/ /bean bean id=myConfigDelivery class=org.apache.camel.component.jms.JmsConfiguration property name=connectionFactory ref=jmsConnectionFactoryDelivery/ property name=transactionManager ref=jmsTransactionManagerDelivery/ property name=concurrentConsumers value=1/ property name=maxConcurrentConsumers value=1/ property name=transacted value=true/ /bean bean id=jmsTransactionManagerDelivery class=org.springframework.jms.connection.JmsTransactionManager property name=connectionFactory ref=jmsConnectionFactoryDelivery/ /bean bean id=activeMqConnectionFactory class=org.apache.activemq.ActiveMQConnectionFactory property name=brokerURL value=${broker.url}/ property name=redeliveryPolicy ref=redeliveryPolicyDelivery/ /bean bean id=jmsConnectionFactoryDelivery class=org.apache.activemq.pool. PooledConnectionFactory property name=connectionFactory ref=activeMqConnectionFactory/ /bean bean id=redeliveryPolicyDelivery class=org.apache.activemq.RedeliveryPolicy property name=maximumRedeliveries value=100/ property name=useExponentialBackOff value=true/ property name=backOffMultiplier value=5/ /bean On Tue, Apr 5, 2011 at 10:47 AM, James Strachan ja...@fusesource.comwrote: If you don't set any ConnectionFactory on the ActiveMQ component, you should have pooling setup correctly which should pool a single connection. e.g. just set the brokerURL property on the ActiveMQ component. Whats your spring XML look like? On 4 April 2011 16:54, Tom Howe tomh...@artcore.com wrote: I have a simple route that goes from(file:/some/path).to(activemq:some/queue); From truss and activeMq admin page, I notice that it is constantly connecting/closing the connections. Is there a way to make the endpoint retain a connection to make it more efficient? Thanks, Tom -- James --- FuseSource Email: ja...@fusesource.com Web: http://fusesource.com Twitter: jstrachan, fusenews Blog: http://macstrac.blogspot.com/ Connect at CamelOne May 24-26 The Open Source Integration Conference http://camelone.com/
Low Latency
Hello I'm fairly new to Camel, and hoping I can get some insights into this... I'm need to design and system, which has as low latency as I can. I still would like to leverage Camel, but not sure 1. How camel rout is initialized, that is - now frequently it's checking for messages? 2. Using JMS - is this a poll, or the route is triggered immediately once the message is posted on the initial JMS Queue (THIS IS THE MAIN CONCERN - I understand SEDA vs DIRECT further down the route). I guess, this is mainly related to JMS component. Also, this is not a total throughput issue, which can be addressed with different caching strategies. Has anyone had to do something similar or researched similar issues? I'd greatly appreciate any suggestions Thanks -- View this message in context: http://camel.465427.n5.nabble.com/Low-Latency-tp4288799p4288799.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Using Apache Camel as replacement for cron-driven shell scripts
On Thu, 07 Apr 2011 17:06:58 +0300, Andrey Popp 8may...@gmail.com wrote: In our project we pack Camel with maven-shade-plugin into uber-jar and launch it under nohup java -jar. I do not have an access to wiki, but I can send you pom.xml and custom Main.java, or publish it here for reference. It would be great, thanks. Attached. I used custom Main to provide my own Spring config path outside of Maven and to initialize log4j. But you can also use org.apache.camel.spring.Main. Can we have these files added to http://camel.apache.org/how-do-i-use-a-big-uber-jar.html instead of Jira ticket reference?profile idstandalone/id build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-resources-plugin/artifactId version2.4.3/version executions execution idwebapp-resources-for-standalone/id phasevalidate/phase goals goalcopy-resources/goal /goals configuration outputDirectorytarget/classes/META-INF/outputDirectory resources resource directorysrc/main/webapp/WEB-INF/directory includes includeapplicationContext.xml/include includehibernateConfig.xml/include /includes filteringtrue/filtering /resource /resources /configuration /execution /executions /plugin plugin groupIdorg.apache.camel/groupId artifactIdcamel-maven-plugin/artifactId configuration applicationContextUriMETA-INF/applicationContext.xml/applicationContextUri /configuration /plugin plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId version1.4/version executions execution phasepackage/phase goals goalshade/goal /goals configuration artifactSet excludes excludeorg.jboss.seam:jboss-seam/exclude /excludes /artifactSet transformers transformer implementation=org.apache.maven.plugins.shade.resource.ManifestResourceTransformer manifestEntries Main-Classcom.domain.Main/Main-Class Specification-VendorVendor/Specification-Vendor Implementation-VendorVendor/Implementation-Vendor /manifestEntries /transformer transformer implementation=org.apache.maven.plugins.shade.resource.AppendingTransformer resourceMETA-INF/spring.handlers/resource /transformer transformer implementation=org.apache.maven.plugins.shade.resource.AppendingTransformer resourceMETA-INF/spring.schemas/resource /transformer transformer implementation=org.apache.maven.plugins.shade.resource.AppendingTransformer resourceMETA-INF/services/org/apache/camel/TypeConverter/resource /transformer transformer implementation=org.apache.maven.plugins.shade.resource.ServicesResourceTransformer/ transformer implementation=org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer resourceMETA-INF/BCKEY.SF/resource /transformer transformer implementation=org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer resourceMETA-INF/BCKEY.DSA/resource /transformer transformer implementation=org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer
Best Practice fro Thread Safe processor
I am fairly new to Camel and had a question about what are the best practices for using Threads in Camel Routes. I have Camel in Action which is a great book; but when it came to Threading the book only showed how to configure Camel. It did not go into what happens behind the scenese. It also doesn't talk about what needs to happen with Processors, etc. I am hoping to get a little more detail in this Topic. Camel Route Example: Spring Configuration ?xml version=1.0 encoding=UTF-8? RouteBuilder: public class SomeRouteBuilder extends RouteBuilder { private String fromQueue; private String toQueue; private Processor somProcessor; private ExecutorService threadPool; public String getFromQueue() { return fromQueue; } public void setFromQueue(String fromQueue) { this.fromQueue = fromQueue; } public String getToQueue() { return toQueue; } public void setToQueue(String toQueue) { this.toQueue = toQueue; } public Processor getSomeProcessor() { return someProcessor; } public void setSomeProcessor(Processor someProcessor) { this.someProcessor = someProcessor; } @Override public void configure() throws Exception { ThreadPoolBuilder builder = new ThreadPoolBuilder(getContext()); setThreadPool(builder.poolSize(1).maxPoolSize(10).maxQueueSize(100).build(somePool)); from(getFromQueue()).threads().executorService(getThreadPool()).process(getSomeProcessor()).to(getToQueue()); } } Processor: public class SomeProcessor implements Processor { @Override public void process(Exchange exchange) throws Exception { SomeClass someClassFromExchange = (SomeClass)exchange.getIn().getBody(); SomeClass someClassFromDb = lookupClassById(someClass.getId()); compareAndUpdate(someClassFromExchange, someClassFromDb); } private SomeClass lookupClassById(String id) { // Do a DB Lookup } private void compareAndUpdate(SomeClass someClassFromExchange, SomeClass someClassFromDb) { // Do some sort of comparison, and update 'someClassFromExchange' } } From what I understand about Threading and Camel, there will be one instance of the Processor used between the Threads. This forces the Processor to use Thread Safe Classes/Techniques. I saw there was a ThreadProcessor object; should this be extended? Does the same Threading rules apply to a RouteBuilder configured using the Spring DSL? ?xml version=1.0 encoding=UTF-8? In order to avoid Threading problems: What if you wanted a separate instance of the Processor created for each Thread? Would it be best to not do any Threading at this time, but to create separate Camel Contexts in separate JVMs? If so, what if Camel lives within a Servlet Container. I have noticed that even though there are separate deployed WebApps (using Tomcat 7); the Camel Context IDs must be unique between the WebApps. What are some of the best practices for Threading Camel Routes to maximize throughput? Thanks, Peter -- View this message in context: http://camel.465427.n5.nabble.com/Best-Practice-fro-Thread-Safe-processor-tp4288973p4288973.html Sent from the Camel - Users mailing list archive at Nabble.com.
Difference between camel-activemq (1.1.0) and activemq-camel (5.2.0) libraries
What is the difference between the * Camel-Activemq (1.1.0) * Activemq-Camel (5.2.0) Libraries? Is the 'Camel-Activemq' library simply an old deprecated version no longer used? And should I always use 'Activemq-Camel'? Or is there a subtle difference? -- View this message in context: http://camel.465427.n5.nabble.com/Difference-between-camel-activemq-1-1-0-and-activemq-camel-5-2-0-libraries-tp4289122p4289122.html Sent from the Camel - Users mailing list archive at Nabble.com.
'Class not found' when Creating Camel route through Activemq console
I post this here and not in the activemq forum, as its a Camel route that courses the problem. In our setup I have Camel routes configured to inject to / read from a activemq topic called 'Parameters'. Each message in the body contains a POJO of type 'org.hbird.exchange.type.Parameter'. I have no problems with this from my Camel routes. But when I use the Activemq console to create a new test route as shown below, it fails; ?xml version=1.0 encoding=UTF-8 standalone=yes? This is an example route. The topic is not created. Looking at the activemq log, I see the error messages below repeated fro each message; 2011-04-07 20:44:35,603 | WARN | Execution of JMS message listener failed, and no ErrorHandler has been set. | org.springframework.jms.listener.DefaultMessageListenerContainer | DefaultMessageListenerContainer-1 org.apache.camel.RuntimeCamelException: Failed to extract body due to: javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: org.hbird.business.simpleparametersimulator.ConstantParameter. Message: ActiveMQObjectMessage {commandId = 8299, responseRequired = true, messageId = ID:DE-L071208-50054-1302201283142-0:4:8:1:1035, originalDestination = null, originalTransactionId = null, producerId = ID:DE-L071208-50054-1302201283142-0:4:8:1, destination = topic://Parameters, transactionId = null, expiration = 0, timestamp = 1302201875305, arrival = 0, brokerInTime = 1302201875305, brokerOutTime = 1302201875305, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@70c64bc2, marshalledProperties = org.apache.activemq.util.ByteSequence@6a97e765, dataStructure = null, redeliveryCounter = 0, size = 2093, properties = {timestamp=1302201278281, unit=State, description=The State of the Payload. '1' means enabled. '0' means disabled., name=Payload State, logger=org.apache.log4j.Logger@48dbb335, value=1.0, serialVersionUID=-5803219773253020746, objectid=1f530039-9c06-45a5-8841-23bd6358150e, clazz=java.lang.Double, firedTime=Thu Apr 07 20:44:35 CEST 2011, datasetidentifier=0}, readOnlyProperties = true, readOnlyBody = true, droppable = false} at org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:158) at org.apache.camel.component.jms.JmsMessage.createBody(JmsMessage.java:183) at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:42) at org.apache.camel.impl.DefaultUnitOfWork.(DefaultUnitOfWork.java:65) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:90) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:91) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85) at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:85) at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560) at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498) at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1056) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1048) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947) at java.lang.Thread.run(Thread.java:662) Caused by: javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: org.hbird.business.simpleparametersimulator.ConstantParameter at
Has camel-jboss6 been added to Camal Extras yet?
In reference to issue tracker #CAMEL-3825, I am trying to get a copy of the camel-jboss6 jar so I can use camel with JBoss 6. I downloaded the jar file attached to this issue, but it contains no class files. I've been looking on the the camel extra site at: http://camel-extra.googlecode.com/svn/maven2/releases, but there's nothing up there yet. Is there anywhere I can get this library from? (I'm using Camel version 2.6.0) -- View this message in context: http://camel.465427.n5.nabble.com/Has-camel-jboss6-been-added-to-Camal-Extras-yet-tp4289222p4289222.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: processor generating multiple messages
That is correct. But nothing stops you from creating new exchanges and aggregate results later on. You can also use some sort of correlation id (query id) so you'll know that different exchanges refer to the same query. You can also enforce ordering if you want. You can also use multiple routes (i.e. your processor can send the new exchanges down a different path, aggregate results and then send the result (once) down the original route to continue processing. That may appear as a limitation, but it's not really. You only need to understand the camel model and how to use it. Cheers, Hadrian On Apr 7, 2011, at 12:13 PM, Mark Webb wrote: I have a database that I need to query and put the results through a camel route. The query will result in hundreds of thousands of rows. My query will return 1000 rows at a time and pass them through the route. So I want to know how I can build a processor that can perform the query multiple times, and place each 1000 rows in a new exchange and send to the next processor in the route. From what I have found, a processor can only 'send' an Exchange out once. Thanks, Mark
Re: Difference between camel-activemq (1.1.0) and activemq-camel (5.2.0) libraries
Exactly. Always choose ActiveMQ-Camel. It is the component written and maintained by the ActiveMQ team themselves. Bruno Borges www.brunoborges.com.br +55 21 76727099 The glory of great men should always be measured by the means they have used to acquire it. - Francois de La Rochefoucauld On Thu, Apr 7, 2011 at 3:09 PM, Gert Villemos gville...@yahoo.de wrote: What is the difference between the * Camel-Activemq (1.1.0) * Activemq-Camel (5.2.0) Libraries? Is the 'Camel-Activemq' library simply an old deprecated version no longer used? And should I always use 'Activemq-Camel'? Or is there a subtle difference? -- View this message in context: http://camel.465427.n5.nabble.com/Difference-between-camel-activemq-1-1-0-and-activemq-camel-5-2-0-libraries-tp4289122p4289122.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: processor generating multiple messages
as suggested...multiple exchanges are necessary. just use a timer to periodically kickoff the route to check the database, add results to the exchange, split the results (if desired) and send them along...something along these lines from(timer://processResults?fixedRate=trueperiod=1) .process(new Processor() { public void process(Exchange exch) throws Exception { //query the database (mock for now) List results = new ArrayList(); for(int i=0; i10; i++) { results.add((int)(Math.random() * 100)); } exch.getIn().setBody(results); } }) .split().body().to(log:results); - Ben O'Day IT Consultant -http://benoday.blogspot.com -- View this message in context: http://camel.465427.n5.nabble.com/processor-generating-multiple-messages-tp4288897p4289374.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Using Apache Camel as replacement for cron-driven shell scripts
On Thu, 07 Apr 2011 16:50:52 +0300, Claus Straube claus.stra...@catify.com wrote: On 07.04.2011 15:33, Arkadi Shishlov wrote: On Thu, 07 Apr 2011 13:24:02 +0300, Andrey Popp 8may...@gmail.com wrote: * Apache Camel should try to compile routes and in the case of success -- replace current routes with the new ones. The replace part could be tricky depending on your requirements. If you started a slightly different copy of the route, you may get duplicates or other undesirable behavior. But route definition should be tested before production somewhere else, so you can probably just shutdown old stuff before staring new one. The last point is no issue, if you use the same route id. So this test works: Interesting point. Is it documented somewhere what _exactly_ happens when same route name is assigned via routeId()? For example, if there is an empty multicast() list (due to a bug) in new route, what happens to the old one? Still, in case application logical route consists of multiple from(), some sort of accounting is required to shutdown unused parts. There is Camel web-console. Time for Camel shell? :)
Re: Best Practice fro Thread Safe processor
Just to clarify a bit because maybe the Processor doesn't show it well nor my question: Java Concurrency in Practice states that Stateless objects are always thread-safe. But what happens when you do have state? What is everyone finding works best for Threading? -- View this message in context: http://camel.465427.n5.nabble.com/Best-Practice-fro-Thread-Safe-processor-tp4288973p4289404.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Best Practice fro Thread Safe processor
Processors are singletons. Typically we don't hold any state in them. If you want to hold state in Processor, you can do it. In that case, of course, you have to think of concurrency. There are many ways to that as you can find in Java Concurrency in Practice. It's all up to you. On 4/7/11 1:40 PM, pminearo pmine...@reardencommerce.com wrote: Just to clarify a bit because maybe the Processor doesn't show it well nor my question: Java Concurrency in Practice states that Stateless objects are always thread-safe. But what happens when you do have state? What is everyone finding works best for Threading? -- View this message in context: http://camel.465427.n5.nabble.com/Best-Practice-fro-Thread-Safe-processor- tp4288973p4289404.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Best Practice fro Thread Safe processor
So, essentially you MUST create the Processor to be Thread Safe. Is there any way to create a New Instance of the Processor per Thread? -- View this message in context: http://camel.465427.n5.nabble.com/Best-Practice-fro-Thread-Safe-processor-tp4288973p4289705.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Best Practice fro Thread Safe processor
Using ThreadLocal to store the state perhaps ? On 4/7/11 4:44 PM, pminearo pmine...@reardencommerce.com wrote: So, essentially you MUST create the Processor to be Thread Safe. Is there any way to create a New Instance of the Processor per Thread? -- View this message in context: http://camel.465427.n5.nabble.com/Best-Practice-fro-Thread-Safe-processor- tp4288973p4289705.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Difference between camel-activemq (1.1.0) and activemq-camel (5.2.0) libraries
Yes, there is a subtle difference: 1. http://activemq.apache.org/how-should-i-package-applications-using-camel-and-activemq.html [...] you may wish to use Camel's Enterprise Integration Patterns *inside* the ActiveMQ Broker [...] 2. http://camel.apache.org/activemq.html http://camel.apache.org/jms.html The [Camel] ActiveMQ component allows messages to be sent to a JMS Queue or Topic or messages to be consumed from a JMS Queue or Topic using Apache ActiveMQ - i.e. outside the broker. I hope that helps, Hadrian On Apr 7, 2011, at 2:09 PM, Gert Villemos wrote: What is the difference between the * Camel-Activemq (1.1.0) * Activemq-Camel (5.2.0) Libraries? Is the 'Camel-Activemq' library simply an old deprecated version no longer used? And should I always use 'Activemq-Camel'? Or is there a subtle difference? -- View this message in context: http://camel.465427.n5.nabble.com/Difference-between-camel-activemq-1-1-0-and-activemq-camel-5-2-0-libraries-tp4289122p4289122.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Low Latency
I had similar concerns from a client in the past and wrote this simple unit test to get a feel for how quickly Camel can add/remove from a queue. This should give you a ballpark latency estimate (~5ms for my setup). You can also get some great AMQ performance stats via http://activemq.apache.org/jmx.html JMX to monitor an active system... However, results will vary dramatically depending on thread and AMQ performance/QoS configurations...refer to the http://activemq.apache.org/performance.html AMQ performance page and the http://camel.apache.org/jms.html camel-jms page for more information... import java.util.concurrent.*; import javax.jms.ConnectionFactory; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.camel.*; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.jms.JmsComponent; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; import org.apache.log4j.Logger; import org.junit.Test; public class AMQRouteTest extends CamelTestSupport { private static final Logger logger = Logger.getLogger(AMQRouteTest.class.getName()); @EndpointInject(uri = mock:mock) protected MockEndpoint mock; protected CamelContext createCamelContext() throws Exception { CamelContext camelContext = super.createCamelContext(); String url = vm://test-broker?broker.persistent=falsebroker.useJmx=false; ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); camelContext.addComponent(activemq, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); return camelContext; } @Test public void test() throws Exception { int messageCnt = 1, poolSize = 5; mock.setMinimumExpectedMessageCount(messageCnt); ExecutorService executor = Executors.newFixedThreadPool(poolSize); for (int i = 0; i messageCnt; i++) { executor.submit(new Callable() { public Object call() throws Exception { template.sendBody(activemq:queue:test,System.currentTimeMillis()); return null; } }); } mock.assertIsSatisfied(); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from(activemq:queue:test?concurrentConsumers=10) .process(new Processor() { long totalLatency, msgCnt; public void process(Exchange exch) throws Exception { totalLatency += (System.currentTimeMillis() - exch.getIn().getBody(Long.class)); if(++msgCnt % 1000 == 0) { logger.info(avgLatency= + (totalLatency/msgCnt)); } } }) .to(mock:mock); } }; } } fridlyos wrote: 1. How camel rout is initialized, that is - now frequently it's checking for messages? 2. Using JMS - is this a poll, or the route is triggered immediately once the message is posted on the initial JMS Queue (THIS IS THE MAIN CONCERN - I understand SEDA vs DIRECT further down the route). Has anyone had to do something similar or researched similar issues? - Ben O'Day IT Consultant -http://benoday.blogspot.com -- View this message in context: http://camel.465427.n5.nabble.com/Low-Latency-tp4288799p4290010.html Sent from the Camel - Users mailing list archive at Nabble.com.
onexception behavior change from 2.5 to 2.6
Hello all, There seems to have been some change in the way onexception behaves from 2.5 to 2.6 an onwards. I believe the behaviour in 2.5 was correct. I have onexception set up as follows (in spring): java.net.SocketTimeoutException java.net.SocketException true I am basically attempting to call a web service. If the web service is not available, I retry several times. If the web service is still not reachable I give up and do some logging in handleFailedMessages. If a retry is successful, however, the handleFailedMessages should not be called and the route should continue from where the exception originally occurred. This is how it worked in 2.5. This does not happen however in 2.6. In 2.6 (and 2.7) when retrying fails, handleFailedMessages is called and the route does not continue. The book Camel in Action states that 2.5 is the correct behaviour. Was a bug introduced in 2.6, or am I missing something? Thanks for all your help. -- View this message in context: http://camel.465427.n5.nabble.com/onexception-behavior-change-from-2-5-to-2-6-tp4290040p4290040.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: onexception behavior change from 2.5 to 2.6
A little more on this. The behaviour is not quite as my original post describes. I have another onexception clause which picks up all other exceptions as shown at the end of this post. It turns out that when redelivery fails from the previous on exception clause, Camel thows a CamelException which is handled by this cluase. Again,this did not happen in 2.5. The stack trace is as follows: at org.apache.camel.processor.interceptor.HandleFaultInterceptor.handleFault(HandleFaultInterceptor.java:69) at org.apache.camel.processor.interceptor.HandleFaultInterceptor$1.done(HandleFaultInterceptor.java:46) at org.apache.camel.management.InstrumentationProcessor$1.done(InstrumentationProcessor.java:78) at org.apache.camel.component.cxf.CxfClientCallback.handleResponse(CxfClientCallback.java:63) at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:776) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2335) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:2198) at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$2.run(AutomaticWorkQueueImpl.java:253) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) java.lang.Exception false -- View this message in context: http://camel.465427.n5.nabble.com/onexception-behavior-change-from-2-5-to-2-6-tp4290040p4290054.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Best Practice fro Thread Safe processor
As Camel has a async process module, you can't know if the processors are called in a single thread. If you are using the thread local to store the states, it may be massed up. My suggestion is store the states information into the Exchange, and Camel will make sure it is processed rightly. Willem -- View this message in context: http://camel.465427.n5.nabble.com/Best-Practice-fro-Thread-Safe-processor-tp4288973p4290075.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: addTypeConverter does not clear misses in BaseTypeConverterRegistry
Hi , Good catch of the issue of misses map. We should updated if a new TypeConverter is added. Please feel free to create a JIRA for it, We love the contribution :) Can you give me more detail about the webstart issue of the AnnotationTypeConverterLoader? What kind of error that you web start client faced, and why suppress the usage of AnnotationTypeConverterLoader can make it work ? Willem Andreas Kuhtz wrote: Hello, I was playing around with adding type converters after the context was started. In my tests I tried to convert an object without any type converter available (returns null which is fine). After that I added a matching type converter (manually) and run the conversion again. Because addTypeConverter does not clear misses map in BaseTypeConverterRegistry subsequent conversions fail. I think the misses map in BaseTypeConverterRegistry should remove the key if a matching type converter is added. My second problem is that it's currently not possible to start camel without the AnnotationTypeConverterLoader added. In case of a webstart based client application this causes startup errors that prevents using camel. I added an attribute to suppress the usage of AnnotationTypeConverterLoader in my local sources and I've prepared a patch for this problem and the problem described above with test case. Should I create a JIRA issue? http://camel.465427.n5.nabble.com/file/n4288871/patch-camel.diff patch-camel.diff Cheers Andi -- View this message in context: http://camel.465427.n5.nabble.com/addTypeConverter-does-not-clear-misses-in-BaseTypeConverterRegistry-tp4288871p4290078.html Sent from the Camel - Users mailing list archive at Nabble.com.