Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
scrollbar
{excerpt:hidden=true}ideas about development and maintenance of C# and Java versions of OpenMI{excerpt}

h2. Proposal for OpenMI and Java Interoperability
OpenMI version 1.4 will contain both C# and Java versions of Standard defined.

Java interfaces will be created using semi-automatic procedure and will represent exact mirror of C# version. Except language differences between two frameworks. 

In this way both Java and C# users of OpenMI should be happy because they will use framework classes from the  platform of their choice: System.* in .NET Framework or org.* in JDK.

For example:

{code:java|title=C# version}
using System.Collections.Generic;

namespace OpenMI.Standard
{
    public interface ILinkableComponent
    {
        IList<IExchangeItem> InputItems { get; }
        IList<IExchangeItem> OutputItems { get; }
    
        event LinkableComponentDataChangedEventHandler DataChanged;
    }
}
{code}

May look like this:

{code:java|title=Java version}
package org.openmi.standard;

import java.util.List;

public interface ILinkableComponent
{
    public abstract List<IExchangeItem> getInputItems();
    public abstract List<IExchangeItem> getOutputItems();

    public abstract void addDataChangedListener(LinkableComponentDataChangedEvent e);
    public abstract void removeDataChangedListener(LinkableComponentDataChangedEvent e);
}
{code}

After that the following directions have to be investigated in order to re-use components between different platforms:

# Binary converison of Java components implementing Java version of Standard to .NET and adapting them to C# version of interfaces using Adapter design pattern. Conversion should be possible using [ikvmc|http://www.ikvm.net].
# Binary converison of .NET components implementing C# version of Standard to Java and adapting them to Java version of interfaces using Adapter design pattern. Maybe OpenJDK version of [ikvmstub|http://www.ikvm.net].
# Ingetration of two platforms using WebServices or other remoting methods using one of libraries available for both platforms. For example using Remoting in [Spring|http://static.springframework.org/spring/docs/2.0.x/reference/remoting.html] and [Spring.NET|http://www.springframework.net/doc-latest/reference/html/index-services.html]. 

Please note:

* *Package names* are defined in a way they expected to be:
** *org.openmi.standard* for Java
** *OpenMI.Standard* for .NET
* Collection interface like *[IList<T>|http://msdn2.microsoft.com/en-us/library/system.collections.ilist_members(VS.71).aspx]* defined as corresponding *[List<T>|http://java.sun.com/docs/books/tutorial/collections/interfaces/list.html]* interface in Java. 
* *Properties* converted to corresponding *getXxx()* and *setXxx()* methods.
* *Events* are transformed to Java analogs using *addDataChangedListener()*, *removeDataChangedListener()* in a way they [expected to be|http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html] in Java world.


{info:title=Conclusions}
* Java developers will use JDK class libraries and .NET developers will use .NET Framework class libraries. The best from two worlds. We do the rest to make them work together
* When *functional* changes to OpenMI Standard are required - they should be discussed and accepted in both versions without any exceptions. Any deviations may not be called OpenMI Standard anymore.
{info}

h2. Tools

|| Tool || Description || Comment ||
| [IKVM.NET|http://www.ikvm.net] | Binary Java <-> .NET conversion | Latest development version is based on OpenJDK, see [blog|http://weblog.ikvm.net/] |
| [Grasshopper|http://dev.mainsoft.com/Default.aspx?tabid=130] | Binary .NET -> Java convertion | Does it use ikvm internaly(?) |
| [JAD|http://www.kpdus.com/jad.html] | Converts .class into .java |  Also contains GUI called [FrontEnd Plus|http://www.kpdus.com/jad.html#gui] |