Over a million developers have joined DZone.

Ja.net Provides Support for Compilation of Java to .NET

· Java Zone

Discover how AppDynamics steps in to upgrade your performance game and prevent your enterprise from these top 10 Java performance problems, brought to you in partnership with AppDynamics.

I recently ran across a project called ja.net that provides support for compilation of Java to .Net.  Since neo4j has such a dependency clean kernel, I decided to try ja.net as a way of making neo4j usefull under .Net. (no slight against the RESTful interfaces, but perhaps you’d like to run neo4j on .net as an embedded graph DB under .Net). Here’s my VS2010 with the neo4j.dll referenced, and the object browser showing the EmbeddedGraphDB class as a first class .Net object:


 

Step #1 Download stuff

Download the neo4j kernel source and expand into a working directory. http://neo4j.org/download

Download the geronimo JTA spec src jar and expand under neo4j’s src/main/java directory. 

Install Ja.net from http://www.janetdev.org/

Step #2 Compile neo4j kernel using Ja.Net

C:\neo4j-kernel-1.0\src>c:\opt\java\Ja.NET\bin\javac -bam:neo4j.dll main

You can compile first then using the “bam” command to create the dll, or do it in one pass as I’ve done here.  You’ll see warnings, most look like compiler warnings, one may be of concern.  For now let’s just experiment.  No garauntees, promises, etc. 

Step #3 Create a C# console app, reference your newly created .dll, and give neo4j on .net a run.  Here’s my sample code:

class Program
{
static void Main(string[] args)
{
var graphDb = new EmbeddedGraphDatabase("graphdb");
var tx = graphDb.beginTx();
try
{
var firstNode = graphDb.createNode();
var secondNode = graphDb.createNode();
var relationship = firstNode.createRelationshipTo(
secondNode, DynamicRelationshipType.withName("KNOWS"));
firstNode.setProperty("message", "Hello, ");
secondNode.setProperty("message", "world!");
relationship.setProperty("message", "brave Neo4j ");
var i = graphDb.getAllNodes().iterator();
while (i.hasNext()) {
    var n = ((Node)i.next());
    if (n.hasProperty("message"))
    Console.WriteLine(n.getProperty("message"));
}
Console.WriteLine("bye");
tx.success();
}
finally
{
   tx.finish();
   graphDb.shutdown();
}
Console.ReadLine();
}

 

The Java Zone is brought to you in partnership with AppDynamics. AppDynamics helps you gain the fundamentals behind application performance, and implement best practices so you can proactively analyze and act on performance problems as they arise, and more specifically with your Java applications. Start a Free Trial.

Topics:

Published at DZone with permission of Taylor Cowan , DZone MVB .

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}