2014-12-20 3 views
6

Ich habe eine sehr einfache Spring-Boot-Anwendung, die ich auf Jboss EAP bereitstellen möchte. Hier ist meine einfache Anwendung Klasse:SpringBoot-Anwendung auf Jboss EAP, Servlet-Kontext nicht loded

@SpringBootApplication 

public class MayurApplication extends SpringBootServletInitializer{ 

    public static void main(String[] args) { 
     SpringApplication.run(MayurApplication.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(applicationClass); 
    } 

    private static Class<MayurApplication> applicationClass = MayurApplication.class; 
} 

@RestController 
class GreetingController { 

    @RequestMapping("/hello/{name}") 
    String hello(@PathVariable String name) { 
     return "Hello, " + name + "!"; 
    } 
} 

und meine pom.xml ist auch sehr einfach. Wenn ich diese Anwendung auf Tomcat ausführe, verwende ich den eingebetteten Tomcat, der mit Spring Boot geliefert wird. Mit nur einem Klick funktioniert alles wie Charme. Ich kann auf http://localhost:8080/demo/hello/World zugreifen und es funktioniert auch.

Jetzt habe ich versucht, es Jboss EAP kompatible Krieg machen, deaktivierte ich den Tomcat durch Ausschließen von Spring-Boot-Starter-Web, und konvertieren Sie es in ein Kriegsprojekt. (wie von Artikel http://spring.io/blog/2014/03/07/deploying-spring-boot-applications vorgeschlagen).

Ich habe auch:

<dependency> 
        <groupId>javax.servlet</groupId> 
        <artifactId>javax.servlet-api</artifactId> 
       <scope>provided</scope> 
      </dependency>, 

wie es beschwert wurde.

Jetzt nach all dem, kompiliert es gut und schafft auch einen Krieg. Wenn ich diesen Krieg in die jboss-Bereitstellung kopiert habe, kann ich sehen, dass er erfolgreich auf der Konsole bereitgestellt wurde. Aber der Rest api http://localhost:8080/demo/hello/World einfach nicht und ständig wirft auf Browser-Fehler funktioniert:

JBWEB000068: message /demo/hello/World 
JBWEB000069: description JBWEB000124: The requested resource is not available. 

Was mache ich falsch?

Antwort

2

Sie erwähnt JBoss 6 in Sie Tags. Basierend auf meiner Erfahrung Spring Boot Autoconfigure und JBoss 6 (speziell) ist ein No-Go. Wenn Hot Deploy aktiviert ist oder eine andere Bedingung vorliegt, führt JBoss VFS eine aggressive Überprüfung aller Jars in der WAR-Datei durch. Sobald es beginnt, die Klassen im Autokonfigurationsmodul zu scannen, wird es aufgrund eines Fehlers ähnlich wie ClassNotFoundException abgebrochen. Wenn Sie Autoconfigure verwenden, könnte es eine Lösung sein, die Federmodule in der lib des Containers zu platzieren. Aber das würde die Bereitstellung unhandlich machen. Ich habe dieses Verhalten nicht auf JBoss 7 noch Wildfly 8.

+1

Eigentlich - ich bin jetzt in der Lage, mehrere Spring Boot-Anwendungen mit JBoss 6 erfolgreich bereitzustellen. Der Schlüssel zu dieser Leistung war mit der jboss-scanning.xml im Jar bereitgestellt JBoss zu sagen, nicht versuchen, jede Klasse in Autoconfigure lib laden . Es gibt noch einige andere Verbesserungen, die ich geschrieben habe, aber die jboss-scanning.xml war der Schlüssel. – juice

14

diese Gefunden in Spring Boot Reference Guide, die unter Zeile hinzufügen in application.properties Datei

server.servlet-path=/* 

dies in jBoss EAP getestet 6.2 und hat gut funktioniert.

+1

Das hat für uns funktioniert. – jax

+1

das hat funktioniert. Ich denke, die Erklärung ist in der richtig markierten Antwort. – ravindrab

Verwandte Themen