java - Camel 和 Google App Engine 没有 Spring?

标签 java spring google-app-engine servlets apache-camel

所以我正在温习 Camel-GAE 组件,我发现的所有教程/代码示例似乎都表明您必须使用 Spring DSL (XML) 才能让 Camel 在 GAE 上运行。

这是因为 Camel-GAE 依赖于 Camel-Servlet,而我在 web.xml 中找到的用于配置 CamelServlet 的唯一代码示例涉及:

<web-app>
    <servlet>
        <servlet-name>CamelServlet</servlet-name>
        <display-name>Camel Http Transport Servlet</display-name>
        <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>appctx.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>CamelServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>

我真的不是 Spring 的忠实粉丝,并且更喜欢使用 GIN 或 Guice 之类的东西来完成我所有的 DI。 有没有办法在不使用 Spring 的情况下创建 Camel Servlet 并定义其 CamelContext 提前致谢。

更新 - 在 GAE 上使用 JNDI 注册表时出现的错误:

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.ourapp.server.servlets.CamelServlet.doGet(Unknown Source)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

最佳答案

web.xml 文件不需要使用 Spring。因此,那里没有依赖性要求。我只是认为创建camel-gae 时,示例和教程是Web 应用程序,因此使用Spring 上下文监听器引导Camel 更容易。不再需要:http://camel.apache.org/servlet-tomcat-no-spring-example.html

我认为我们应该调查一下这个问题,我记录了一张票:https://issues.apache.org/jira/browse/CAMEL-6030

当我升级camel-gae以使用较新的GAE版本时,我注意到它的spring依赖性。

关于java - Camel 和 Google App Engine 没有 Spring?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14661137/

相关文章:

google-app-engine - 如何将谷歌mapreduce参数传递给done_callback

java - Android - 将数据保存到我自己的数据服务器

android - 无法在 Eclipse 中创建 AppEngine 连接的 Android 项目?

java - Android:扩展 Linearlayout,但 RelativeLayout 也需要相同。重复代码不可避免?

Java HQL org.hsqldb.HsqlException : user lacks privilege or object not found

java - 使用 Lombok 和构造函数注入(inject) Spring 注入(inject) bean 为 null

java - 如何使用 @Query Spring JPA 注解执行查询

java - 使用缓冲阅读器读取没有换行符的文件

java - Java中泛型类型序列化的HashMap之HashMap

java - 没有可用的事务性 EntityManager 且异常 InvalidDataAccessApiUsageException