Como implantar um aplicativo da Primavera para um servidor de produção?

votos
2

Eu tenho um aplicativo Spring MVC construída em Eclipse que eu estou tentando implantar como uma guerra (para GlassFish). Eu tenho uma classe de aplicativo que se parece com isso:

package com.jp5.rest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Service;

@Service
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    public static void init() {
        SpringApplication.run(Application.class);
    }

}

Edit: Eu estou chegando perto. O arquivo de guerra agora implanta. Mas, eu não posso chegar a qualquer um dos pontos finais de serviços web (todos eles retornar 404s) Agora, eu tenho um web.xml:

<?xml version=1.0 encoding=ISO-8859-1?>
<web-app xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns=http://java.sun.com/xml/ns/javaee xmlns:web=http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd xsi:schemaLocation=http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd version=3.0>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/application-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

E um aplicativo de context.xml assim:

<?xml version=1.0 encoding=UTF-8?>
<beans xmlns=http://www.springframework.org/schema/beans
    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
    xmlns:context=http://www.springframework.org/schema/context
    xsi:schemaLocation=http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd>  

    <bean id=application class=com.jp5.rest.Application
        init-method=init >
        </bean>


    <context:component-scan base-package=com.jp5.rest/>       
</beans>

O controlador é algo como isto:

package com.jp5.rest;
@ComponentScan
@EnableAutoConfiguration
@Controller
@RequestMapping(/jp5/rest/message)
public class MessageRestService
{
   @RequestMapping(method=RequestMethod.PUT, value=/test)
   public @ResponseBody testResult test()
   {
       return new testResult(true, test);
   }
}

Editar 2 Agradecimentos para os ponteiros. A solução a partir daqui: http://spring.io/guides/gs/convert-jar-to-war/ foi adicionar uma classe como este. Eu não testei ainda, mas, penso que este pode tomar o lugar do web.xml:

package com.jp5.rest;


import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.SpringBootServletInitializer;

public class Jp5RestXML extends SpringBootServletInitializer {

    @Override
    protected void configure(SpringApplicationBuilder application) {
        application.sources(Application.class);
    }

}

obrigado

Publicado 15/11/2013 em 03:20
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Baseado na embalagem, eu assumo esta é uma aplicação web, em que um main(...)método não faria sentido. Em vez disso, Applicationdeve ser inicializada em seu configuração do Spring.

Se você precisar fazer referência a ela em qualquer outro lugar, defini-lo como um feijão em sua configuração do Spring:

<bean id="application" class="somepackage.Application" init-method="init"/>

Caso contrário, se você só precisa executar algumas coisas inicialização de uma só vez na inicialização, você pode anotar a classe com @Serviceou @Componente incluir a component-scandirectiva na sua configuração do Spring como segue:

<context:component-scan base-package="somepackage"/>

A mola é simplesmente uma inversão de controle (COI) recipiente que corre dentro do âmbito da aplicação da web e não requer quaisquer práticas de implantação especiais. Assim, desde que as bibliotecas da mola aplicáveis ​​estão disponíveis para a aplicação Web (no caminho do carregador de classe comum Tomcat, ou em conjunto com a aplicação Web), que pode ser implementado como qualquer outra aplicação J2EE web.

Mola estereótipo anotação Referência

Edit: Se isto é para uma API REST, a biblioteca que você está usando deve fornecer uma implementação Servlet que você pode adicionar ao seu web.xml .

Por exemplo, se você estiver usando o framework Restlet, a definição servlet ficaria assim:

<servlet>
    <servlet-name>RestletServlet</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>somepackage.RESTApplication</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>RestletServlet</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

Substituir somepackage.RESTApplicationcom o seuorg.restlet.Application implementação.

Respondeu 15/11/2013 em 03:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more