home | awk | bzip2 | dirent | doxygen | expat | freetype | gd | getopt | graphviz | iconv | jarin | jpeg | mcppdoc | ndoc | netlet | opencxx | perl | png | stlport-dmc | tiff | uuid | xpm | zlib
download

jarin 0.1

Jarin is a free interoperability framework between the Java platform and the other environments.

SourceForge.net Logo Support This Project Tutorial Slides Project News RSS Feed Available


overview

Jarin's purpose is to integrate Java libraries into non-Java environments providing a very thin wrapper around Java classes, exposing them in the form of non-Java platform-specific library. The main difference from the other solutions with a similar goal are that Jarin neither retranslates nor recompiles the original Java library nor replaces the Java Virtual Machine (JVM) hosting it. Instead, an existing JVM of your choice is used to host the original Java implementation, which functionality is used then by external calls made by the Java Native Interface (JNI).

The specific objectives of Jarin are:

  (C, C++, Microsoft .NET, Mono, Perl, Ruby and Microsoft COM)

Jarin is open source licensed under the LGPL license that allows it to be used and/or embedded in commercial software, however the eventual modifications of Jarin itself are required to be published under the same license (see the license for more information).

See http://prantl.host.sk/jarin or http://jarin.sourceforge.net for the most recent version and more information.


details

The framework generates a wrapping proxy classes for the Java types to be used from a non-Java platform. The process of wrapping a set of Java classes is separated into more phases to reuse internal components of the toolkit as much as possible:

  interface.
  source code.

The extraction phase is common for all platforms and produces a XML description of public and protected members of the specified Java classes. Reflection is used to retrieve information about the Java classes, accessing their binary form present in the current class path. API documentation can be extracted from the Java sources, if they are available. There is a separate tool within the package performing the extraction:

  their public interface.
  the documentation.

The generation phase parses the XML description produced from the extraction phase and its design differs in for various platforms, which exist as separate tools based on XSL templates and sharing their common parts if possible:

The wrapper making the JNI calls is considered as thin as possible to copy closely the original Java interface, however convenient enough to allow the basic interoperability with platform specific primitive types. The ratio of interoperability convenience and the size of wrapper code differs among various platform ports but generally is very small avoiding any object copying, caching and duplication during the calls.


installation

It is sensible to create a common master directory for the others packages, either dependencies of this package or other new ones. It helps keeping all the unpacked packages in good order, for example:

 d:\packages
 d:\packages\package1
 d:\packages\package2
 ...

Names of the packages rarely clash with the others. It is usual to use the name of the package for the name of the directory, for example:

 d:\packages\jarin

 cd d:\packages\jarin
 unzip jarin-0.1-msnet11_bin.zip

 janek\test\base\Build.Base.mak
 janek\test\extractor\Doc.Extractor.mak
 janek\test\extractor\Test.Extractor.mak
 janek\test\system\Test.JSystem.mak


package structure

There are several files in the master directory introducing briefly the package, its version, history, authors and license. The subdirectories are:


list of deliverables

Sources:

Binaries from Microsoft .NET Framework 1.0:

Binaries from Microsoft .NET Framework 1.1:


related links

Home with the latest version:

Slides with an introduction and a tutorial:

Bug reports, questions and suggestions are kindly expected at prantl@host.sk.


build from sources

It is sensible to create a common master directory for the others packages, either dependencies of this package or other new ones. It helps keeping all the unpacked packages in good order, for example:

 d:\packages
 d:\packages\package1-version1
 d:\packages\package2-version2
 ...

Names of the packages rarely clash with the others. It is usual to use the name of the package with the version stamp for the name of the directory (name without version is used for the compiled installation package), for example:

 d:\packages\jarin-0.1

 cd d:\packages\jarin-0.1
 bzip2 -cd jarin-0.1.tar.bz2 | tar xf -
 (check if there is not another nested single master directory)

 janek\test\base\Build.Base.mak
 janek\test\extractor\Doc.Extractor.mak
 janek\test\extractor\Test.Extractor.mak
 janek\test\system\Test.JSystem.mak

Go to the root package subdirectory and run the following batches:

 (set the right version of the Microsoft .NET Framework into the environment)
 (set the right version of Java SDK into the environment, including jvm.dll)
 (set Jakarta Ant into the environment)
 (set xsltproc from libxml/libxslt into the environment)
 _makebin
 _makedoc
 _makeclean
 _makedist
 _makeclean


history of changes

2004/11/05

 * the first pre-release
 + jarek Extractor und Documenter
 * janek in managed C++
download

home | awk | bzip2 | dirent | doxygen | expat | freetype | gd | getopt | graphviz | iconv | jarin | jpeg | mcppdoc | ndoc | netlet | opencxx | perl | png | stlport-dmc | tiff | uuid | xpm | zlib