Click here to Skip to main content
15,891,567 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Needs an advice please!

I have a requirement to integrate our software system (win32 c# forms application with SQL server backend - have full source code control) to an external software system running in a different geographical location written using Java, postgress database running on ubuntu linux.

The external software guys are ready to proivde some sort of interface for us to integrate and am concerned on

1.What would be the best method to integrate ? I have never done an integration between windows and ubuntu system before and do not want to go wrong

2.Performance, the bandwidth is not very stable and good between both systems. I have spoken to the service provider and they say they can not improve the service beyond the current level.

Please advice me and any little help will be highly appreciated

UPDATE 1

Let me more specific,

We have an order management system in the head office on c# & SQL server 2005

Similalry, we have a warehouse system in our warehouse which is about 25 miles away from the head office and the warehouse system is on Java ,Postress and UBUNTU linux.

Both systems have their own structure and so far we are sending the orders created in the head office (c#) system in an excel format to the warehouse for the warehouse guys to enter into their Java based system and send us back the delivery notes to the head office to be again scanned into the c# system.

We are going to automate this process ( this is what i meant as integration) by keeping both databases intact ( we will not sharing the same database, the head office system will use SQL server and the warehouse system will use postgress on ubuntu and obviously both databases have their own structures.


An external company has provided the ubuntu based system and willing to work with us and provide some sort of an interface (webservices ?) for us to utilise so that the data exchange between both system can be automated - no manual data entry.


I am not sure about the best way forward but have web services in my mind and to ask the warehouse software provider to create some web services in Java and publish for us so that it can be consumed in our c# system...I am not sure whether this is the best practice and do not want to go wrong


Specially the connectivity between the head office and warehouse is not very stable and do not want to end up with orders not being fully synchonised and also performance issues.

I want some sort of advice / any suggestions / direction please
Posted
Updated 2-Nov-11 6:13am
v6

What do they mean by 'integrate'? Use the same database? Run locally as part of the same system? Be able to share data?

Do you have the ability to modify the Java system, or specify things that need to be in the interface? Creating either a web service/RPC endpoint or a TCP protocol for exchanging messages and data is much easier if you have the ability to add hooks to the other end. At the opposite end of that scale, if you have no control whatsoever, you sometimes have to resort to hackery like reading log files and faking keyboard/mouse input. But it sounds like you are working with the other developers to make integration work from both sides, which is good.

As long as you haven't used any SQL server specific features in the database code, moving to a different back end database should be trivial (just use different DataAdapter classes). If you have (I think some stored procedure stuff would come under this) then you would have to translate it before you could use a different database, and that can be tricky if PostGre doesn't have comparable extensions.

It is possible to run a C#/.Net application on Linux using Mono, as long as you haven't use P/Invoke (if you have you will need to find Linux native equivalents and switch between them depending on the build).

EDIT FOR UPDATE

Okay, so you don't want 'integration' as such but 'cooperation', i.e. the two systems able to interact with each other. Generally this is straight forward – expose a web service (if it's not time critical which it can't be if you are doing it manually now) at one end and call it with the other, actively to post new orders and polling to request updates on delivery progress.

The only problem here is the possible communication issues with a bad network. If you're concerned about duplicate requests, because a service call completed but the response was lost, you need to assign a request a UID on the client side before initially placing it, and include that ID in the initial request that's sent to the warehouse. If the Java system receives a duplicate ID it should reject it (with a sensible return code/exception, naturally). Similarly, delivery notes should either have an ID or be tied to the ID of the order they refer to, and after a client (by which I mean the web service client, i.e. the head office system) polls for new updates and the web service sends information about what is new, the client should send an acknowledgement including the IDs that it successfully retrieved an update for. That means that if the network goes down head office will see the same 'updated' delivery notes twice, but that's better than no times.

Another way to do the update synchronisation is to give each update a sequential ID and the client can make requests based on what the last update ID it saw was. This puts the responsibility in the client code (i.e. your head office code) and means one less service call; however it means that the server has to maintain all the updates because it doesn't know until a request comes in which ones it will need to send.

Depending on how it's done now this might require a couple of new tables or fields in the database at one or both ends, to keep track of what each side thinks it has sent to the other and what is awaiting collection as a new update.
 
Share this answer
 
v2
Comments
Bala Selvanayagam 1-Nov-11 8:11am    
Thanks BobJanova,

Sorry, i was not very specefic and have updated my question under the heading of "UPDATE 1" and hope it makes more sense now.

Please let me know what do you think the best way forward please
BobJanova 1-Nov-11 8:21am    
Edited the solution.
Bala Selvanayagam 1-Nov-11 9:08am    
Thanks BobJanova
Bala Selvanayagam 2-Nov-11 8:59am    
My 5 for the suggestions
So you have a partially connected scenario, and needs something that runs on both Windows and Linux. WebSphere MQ[^] solves this problem in a robust manner.

Best regards
Espen Harlinn
 
Share this answer
 
Comments
Bala Selvanayagam 1-Nov-11 10:56am    
Thanks Espen,

yes my main worry is partially connected scenario. Thanks for the suggestion and i will dig into and see
Espen Harlinn 2-Nov-11 9:00am    
Excellent :)
Bala Selvanayagam 2-Nov-11 9:00am    
My 5 for the suggestions
Espen Harlinn 2-Nov-11 9:00am    
Thanks :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900