1

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
    user1.HtmlProcessor.login (HtmlProcessor.java:10) で
    sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
    sun.reflect.NativeMethodAccessorImpl.invoke (不明なソース) で
    sun.reflect.DelegatingMethodAccessorImpl.invoke (不明なソース) で
    java.lang.reflect.Method.invoke (不明なソース) で
    org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:341) で
...
4

1 に答える 1

1

META-INF/services/org/apache/camel/ に TypeConverter という名前のファイルがあり、すべての JAR からのデータとマージする必要があります。このuber JARを実行すると、TypeConverterファイルが最後のファイルになる可能性があるため、データが失われると確信しています。

Camel でこの FAQ を参照してください: http://camel.apache.org/how-do-i-use-a-big-uber-jar.html

于 2013-01-30T17:28:24.107 に答える