2013-03-11 3 views
0

war 파일이 Jetty 서버에 배포되기 전에 매번 Java 코드를 실행해야합니다. 내 필요성은, 내가 새로운 데이터베이스를 정리하고 배포하기 전에 몇 가지 레코드를 추가하는 Java 코드를 실행해야 할 때마다 새로운 전쟁이 필요합니다.배포 전에 Java 프로그램을 실행하는 방법

응용 프로그램 시작시 작성하지만 배포가 진행될 때 한 번만 처리 할 수 ​​있습니다.

누구든지이 작업을 수행 할 수있는 방법을 제안 할 수 있습니까? 감사.

+1

타겟팅하려는 plaform을 언급하지 않았습니다. 예를 들어 리눅스라면 WAR를 RPM 패키지로 감쌀 수 있습니다. RPM (및 다른 패키지 설치 관리자)은 설치 전후에 스크립트를 실행할 수있는 기능을 제공합니다. 그것은 많은 노력과 같이 보일지도 모르지만, 일반적으로 설치 및 유지 보수의 용이성을 통해 다시 지불합니다. –

+0

@ MarkO'Connor 귀하의 의견에 감사드립니다. 대상은 Windows와 Linux 모두입니다. 일반적으로 우리는 폴더 릴리즈를 사용하고 변경이 발생할 때마다 WAR 파일 만 바꿉니다. – vels4j

답변

1

이 작업을 수행하는 방법은 ContextListener에서 코드를 호출하는 것이지만 새로운 WAR 파일을 배포 할 때 코드를 한 번만 실행하려면 WAR 파일에 플래그를 넣는 것입니다.

if(file is present){ 
    do something, call DB etc 
    delete(file) 
} 

하는 것입니다 또 다른 (어쩌면 청소기?) 방법 :

예를 들어, 당신은 그런 일을 할, 당신의 ContextListener의 코드에서 특정 이름으로 전쟁에서 빈 파일을 넣어 수 초기 값이 false 인 구성 등록 정보 파일에 다음을 입력하십시오.

initialDeploymentCodeExecuted=false 

그런 다음 전체 파일 대신이 등록 정보를 확인하십시오. false 인 경우 실행되는 코드에서 true로 변경하십시오.

+0

좋은 생각 pierre, 그건 이미 내 마음 속에 있었다. 배포주기에 추가하는 것과 같은 표준 방법을 찾고 있습니다. 보십시오 [여기에서] (http://wiki.eclipse.org/Jetty/Feature/Deployment_Manager). – vels4j

+0

글쎄, 내가 아는 한 JEE 표준 방법이 없다. "WebappLifecycleListener"또는 이와 비슷한 것이 유용 할 것입니다. 그리고 저는 Tomcat 사용자입니다. 따라서 특정 제트기 특정 방법에 대해서도 알지 못합니다. 행운을 빕니다 ! –

+0

가는 길. – vels4j

0

컨텍스트 리스너는 어떻습니까? contextInitialized() 방법에 db 정리 코드를 추가 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. ServletContext는 애플리케이션이 시작될 때마다 초기화되는 것을위한 것입니다. 앱을 배포 할 때 한 번만 실행하면됩니다. 거기에 코드를 추가 할 수도 있지만 애플리케이션을 시작할 때 시간이 더 걸립니다. – vels4j

+0

@ vels4j : 그렇다면 응용 프로그램을 다시 배포하더라도 실행하지 않으시겠습니까? – xyz

+0

예. 새 전쟁 파일이 배포 될 때마다이 작업을 수행해야합니다. – vels4j

관련 문제