5

GoogleAppEngineで速度フレームワークを使用しようとしています。mainメソッドを使って小さなプログラムを作成し、ローカルで実行してみました。次の例外が発生します:

スレッド「メイン」の例外org.apache.velocity.exception.VelocityException:org.apache.velocity.runtime.log.ServletLogChuteのインスタンスを現在のランタイム構成で初期化できませんでした。
  org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:206)で
  org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:255)で
  org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:795)で
  org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:250)で
  org.apache.velocity.app.VelocityEngine.init(VelocityEngine.java:107)で
  Main.main(Main.java:10)で
原因:java.lang.UnsupportedOperationException:アプリケーション属性からServletContextを取得できませんでした
  org.apache.velocity.runtime.log.ServletLogChute.init(ServletLogChute.java:73)で
  org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:157)で
  ...5もっと

これが私のプログラムです:

import java.io.StringWriter;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

public class Main {
 public static void main(String[] args) throws Exception{
        /*  first, get and initialize an engine  */
        VelocityEngine ve = new VelocityEngine();
        ve.init();
        /*  next, get the Template  */
        Template t = ve.getTemplate( "helloworld.vm" );
        /*  create a context and add data */
        VelocityContext context = new VelocityContext();
        context.put("name", "World");
        /* now render the template into a StringWriter */
        StringWriter writer = new StringWriter();
        t.merge( context, writer );
        /* show the World */
        System.out.println( writer.toString() );    
 }
}

同じプログラムは、通常のEclipseプロジェクトで完全に正常に実行されます。何が問題なのか?

4

3 に答える 3

9

ServletLogChuteを必要とするクラスのみのようですがServletContext、Velocity自体はサーブレット環境から完全にスタンドアロンで動作できます。

明らかにservltログがないので、呼び出す前に次を追加してみてくださいve.init()

ve.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogChute");

...または、特定のログ要件がある場合は、ここを確認してください

于 2010-01-06T16:25:57.400 に答える
2

Velocityは、GAE/Jで実行するように決定的に作成できます。

テンプレートエンジンとしてVelocityを使用しているApacheClickFrameworkは、GAE/Jで問題なく動作します。

もちろん、 GAE / Jは制約環境であるため、通常とは異なる構成が必要ですが、それでも機能します。

于 2010-07-01T08:17:26.500 に答える
2

これは世界と物語の終わりではないかもしれませんが、GAE互換ソフトウェアのリストがあります:

http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine

それにVelocityは見つかりませんでした。テストしてリストに含めるのを忘れた可能性もありますが、VelocityがGAEとうまく連携しないAPIを提供する可能性もあります。

于 2010-01-06T15:50:32.213 に答える