2014-04-19 5 views
0

자이 썬 스크립트는 자바로 작성한 일부 코드를 호출한다. (자바 멀티 쓰레딩이 편하기 때문에). 이제는 자바에서 자이 썬 메소드 중 하나를 호출해야한다는 것을 알게되었습니다 (그렇지 않으면 Java로 다시 작성해야 할 것입니다).Java에서 자이 썬 호출 (자이 썬 스크립트는 자바를 호출하고 자이 썬을 콜백해야한다.)

자이 썬에서 Java를 쉽게 구동 할 수 있으며 Java가 마스터이고 자이 썬이 슬레이브가되도록 설정하는 것도 간단하지만 호출 할 수 있도록 설정하는 가장 좋은 방법은 무엇인지 분명하지 않다. 서로. 작업이 첫 눈에 하드 보일 수 Chapter 10: Jython and Java Integration, : 일대일 오브젝트 팩토리, 느슨하게 결합 공장, 그리고 그것이 작동되도록하는 코드를 많이

은 공식 문서는 모두 이것에 대해 매우 긴 기사를 포함 .

어떤 간단한 솔루션도 제공에게이 또한 많은 세부에 가서 내가 찾은 다른 소스가 있지만 :

가 있기 때문에 자이 썬 인터프리터가 이미 실행 중이면 새로운 interp를 인스턴스화 할 필요없이 메소드를 호출 할 수있는 간단한 방법이 있어야한다. reter (위의 마지막 링크에서와 마찬가지로 Java가 Jython을 구동하는 경우 수행해야하는 것처럼). 실제로 그런 방법이 있습니까?

답변

0

This article은 간단한 해결책을 제시했으며 다음 예제가 효과가있었습니다. 자바 :

import org.python.core.PyObject; 

public class JythonFromJava { 
    public void callPO(PyObject po) { 
     po.__call__(); 
    } 
} 

로 컴파일 :

$ javac -classpath ".;C:\Programs\jython2_7b1\jython.jar" JythonFromJava.java 

자이 썬 : 그것을 실행

import JythonFromJava 

def method(): 
    print "METHOD called" 

j = JythonFromJava() 
j.callPO(method) 

:

$ jython jython_from_java_j.py 
METHOD called 

그래서 그 보인다는 모든 것을 필요한입니다. Jython 메소드에 대한 핸들을 Java에 콜백 (callback)의 형태로 보내야합니다.이 경우를 제외하고는 비동기 요청을위한 도구가 아니라 언어 간 요청을위한 도구입니다.


편집 : 나는 그 멀티 스레딩 우리 잎 어디 모르겠어요. 자이 썬 인터프리터가 자체적으로 동기화 된 액세스를 보장하기를 바랍니다.

+0

실제로 자이 썬은 CPython https : /보다 멀티 스레딩을 사용하는 것이 훨씬 좋습니다. /www.jeffknupp.com/blog/2013/06/30/pythons-hardest-problem-revisited 그렇기 때문에 해석은 각 스레드에서 개별적으로 발생하며 걱정할 필요가있는 유일한 사항은 일반적인 멀티 스레드 프로그래밍의 측면입니다. 또한 : http://www.jython.org/jythonbook/en/1.0/Concurrency.html 또한'list','dict'와'set'이 이미 동기화되었다고 말합니다. 그래서 걱정할 것이 하나 더 적습니다! –