当前位置: 首页 > 知识库问答 >
问题:

Camel Jetty会话在部署到JAR时停止工作

壤驷安和
2023-03-14

我有一个项目,如果我把它部署在一个jar之外,它就能完美地工作。但是,当它作为JAR部署时,它无法获得会话。以下是这些工件:

main.java:

public class Main {
    public static void main(String[] args) throws Exception{
        JndiContext registry=new JndiContext();

        CamelContext context=new DefaultCamelContext(registry);
        context.addRoutes(new RouteBuilder() {      
            @Override
            public void configure() {
                try{
                    from("jetty:http://0.0.0.0:7700?matchOnUriPrefix=true&sessionSupport=true").bean(HtmlProcessor.class);
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
        });

        context.start();
        Thread.sleep(1000000);
        context.stop();

    }
}

HTMLProcessor.java:

public class HtmlProcessor {
    public String login(Exchange exchange){
        HttpSession session=exchange.getIn(HttpServletRequest.class).getSession();
        Integer count=(Integer)session.getAttribute("count");
        if (count==null) count=0;
        count++;
        session.setAttribute("count", count);

        StringBuilder sb=new StringBuilder();
        sb.append("<html><body><form>");
        sb.append(count);
        sb.append("<BR><input type=text name=username></form></body></html>");
        return sb.toString();
    }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>user1</groupId>
  <artifactId>jettysession</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <properties>
        <camel.version>2.10.3</camel.version>
  </properties>
  <dependencies>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jetty</artifactId>
            <version>${camel.version}</version>
        </dependency>

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-servlet</artifactId>
            <version>1.13</version>
        </dependency>

  </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>assemble</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <Bundle-ClassPath>.</Bundle-ClassPath>
                            <Main-Class>user1.Main</Main-Class>
                        </manifestEntries>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

以下是异常中有意义的部分:

java.lang.NullPointerException
    at user1.HtmlProcessor.login(HtmlProcessor.java:10)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:341)
...

共有1个答案

许奇
2023-03-14

meta-inf/services/org/apache/camel/中有一个名为TypeConverter的文件,您需要将该文件与来自所有JAR的数据合并。当你做这个uber JAR时,我非常肯定TypeConverter文件可能是最后一个文件,因此你会丢失数据。

请参阅以下常见问题解答:camel:http://camel.apache.org/how-do-i-use-a-big-uber-jar.html

 类似资料:
  • 我有一个在dev环境下运行的grails应用程序,我毫无问题地完成了这场战争 在服务器中,我使用“sudo service tomcat7 stop”命令停止服务,并将war文件放入服务器文件夹“/var/lib/tomcat7/webapps”,然后使用命令“sudo service tomcat7 start”再次启动服务器。为了检查服务器的状态,我运行“sudo service tomcat

  • 当战争部署失败时,我想阻止Tomcat。是否有一些钩子或监听器可以用于此? 我知道,通常情况下,当部署失败时不会让容器停止。在我的例子中,我想使用Tomcat实现一个快速失败的错误模型,因为目前没有机会用带有嵌入式Servlet引擎(例如,Spring-Boot)的胖jar替换WAR。

  • 我想做的是允许我的应用程序在后台音频应用程序播放音频时使用说话。当我的应用程序正在讲话时,我希望后台应用程序的音频“变暗”,然后在我的应用程序结束讲话后返回其原始音量。 在我的类中,我初始化我设置的像这样: 每当我想说一个新的话语时,我都会做以下事情。我遵循了AVSpeechSynthesizer问题的建议,有解决办法吗?每次创建一个新的AVSpeechSynthesizer,以确保总是收到取消(

  • 我的名为“TestProject”的Java/Maven项目与我的jenkins and nexus repo挂钩: 我的pom.xml看起来是: 正如预期的那样,jenkins将工件上传到Nexus,看看jenkins build的控制台输出,如下所示: 问题是: 如果我在pom.xml中指定的版本是

  • 我在IE上的css悬停有问题。 简化;我基本上有一个容器div,它将在悬停时显示一个小的div,里面有一些标记中选择一个,:hover由于某种原因将不再工作,div将消失。 在chrome/firefox等中尝试此示例以查看所需的结果&然后在IE11中再试一次以查看问题所在。 null null

  • 我想从ftp服务器上读取文件,然后将其保存到本地存储库中并从服务器上删除,运行读取文件的作业,在DB上找到一条记录,更改一个参数并保存。 Spring集成配置: Spring批处理配置: 我会很高兴得到任何帮助。