2010-01-06 16 views
5

Estoy tratando de usar velocity framework en el motor de la aplicación google. Escribí un pequeño programa con un método principal y traté de ejecutarlo localmente. me sale el siguiente excepción:velocity framework en el motor de la aplicación de google

 
Exception in thread "main" org.apache.velocity.exception.VelocityException: Failed to initialize an instance of org.apache.velocity.runtime.log.ServletLogChute with the current runtime configuration. 
    at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:206) 
    at org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:255) 
    at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:795) 
    at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:250) 
    at org.apache.velocity.app.VelocityEngine.init(VelocityEngine.java:107) 
    at Main.main(Main.java:10) 
Caused by: java.lang.UnsupportedOperationException: Could not retrieve ServletContext from application attributes 
    at org.apache.velocity.runtime.log.ServletLogChute.init(ServletLogChute.java:73) 
    at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:157) 
    ... 5 more 

Aquí está mi programa:

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());  
} 
} 

el mismo programa se ejecuta perfectamente bien en un proyecto Eclipse normal. ¿Cual podría ser el problema?

Respuesta

9

Parece ser solo la clase ServletLogChute que requiere el ServletContext, Velocity en sí puede funcionar completamente independiente de un entorno Servlet.

Dado que es obvio que no tiene un registro servelt, trate de añadir lo siguiente antes de llamar ve.init():

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

... o check here if you have specific logging requirements.

2

esto puede no ser el fin del mundo y la historia, pero hay una lista de software compatible GAE:

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

y no he encontrado la velocidad en ella. Es posible que la gente simplemente se haya olvidado de probarlo e incluirlo en la lista, pero también es posible que Velocity traiga consigo una API que no funciona bien con GAE.

+2

gracias carl ... acababan de perderlo ... está funcionando perfectamente bien en el motor de aplicación – Aadith

+0

Bueno. ¿Tuvo que resolver el problema de registro sobre el que leí, o simplemente logró que funcionara como estaba? –

+0

De hecho, me gustaría saber cuál era la solución para referencia. –

2

La velocidad puede definirse definitivamente para funcionar en GAE/J.

Marco que usa Velocity como motor de plantillas, funciona sin problemas en GAE/J.

Necesita por supuesto un different configuration de lo habitual, ya que GAE/J es un entorno restrictivo, pero, no obstante, funciona.

Cuestiones relacionadas