2014-05-09 2 views
5

프로그래밍 방식으로 WAR/EAR을 중지 할 수있는 방법이 있습니까?WAR/EAR을 프로그래밍 방식으로 종료하는 방법

시작/구성 프로세스 중에 문제가 발생하면 응용 프로그램 배포를 중단해야합니다.

우리의 애플리케이션은 JBoss AS 7 및 Websphere 7/8에서 실행되어야하기 때문에 가능하면 솔루션은 크로스 서버와 호환되어야합니다.

현재 응용 프로그램이 JBoss에서 시작되지 않고 배포 중에 알 수없는 오류가 발생하며 해당 데스 위치에서 로더가 사라지지 않습니다. 내 ServerHttpServlet를 파괴하고있어하지만, 내가 저지 서블릿을 파괴 할 수없는있어 보인다 구성

에서 몇 가지 오류를 시작하지만 은 웹 스피어에 응용 프로그램이 시작됩니다. 이 구현하는 방법에 대한 아이디어?

web.xml의

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name>Server</display-name> 
    <servlet> 
     <description></description> 
     <display-name>ServerHttpServlet</display-name> 
     <servlet-name>ServerHttpServlet</servlet-name> 
     <servlet-class>com.transactionservice.service.ServerHttpServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet> 
     <description></description> 
     <servlet-name>Jersey Servlet</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <description></description> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>callers.REST_Application</param-value> 
     </init-param> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey Servlet</servlet-name> 
     <url-pattern>/jaxrs/*</url-pattern>  
    </servlet-mapping> 

    <listener> 
     <listener-class>com.transactionservice.service.ServerServletContext</listener-class> 
    </listener> 
</web-app> 

callers.REST_Application

package callers; 

import java.util.HashSet; 
import java.util.Set; 
import javax.ws.rs.core.Application; 
import com.exictos.callers.DEBUG_CONFIG; 
import com.exictos.log4j.LoggerCommon; 

public class REST_Application extends Application 
{ 
    private static final LoggerCommon logger = new LoggerCommon(REST_Application.class); 

    public REST_Application() 
    { 
    } 

    @Override 
    public Set<Class<?>> getClasses() 
    { 
     Set<Class<?>> classes = null; 
     try 
     { 
      // The available REST services 
      classes = new HashSet<Class<?>>(); 

      classes.add(API_CALL_REST.class); 
      classes.add(API_CALL_REST_ENC.class); 
      classes.add(API_CALL_CONFIG.class); 
      classes.add(API_CALL_ABOUT.class); 
      classes.add(DEBUG_CONFIG.class); 
     } 
     catch(Exception e) 
     { 
      logger.error("", e); 
     } 

     return classes; 
    } 
} 

com.transactionservice.service.ServerServletContext

package com.transactionservice.service; 

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

import com.exictos.exception.ApplicationLoadingException; 

public class ServerServletContext implements ServletContextListener 
{ 
    @Override 
    public void contextInitialized(ServletContextEvent aServletContext) 
    { 
     //THIS IS JUST AS TEST EXAMPLE TO SEE IF WOULD WORK 
     throw new RuntimeException(e); 
    } 


    @Override 
    public void contextDestroyed(ServletContextEvent aServletContext) 
    { 
     System.out.println("------------------"); 
    } 
} 
+0

응용 프로그램 종료가 의미하는 바를 약간 명확하게해야합니다. 관리 도구에서 중지 된 것으로 표시 (하드)하거나 요청하지 않습니다 (ServletFilter에서는 간단 함). 그러나 나에게는 배포 문제를 인식하는 것이 여전히 어려워 보인다. 특히 신뢰성있게 * 모든 것을 인식하고 싶다면 –

+0

JBoss에서 현재 일어나고있는 관리 도구에서 이상적으로 정지 된 것으로 표시되어야합니다. –

답변

0

JSR-88 - Application Deployment을 살펴보십시오. A WebSphere 빠른 시작 can be found here. Wildfly removed JSR-88 support에 유의하십시오.

프로그래밍 방식으로 배포를 중지하면 with cargo을 수행 할 수도 있습니다.

당신이하고 싶은 것이 확실치 않지만 응용 프로그램을 배포 한 사람이나 프로세스가 배포가 제대로 작동하는지 확인해야합니다. 그렇지 않은 경우 동일한 방법으로 배포를 취소해야합니다.

0

일반적으로 대부분의 서버에서 문제가 발생하면 배포가 롤백됩니다. 그러나 여전히 init 코드에서 system.exit 문을 사용할 수 있는지 확인하려는 경우.

관련 문제