Camel 2.10.3 と GAE SDK 1.7.1 を使用していることを前置きしておく必要があります。
次のコードを にパッケージ化しCamelServlet
、WAR を GAE のローカル開発アプリ サーバー インスタンスにデプロイしました。
public class CamelServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
RouteBuilder routeBuilder = new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").process(new Processor() {
@Override
public void process(Exchange arg0) throws Exception {
logger.warning("I am inside a Camel route!");
}
}).to("direct:end");
}
};
CamelContext camelContext = new DefaultCamelContext();
try {
camelContext.addRoutes(routeBuilder);
camelContext.start();
Thread.sleep(10000);
camelContext.stop();
}
catch(Exception e) {
logger.warning("Error: " + e.getMessage());
}
}
}
http://localhost:8888/camel
(CamelServlet
マップされている場所) に移動すると、スタック トレースが表示されます。
java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory is a restricted class. Please see the Google App Engine developer's guide for more details.
at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
at org.apache.camel.management.DefaultManagementAgent.findOrCreateMBeanServer(DefaultManagementAgent.java:364)
at org.apache.camel.management.DefaultManagementAgent.createMBeanServer(DefaultManagementAgent.java:348)
at org.apache.camel.management.DefaultManagementAgent.doStart(DefaultManagementAgent.java:253)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
at org.apache.camel.management.DefaultManagementStrategy.start(DefaultManagementStrategy.java:209)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62)
at org.apache.camel.management.ManagementStrategyFactory.create(ManagementStrategyFactory.java:40)
at org.apache.camel.impl.DefaultCamelContext.createManagementStrategy(DefaultCamelContext.java:2490)
at org.apache.camel.impl.DefaultCamelContext.getManagementStrategy(DefaultCamelContext.java:2310)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1499)
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1444)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1412)
at com.myapp.server.servlets.CamelServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
限定?!?! Camel ルート/バスは GAE で実行されるべきではありませんか?!? Camel には GAE コンポーネント (Camel-GAE) があります。これは、実際に Camel を GAE で実行できる検証の形式だと思いました。しかし今、私はそれがGAEエンドポイントから消費するためのものであり、実際にGAEで実行されることを意図していないことを心配しています...
そのため、GAE で Camel ルートを実行/開始することができないか、DefaultCamelContext
GAE 制限クラスに違反しないようにルート オブジェクト ( など) を構成する必要がある特別な方法があります。または、まったく異なる何かが起こっています。何かご意見は?前もって感謝します!
アップデート
経由で JMX をcamelContext.disableJMX();
無効にすると、新しい (非常によく似た) 例外が発生します。
java.lang.NoClassDefFoundError: javax.naming.InitialContext is a restricted class. Please see the Google App Engine developer's guide for more details.
at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
at org.apache.camel.impl.JndiRegistry.createContext(JndiRegistry.java:103)
at org.apache.camel.impl.JndiRegistry.getContext(JndiRegistry.java:92)
at org.apache.camel.impl.JndiRegistry.lookup(JndiRegistry.java:65)
at org.apache.camel.impl.JndiRegistry.lookup(JndiRegistry.java:47)
at org.apache.camel.impl.PropertyPlaceholderDelegateRegistry.lookup(PropertyPlaceholderDelegateRegistry.java:62)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1557)
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1444)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1412)
at com.myapp.server.servlets.CamelServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)