2014-12-20 14 views
6

Ho un'applicazione di avvio a molla molto semplice che desidero distribuire a Jboss EAP. Ecco la mia semplice classe di applicazione:springBoot application su Jboss EAP, contesto servlet non bloccato

@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 + "!"; 
    } 
} 

e il mio pom.xml è anche molto semplice. Quando eseguo questa applicazione su Tomcat, utilizzo il Tomcat incorporato che viene fornito con l'avvio a molla. Tutto funziona come fascino in un solo clic. Posso accedere a http://localhost:8080/demo/hello/World e funziona anche.

Ora ho provato a renderlo compatibile con JBoss EAP, ho disabilitato Tomcat escludendo da spring-boot-starter-web e convertendolo in un progetto di guerra. (come suggerito dall'articolo http://spring.io/blog/2014/03/07/deploying-spring-boot-applications).

ho anche aggiunto:

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

come si lamentava.

Ora, dopo tutto questo, ricompila bene e crea anche una guerra. Quando ho copiato questa guerra per la distribuzione di jboss, posso vederlo distribuito correttamente su console. Ma l'API REST http://localhost:8080/demo/hello/World semplicemente non funziona e costantemente tiri errore del browser:

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

Che cosa sto facendo di sbagliato?

risposta

2

Hai menzionato JBoss 6 nei tuoi tag. Basato sulla mia esperienza Spring Boot Configurazione automatica e JBoss 6 (in particolare) è un no-go. Se Hot Deploy è attivato o forse qualche altra condizione, JBoss VFS esegue una scansione aggressiva di tutti i file jar nel file war. Una volta che inizia a scansionare le classi nel modulo di autoconfigurazione, verrà interrotto a causa di un errore simile a ClassNotFoundException. Se si utilizza la configurazione automatica, una soluzione potrebbe essere quella di posizionare i moduli molla nel lib del contenitore. Ma ciò renderebbe la distribuzione ingombrante. Non ho visto questo comportamento su JBoss 7 né wildfly 8.

+1

In realtà, ora sono in grado di distribuire più applicazioni Spring Boot con JBoss 6. La chiave per questo risultato è stata l'utilizzo del jboss-scanning.xml distribuito nel jar per dire a JBoss di non provare e caricare ogni classe in Autoconfigure lib . Ci sono anche altri ritocchi che ho intenzione di scrivere ma jboss-scanning.xml era la chiave. – juice

14

trovato questo in Spring Boot Reference Guide, aggiungere la riga di seguito in un file application.properties

server.servlet-path=/* 

testato questo in JBoss EAP 6.2 e funzionava bene.

+1

Questo ha funzionato per noi. – jax

+1

ha funzionato. Penso che la spiegazione sia nella risposta correttamente contrassegnata. – ravindrab