7 Replies Latest reply on Jul 6, 2012 3:12 PM by alexcmak

    Hello world Java DSL with camel-archetype-java

    alexcmak

      Greetings,

       

      I'd like to create a simple Hello World app with Java DSL.

       

      From the Fuse IDE, I choose "camel-archetype-java."

       

      I saw that a sample application is created for me.

      A src folder with two xml messages were generated. A sample route is generated:

       

       

            from("file:src/data?noop=true")

                  .choice()

                      .when(xpath("/person/city = 'London'"))

                          .to("file:target/messages/uk")

                      .otherwise()

                          .to("file:target/messages/others");

                                               

      How do I deploy this application in Fuse ESB?

       

      When I do a "mvn install" I'd get a jar file.

       

      I installed it like so. Is this correct?

       

      FuseESB:karaf@root> osgi:install -s file:c:/work/workspace/myjava/target/myjava-1.0.0-SNAPSHOT.jar

      Bundle ID: 294       

       

      I see that it is really started in fuseesb.

       

      file:c:/work/workspace/myjava/target/myjava-1.0.0-SNAPSHOT.jar

       

       

      Where is my src/data folder to trigger the route?

      I placed messages.xml to the src/data folder and nothing happens.

       

      Is there an archetype that can use Java DSL and create a war file?

       

      Thanks,

       

      Alex

        • 1. Re: Hello world Java DSL with camel-archetype-java
          ffang

          Hi,

           

          There should be a src folder in $FUSE_ESB after you install/start that bundle.

          So put files in $FUSE_ESB/data/src should do the trick.

           

          Freeman

          • 2. Re: Hello world Java DSL with camel-archetype-java
            alexcmak

            Thanks for your reply.

             

            Does Fuse ESB rely on environment variables? when I installed Fuse ESB there was no %FUSE_ESB% set.

             

            I start fuse-esb here:

             

            C:\fuse-esb-full-7.0.0.fuse-061\fuse-esb-7.0.0.fuse-061\bin

             

            I place the XML messages here

             

            C:\fuse-esb-full-7.0.0.fuse-061\fuse-esb-7.0.0.fuse-061\src\data

             

            nothing happens. I set %FUSE_ESB% and it didn't help.

             

            The camel-archetype-java works perfectly fine with

             

            mvn jetty:run

             

            as the generated ReadMe.txt suggested, but that's not deploy within FuseESB.

             

             

            Thanks,

            Alex

            • 3. Re: Hello world Java DSL with camel-archetype-java
              ffang

              Hi,

               

              No, Fuse ESB doesn't rely on environment variables FUSE_ESB set.

              When I mentioned the $FUSE_ESB, I just refer to the location where you install Fuse ESB.

               

              Did a close look at the camel-archetype-java, the package in pom.xml is plain jar, so it's not designed to be deployed into OSGi container,  you should use camel-archetype-blueprint instead which demonstrate how to generate blueprint bundle and deploy to OSGi container. Take a look at to get different camel archetypes purpose.

               

               

              However, adapt the camel-archetype-java to be able to deployed into OSGi container isn't difficult, you just need edit the generated pom.xml

              change

              tag, then build it and drop the jar to $FUSE_ESB/deploy folder, then you can see $FUSE_ESB/src/data folder get generated automatically for you, then you can copy message1|2.xml into this folder and you can find in $FUSE_ESB/target there's the output files.

               

               

              http://camel.apache.org/camel-maven-archetypes.html

               

              Freeman

              • 4. Re: Hello world Java DSL with camel-archetype-java
                davsclaus

                Hi

                 

                You should use the blueprint or spring / spring-dm archetype to create a new project. Then its OSGi based, and will kick start your Camel apps. The Java DSL can still be used, as you can use the  to refer to your java classes with the Java DSL.

                 

                In the pure Java archetype there is no XML file that automatic kick-start your app in the OSGi container. So your app starts, but don't start your Camel app. For that you would need to code your own OSGi Bundle Activator class and put inside your own JAR, and add a meta data in the MANIFEST.MF file so the OSGi container is aware of your custom OSGi bundle activator so it can start|stop it accordingly to the lifecycle of your bundle. When you have a XML file (blueprint or spring) then that happens automatic for you.

                 

                In the future with CDI annotations we may be able to have a way of also automatic to kick-start your app, by you annotation your Java DSL class or something alike.

                • 5. Re: Hello world Java DSL with camel-archetype-java
                  davsclaus

                  There is a sample of using  at

                  http://camel.apache.org/spring.html

                   

                  This applies for blueprint as well.

                  • 6. Re: Hello world Java DSL with camel-archetype-java
                    alexcmak

                    Freeman,

                     

                    Thanks for your reply.

                    I changed the  in pom.xml instead of the file:

                     

                    Alex Camel Route (1.0.0.SNAPSHOT)

                     

                    However, dropping messages.xml files in src/data still did not trigger anything.

                     

                    I will try a camel-archetype-blueprint.

                     

                    From the list of available archetypes, only these are OSGi ready: camel-archetype-blueprint, camel-archetype-scala and camel-archetype-spring-dm. It would be nice to have a Java one?

                     

                     

                    Alex

                    • 7. Re: Hello world Java DSL with camel-archetype-java
                      alexcmak

                      I generated a new camel-archetype-blueprint project.

                      I replaced the route in the blueprint.xml with a , and then specified a bean id for the class.

                       

                      I created a new RouteBuilder class with my route written in Java and everything worked.

                       

                      Thank you all for your responds.

                       

                      Alex