Search code examples
c#java.netspring-mvcmiddleware

Middleware application in distributed environment


I want to develop an application which will transfer data from one application to another application. Now the kick here is that one of my application is in .Net framework while the other is implemented in Spring framework (Java).

Which programming technique would best suit this sort of environment?
And Yes ! data will be quite heavy, it will include BLOBs. Moreover, there are chances of network break during transfer, therefore, it has to be something like transactions; as I certainly don't want to lose data.

What do you think about XML over http?

Please suggest what sort of application should i be implementing to transfer data.


Solution

  • Using Java, JMS provides a way of separating the application from the transport layer of providing data. The same Java classes can be used to communicate with different JMS providers by using the JNDI information for the desired provider. The classes first use a connection factory to connect to the queue or topic, and then use populate and send or publish the messages. On the receiving side, the clients then receive or subscribe to the messages.

    I've used SonicMQ messaging system and thier Java Message Services is very stable... you can view a little sample about how i'm using it here and there is a .Net implementation

    The codification could be very simple:

    /**
     * 
     * This file is part of Jms.publisher sample.
     * 
     *  Jms.publisher is free software: you can redistribute it and/or modify
     *  it under the terms of the GNU General Public License as published by
     *  the Free Software Foundation, either version 3 of the License, or
     *  (at your option) any later version.
     * 
     *  Jms.publisher is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *  GNU General Public License for more details.
     * 
     *  You should have received a copy of the GNU General Public License
     *  along with Jms.publisher.  If not, see <http://www.gnu.org/licenses/>.
     *  
     * 
     * AccessManager.Java 
     * Create by Iván Jaimes on 03/09/2012
     * 
     */
    package sonic;
    
    import javax.jms.JMSException;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.jms.TopicConnection;
    import javax.jms.TopicPublisher;
    import javax.jms.TopicSession;
    import javax.jms.TopicConnectionFactory;
    
    import config.ConnectionInfo;
    
    public class AccessManager 
    {
        private TopicConnection connection = null;
        private TopicSession session = null;
        private TopicPublisher topicPublisher = null;    
        private TopicConnectionFactory connectionFactory = null;
        private ConnectionInfo info = null;
    
        public AccessManager(ConnectionInfo connectionInfo) throws JMSException
        {
            info = connectionInfo;
        }
    
        public final void connect() throws JMSException
        {
            connectionFactory = new progress.message.jclient.TopicConnectionFactory(info.getSonicAddress());
            connection = connectionFactory.createTopicConnection(info.getUserName(), info.getPassword());
            connection.start();
            session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
            topicPublisher = session.createPublisher(info.getTopic());
            assert (isConnected());
        }
    
        public void send(String text) throws JMSException  
        {
            TextMessage message = session.createTextMessage(text); // send method
            topicPublisher.publish(message);
        }
        /**
         * Disconnect.
         * @throws JMSException 
         */
        public final void disconnect() throws JMSException 
        {
            if (topicPublisher != null) 
            {
                topicPublisher.close();
                session.close();
                connection.close();
            }
    
            connection = null;
            session = null;
        }
    
        /**
         * Checks if is connected.
         * 
         * @return true, if is connected
         */
        public final boolean isConnected() {
            if (session != null) {
                return true;
            }
            return false;
        }
    }
    

    There are more resources about it: