Welcome to JynxWhat is Jynx?Jynx is a Jython library used to improve integration of Java with Python in three important ways: - Dynamic creation, compilation and loading of Java classes.
- Extraction of Java proxy classes from Python classes.
- Support of compile time Java features like annotations from within Jython.
Those features enable the utilization of modern annotation based Java frameworks from Jython. News2009-09-04 Jynx 0.4 released - Hibernate support
- Embedded Java parser
- bean_property decorator
- improved class-file detection heuristics in dynamic compilation
2009-08-12 Jynx 0.3 released - No enforced disk dump for dynamically compiled classes.
2009-07-27 Jynx 0.2 released 2009-07-10 Jynx 0.1 released ExamplesThe following Python script creates a Java class with a @Test annotation and runs a test inside of the JUnit 4 framework: import jynx
from java.lang import Object
from jynx.lib.junit import*
from jynx.jannotations import*
@JavaClass
class JavaCompilerTest(Object):
@Test
def simpleClassTest(self):
source = '''
import java.util.Random;
class A {
int getInt()
{
return new Random().nextInt(2);
}
}
'''
A = JavaCompiler().createClass("A", source)
for i in range(100):
n = A().getInt()
assertTrue(isinstance(n, int))
assertTrue(0<=n<=1)
if __name__ == '__main__':
runClasses(JavaCompilerTest)Quite complex frameworks like Hibernate are supported as well. The following code defines two entity beans with a one-to-many relationship. Sessions and transactions are wrapped into ContextManagers for with-statements: import jynx
from java.lang import Object
from jynx.lib.junit import*
from jynx.jannotations import*
@Entity
class S(Serializable):
@Id
@GeneratedValue
@bean_property("int")
def id(_):_
@bean_property("String")
def name(self): pass
@Entity
class T(Serializable):
@Id
@GeneratedValue
@bean_property(int)
def id(self):pass
@bean_property("String")
def name(self): pass
@OneToMany
@bean_property("Set<S>")
def s(self):pass
@JavaClass
class OneToManyTest(Object):
@Test
def testUnidirectionalDefault(self):
t = T()
t.name = "T"
s1 = S()
s1.name = "S1"
s2 = S()
s2.name = "S2"
t.s = set()
with hn_session(S, T) as session:
with hn_transact(session):
session.persist( t )
session.persist( s1 )
session.persist( s2 )
t.s.add( s1 )
t.s.add( s2 )
with hn_session(S, T) as session:
tx = session.beginTransaction()
t = session.get( T, t.id )
assertEquals( 2, t.s.size() )
tx.rollback();
runClasses(OneToManyTest)
|