camunda-community-hub / camunda-platform-7-camel

Community Extension to add Apache Camel support for Camunda Platform 7
Apache License 2.0
82 stars 57 forks source link

camunda - camel integration based on OSGi Blueprint #16

Closed Weinschenk closed 9 years ago

Weinschenk commented 10 years ago

Hi there,

The current camunda-bpm-camel just supports spring and cdi so I added a blueprint implementation using OSGi toolings. I am new to camunda BPM so I hope my coding isn’t too crappy ;o) .

Regards, Thomas

@berndruecker Do you remember me? You visited us last year in Freiburg...

rbraeunlich commented 10 years ago

Hey Thomas,

I have no experince with Camel but at least I can say the OSGi part looks fine ;)

Cheers, Ronny

Weinschenk commented 10 years ago

Hey Ronny,

I am pleased to hear that ;o) Do you think it is possible to use the BlueprintELResolver instead of the CamelBlueprintELResolver? I tried it but didn't find a way so solve it...

From a Camel perspective the code uses 95% of the camunda-bpm-camel-common. Only the CamelServiceImpl bean definition gets obsolete. The created DefaultCamelContext is enough to call Camel via vm and direct-vm. Direct will not work as it can only be called within the same context (like a private method in Java). JMS/ActiveMQ will also not work out of the box as the broker definition is not provided. From my point of view this is not really a problem as a (direct-)vm route can be used to send the message to a JMS/ActiveMQ queue.

Regards, Thomas

rbraeunlich commented 10 years ago

Hi Thomas,

I guess they way it's implemented you cannot use the BlueprintELResolver directly because it doesn't implement the invoke() method. Maybe the OSGiELResolver would help. After a second look I was just wondering if the invoke() method works the way it's implemented. Couldn't "base" be a dynamic proxy? Then

if (base != null && base.getClass() == CamelServiceImpl.class) {

would always return false.

The Camel part should be reviewed by Bernd.

Cheers, Ronny

Weinschenk commented 10 years ago

Hi Ronny,

No glue about the OSGiELResolver …will it work in a blueprint file as well? Do you have an example blueprint in combination with the OSGiELResolver ? In the end the resolver must point to CamelServiceImpl which in this case implements JavaDelegate , right?

Regarding your doubts about the invoke method. It perfectly works in my test environment (7.1.0-Final, Karaf 2.3.3, Camel 2.12.2). It is called with the actual instance of the CamelServiceImpl that was created by the getValue method. This makes sense as the CompositeELResolver retrieves the resolver and the AstMethod is invoking it with the found instance. Why should there be a dynamic proxy involved?

Regards, Thomas

berndruecker commented 10 years ago

Hey guys.

Actually I am not an expert if it comes to OSGI - was there some result in your onging discussion about the current solution?

The OSGI part and a quick how-to-use should also be added to https://github.com/camunda/camunda-bpm-camel/blob/master/README.md.

If both issues are resolved I could merge that pull request.

By the way: It would be cool to make bigger commits out of the small one before sending the pull request, see e.g. http://de.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html. Maybe you could create a new one?

Weinschenk commented 10 years ago

Hey Bernd,

I added a comment to the readme. Is this sufficient?

I have problems adding Unit tests because the environment is quite complex (Karaf with Camel and a camunda bpm started via context.xml). Pax exam should do the trick but I have no experience with that.

Regarding the size of the pull request... egit is acutally not working on my machine due to ssl conflicts. So I was forced to use the web ui to upload the files. Well and somehow I managed it to upload all the files to camunda-bpm-camel root instead of camunda-bpm-camel-blueprint. I deleted the files and uploaded them again to the right place. The result is 34 commits for 13 files…what a shame ;o)

Best regards | Mit freundlichen Grüßen

Thomas Weinschenk


Expert Business Integration | IS-ASB Endress+Hauser InfoServe GmbH+Co. KG | Heinrich-von-Stephan-Strasse 8 | 79100 Freiburg im Breisgau | Germany Phone: +49 761 7059 153 | Mobile: +49 160 9696 3738 | Fax: +49 761 7059 5 222 thomas.weinschenk@infoserve.endress.com | www.infoserve.endress.com


Endress+Hauser InfoServe GmbH+Co. KG Sitz der Gesellschaft: Weil am Rhein Eingetragen: Amtsgericht Freiburg i. Br. HRA 411272 Persönlich haftender Gesellschafter: Endress+Hauser InfoServe Verwaltungs-GmbH, Weil am Rhein Eingetragen: Amtsgericht Freiburg i.Br. HRB 412621 Geschäftsführer: Pieter de Koning, Werner Hofmann


Disclaimer:

The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you receive this in error, please contact the sender and delete the material from any computer.


http://www.infoserve.endress.com/

From: Bernd Rücker notifications@github.com To: camunda/camunda-bpm-camel camunda-bpm-camel@noreply.github.com, Cc: Thomas Weinschenk thomas.weinschenk@infoserve.endress.com Date: 30.05.2014 13:36 Subject: Re: [camunda-bpm-camel] camunda - camel integration based on OSGi Blueprint (#16)

Hey guys.

Actually I am not an expert if it comes to OSGI - was there some result in your onging discussion about the current solution?

The OSGI part and a quick how-to-use should also be added to https://github.com/camunda/camunda-bpm-camel/blob/master/README.md.

If both issues are resolved I could merge that pull request.

By the way: It would be cool to make bigger commits out of the small one before sending the pull request, see e.g. http://de.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html . Maybe you could create a new one?

— Reply to this email directly or view it on GitHub.

rbraeunlich commented 10 years ago

Hi Thomas, I am sorry that it took me so long to answer. Regarding the OSGiELResolver: Yes, it works with Blueprint, too. You could just export the CamelService with the LDAP property

processExpression=camel

as described here: https://github.com/camunda/camunda-bpm-platform-osgi#step-1 Then the OSGiELResolver should be able to find it.

And regarding the dynamic proxy you're right. I was missing the part that you create the instance in the getValue method.

rbraeunlich commented 9 years ago

Hi Thomas, I am really sorry that I totally forgot about this pull request. Since Bernd didn't complain I'll finally merge it. I am sorry for letting you wait.