2010-01-06 9 views
5

J'essaie d'utiliser le framework de vitesse sur google app engine. J'ai écrit un petit programme avec une méthode principale et essayé de l'exécuter localement. je reçois l'exception suivante:framework de vitesse sur google app engine

 
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 

Voici mon programme:

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

le même programme fonctionne parfaitement bien sur un projet d'éclipse normale. quel pourrait être le problème?

Répondre

9

Semble être uniquement la classe ServletLogChute qui nécessite le ServletContext, Velocity lui-même peut fonctionner entièrement autonome à partir d'un environnement Servlet.

Puisque vous ne évidemment pas un journal de servelt, essayez d'ajouter ce qui suit avant d'appeler ve.init():

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

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

2

Cela peut ne pas être la fin du monde et l'histoire, mais il y a une liste des logiciels compatibles GAE:

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

et je ne trouve pas la vitesse en elle. Il est possible que les gens aient juste oublié de tester et de l'inclure dans la liste, mais il est également possible que Velocity apporte une API qui ne fonctionne pas bien avec GAE.

+2

merci carl..ils avaient juste manqué ... son fonctionnement parfaitement bien sur l'application moteur – Aadith

+0

Bon. Avez-vous dû résoudre le problème de journalisation que j'ai lu, ou avez-vous réussi à le faire fonctionner comme il était? –

+0

En effet, je serais intéressé de savoir quelle était la solution pour référence. –

2

La vitesse peut être définitivement exécutée sur GAE/J. Le framework qui utilise Velocity comme moteur de gabarit fonctionne sans problèmes avec GAE/J.

Il faut bien sûr un different configuration que d'habitude puisque GAE/J est un environnement de contrainte, mais néanmoins, cela fonctionne.