2012-02-04 19 views
7

JavaアプリケーションからClojure REPLを起動し、いくつかの「事前定義済みの変数」を提供するにはどうすればよいですか(私はClojure初心者です。実際に私はすでに偶然にも動作させようとしました... clojure.mainで始まり、RT.var()の追加呼び出しを追加しました。これは正しい方法ですか?JavaからClojure REPLを実行し、カスタムコンテキストを提供

import clojure.lang.Symbol; 
import clojure.lang.Var; 
import clojure.lang.RT; 

public class MyClojure { 

    final static private Symbol CLOJURE_MAIN = Symbol.intern("clojure.main"); 
    final static private Var REQUIRE = RT.var("clojure.core", "require"); 
    final static private Var MAIN = RT.var("clojure.main", "main"); 

    // Provide some context, this is my custimisation... 
    @SuppressWarnings("unused") 
    final static private Var Test = RT.var("testme", "myvar", "This is the initial value"); 

    public static void main(String[] args) throws Exception { 
     REQUIRE.invoke(CLOJURE_MAIN); 
     MAIN.applyTo(RT.seq(args)); 
    } 
} 

EDIT:私のアプリケーションはWebアプリケーションではありません。基本的にpojoデータモデルを表示/編集するスタンドアロンのデスクトップアプリケーションです。私は今、実行中のアプリケーションからデータモデルをClojure replに公開するサポートを追加したいと考えています。私は、元のアプリケーションとreplの両方のデータモデルを変更/検査することができます。あなたはclojure.contrib/server-socket's create-repl-server function探している

答えて

5

:ここ

は例からの抜粋です。

(use '[clojure.contrib.server-socket :only [create-repl-server]]) 
(gen-class 
    :name "org.project.ReplServer" 
    :implements [javax.servlet.ServletContextListener]) 
(defn -contextInitialized [this e] 
    (.start (Thread. (partial create-repl-server 11111)))) 

はたくさんのアイデアは本当にthat'sもしわからないthis SO question

+0

にもあります私が探しているもの。あなたがそれを言うなら、あなたは正しいかもしれませんが、上の私の編集を見てください。 – zedoo

+0

それよりも簡単です。 'create-repl-server 11111'を呼び出してlocalhostに接続するだけです。あなたはあなたのreplを開始するWebサーバーを取得しようとすることについて心配する必要はありません、あなたはそれを直接行うことができます。 –

+0

しかし、私は私のJavaの "ホスト"アプリケーションの中から起動したいと思う。 – zedoo

関連する問題