2013-02-02 2 views
0

J'essaie de démarrer une route Camel sur GAE et je cours dans un mur de briques après le prochain. J'ai d'abord essayé une route qui ressemblait à ceci:Exécution Route Camel sur Google App Engine

from("direct:start") 
    .process(new Processor() { 
     @Override 
     public void process(Exchange exchange) { 
      logger.info("I made it!"); 
     } 
    }) 
    .to("direct:end"); 

Mais cela ne fait rien. Étant nouveau à à la fois Camel et GAE, je soupçonne que c'est parce que le composant direct n'agit pas en tant que consommateur pour le début d'un itinéraire. Alors j'ai essayé le coup d'envoi d'une minuterie:

from("timer://runOnce?repeatCount=1") 
    .process(new Processor() { 
     @Override 
     public void process(Exchange exchange) { 
      logger.info("I made it!"); 
     } 
    }) 
    .to("direct:end"); 

seulement pour obtenir une erreur désagréable de GAE:

Error: access denied (java.lang.RuntimePermission modifyThreadGroup)

Et il se trouve que vous ne pouvez pas créer de nouvelles instances Thread sur GAE, et c'est exactement ce que fait le composant Timer.

Alors j'ai essayé coups de pied la route avec un haricot:

public class DummyBean { 
    public void kickoffRoute() { return; } 
} 

// Inside the method that creates and starts the Camel route 
SimpleRegistry reg = new SimpleRegistry(); 
DummyBean bean = new DummyBean(); 
reg.put("dummy", bean); 

CamelContext camel = new DefaultCamelContext(reg); 
camel.disableJMX(); 

// Inside my RouteBuilder 
from("bean:dummy") 
    .process(new Processor() { 
     @Override 
     public void process(Exchange exchange) { 
      logger.info("I made it!"); 
     } 
    }) 
    .to("direct:end"); 

j'ai couru ce, seulement pour obtenir la même erreur « accès refusé » à partir avant le Timer.

Tout ce que je suis en train de faire est le coup d'envoi d'une route à l'intérieur GAE afin que je puisse commencer à se familiariser avec les deux technologies (Camel & GAE). Mais pour la vie de moi, je n'arrive pas à comprendre comment faire ça - chaque composant de Camel semble créer des threads, qui sont illégaux sur GAE! Je demande donc:

  1. Comment vous le coup d'envoi, même une route (un producteur initial - Timer ou autre) sur GAE? Je vois qu'il y a un composant Camel-GAE, et je suis prêt à lire et apprendre comment l'utiliser, de sorte que je puisse avoir des routes commençant par, par exemple, un point de terminaison ghttp:///startRoute, mais je commence vraiment juste ici et j'espère qu'un composant/point de terminaison plus facile fonctionnera avec.
  2. Si les deux composants Timer et Bean créent des threads, ce qui est interdit sur GAE, j'ai une sensation de mal dans l'estomac que la plupart/tous les composants de Camel sont interdits sur GAE. Est-ce le cas?!?! Si oui, comment construisez-vous routes utiles/significatives sur GAE? Ou y a-t-il un "truc" GAE pour faire tourner Camel et créer des discussions? Par exemple, je sais que les backends GAE ne subissent pas les mêmes restrictions de threading que les instances frontend, etc.

Merci d'avance!

Répondre

0

Camel est conçu pour fonctionner sur les environnements Java en utilisant Java SE 6/7 avec tout ce que cela implique en matière d'accès du système de fichiers, création de threads, les possibilités d'ouvrir les ports etc.

Google App Engine a, comme vous avez réalisé, plusieurs restrictions. Cela ne rend pas Camel inutilisable du tout. Vous pouvez utiliser beaucoup de fonctions de routage, de points de terminaison de producteurs (.to (..)), de transformations, etc.

En fait, dans les serveurs d'application Java EE, il existe des restrictions similaires, mais cela n'empêche pas l'utilisation. de chameau.

Si vous êtes vraiment prêt pour cela, et que vous avez besoin de tout faire à l'intérieur de GAE, il est peut-être possible de faire jack dans les modèles enfichables Camels enfichables dans GAE.

Disclaimer: Je ne l'ai jamais utilisé les tâches GAE, mais il y a quelques documentations ici

https://developers.google.com/appengine/docs/java/taskqueue/ http://camel.apache.org/threading-model.html

Vous pouvez aussi essayer de lancer les événements par tout élément que vous avez dans GAE et il suffit d'utiliser un producteur modèle pour lancer une route Camel.