Recently I am engaged in an Integration project in which I have to Integrate BizTalk Server 2006 R2 with EMC Solutions product called Smarts Software. This Smarts Software exposes a Java API and a Web Service interface. Initially knowing that it exposes a Web Service I felt relief and it would make my life easy but then talking with the Smarts Software people they told us that the Web Service Interface is very naïve and it does not have all the functionality we need for the Integration. The only option left was to talk with the Java API. Here I started my research to find the most efficient way to talk with this Java API.
Below are the options:
· Create a Java Web Service which wraps the Java API and BizTalk can consume that WS.
o BizTalk can use SOAP Adapters or WCF-basicHttp Adapter and talk with this Service.
o We need to write code for each of the functionality and every time any change in the Java API need to modify our WS.
o Would require considerable time for development and testing the Java Web Service.
o Always there would be chance for any errors occurring on .NET and Java side.
· Using IKVM
o IKVM.Net is an implementation of Java for Mono and the Microsoft .NET Framework.
o It includes the following components:
- A Java Virtual Machine implemented in .NET
- A .NET implementation of the Java class libraries
- Tools that enable Java and .NET interoperability
o For more information visit: http://www.ikvm.net/
o Once again need considerable time for understanding and start developing.
o More time would require for development. It’s an open source and did not see much people in Industries using this tool so skeptical about its performance and reliability.
o Always chance for any errors occurring on .NET and Java side.
· Using JInegra for .NET
o J-Integra® for .NET is a high performance middleware bridge that enables Java .NET interoperability. Its pure Java implementation of Microsoft's .NET Remoting distributed object wire protocol allows you to access .NET components from Java clients, and Java objects from .NET clients.
o J-Integra® for .NET can be used for point to point integration scenarios where the two application that need to communicate with each other don’t need to plug into a common integration infrastructure such ESB. Example use case scenarios include:
§ .NET client interaction with a J2EE Server
§ .NET client invoking Java desktop application.(Similar of our integration project i.e. .NET client invoking a Java API)
§ .NET Server interaction with a J2EE Server.
§ Java desktop applications invoking .NET Server.
o For more information : http://j-integra.intrinsyc.com/products/net/
o Found out that is it being used by many industries also. The list goes http://j-integra.intrinsyc.com/company/customers.asp.
o Considerably cheaper than other products available in market but little more complex compared to other in respect to implementation.
o So more time required to understand the product and later implement it but definately worth product to look into.
· Using Java Native Interface (JNI)
o JNI is an open standard and is a programming framework that allows Java code running in a Java Virtual Machine (JVM) to call and to be called by native applications (programs specific to a hardware and operating system platform) and libraries written in other languages, such as C, C++ and assembly.
o Again we need considerable amount of time and effort to learn JNI and code it.
o We need to write code for each of the functionality and perform modifications on our side for any changes on Java API.
o For more information visit: : http://java.sun.com/javase/6/docs/technotes/guides/jni/index.html
· Using CodeMesh JuggerNET
o Similar product like JIntegra for .NET and similar factors for consideration.
o For more information: http://codemesh.com/products/juggernet/index.html
· Using JNBridge Pro
o JNBridge is since long time in Market and is a well known product by many industries (JNBridge Clients) which had done integrations work between .NET and Java.
o JNBridgePro enables you to join anything Java together with anything .NET across the platform boundary.
o First product which actually has an adapter to talk with BizTalk called JMS Adapter for BizTalk Server. Unfortunately that was not for our project as we had to talk directly with the Java API and not a Java Messaging Bus.
o It’s really fast to develop and very easy to generate proxies and also regenerate for any changes in the API.
o For more information visit: http://www.jnbridge.com/jnbpro.htm
I downloaded trial versions of three of the products which were Codemesh JuggerNET, jIntegra for .NET and JNBridge Pro. If you ask my frankly than I was most comfortable with the JNBridge pro. I just saw their one of the demo and within minutes I was able to generate a proxy for the Smarts Java API and reference that in my BizTalk Solution and I was so happy to see that I can just make a variable of any method of the Java API and use it directly in the expression shape. Hence so far it made my life easy. It does has many consideration about how the JNBridge will talk with the actually Java API. It say that there are 3 ways in which it can communicate: Shared Memory (both on same server), IP/TCP and HTTP/HTTPS. So far everything looked good with the JNBridge. Also we can develop a custom adapter using the generate proxy and talk with the Java API.
So I concluded to 2 option in the end.
First is using the JNBridge Pro. (Should fit in out project budget as its considerably costly product than other products.)
Secondly, develop a Java Web Service which sounds very straight forward. ;-)
I will update this post once we decide on what approach we are going to take and how it went.
References taken for Wikipedia and mentioned products websites.