2011-04-22 6 views
2

이번이 처음으로 질문을 게시하는 것이므로 가능한 한 명확하게 질문하려고 노력할 것입니다.Java 웹 응용 프로그램을 개발하는 가장 효율적인 방법은 무엇입니까? 아니면 구체적으로 말하면 Wicket 앱이라고할까요?

Java 웹 응용 프로그램을 개발하는 최선의 프로세스를 찾으려고합니다. 시행 착오 개월 후, 내 웹 개발 환경은 다음과 같은 부분으로 구성되어 있습니다 :

프레임 워크 : 아파치 개찰구 1.4.16
IDE : 갈릴레오 일식, m2eclipse에 플러그인으로
빌드 도구 : 메이븐 2
데이터를 액세스 : (StaticWeave 포함) JPA 2.0을 통해 EclipseLink가 2.1.1
RDBMS : MSSQL 2005 이상 jTDS를
와 DI : 구글 Guice 웹 컨테이너를 개발 2.0
: 메이븐 부두 플러그인에 포함 된 부두 서버입니다.
대상 웹 컨테이너 : 톰캣 6.x 또는

내가 실행 내 웹 어플리케이션을 테스트 라인 정밀 추적이 요구되는 동안 JPDA 수 있도록 받는다는 부두 플러그인을 사용 위.

소스 코드가 변경 될 때마다 앱을 다시로드해야 적용됩니다. 다시로드하려면 Enter 키를 눌러도되지만 다시로드 한 후 (약 3 ~ 5 개가 내 PermGen 설정에 따라 다름) OutOfMemoryException이 발생합니다. 응용 프로그램을 종료하고 다시 시작해야합니다. 자동 재 장전이 구성에 의해 달성 될 수 있다는 것을 알고 있지만 과도한 재 장전으로 인해 더 빨리 OOME으로 연결됩니다.

Google 검색 결과 메모리 누수 문제와 관련이 있다는 것을 알고 있습니다. 나는 MaxPermSize 설정을 확대하려고 시도했지만, 내 리그의 RAM은 제한되어 있으며, 정말 큰 것을 설정하는 것이 적절하지 않습니다. BTW, Tomcat 7에서 메모리 누수 감지 기능이 도입되었습니다. jTDS, Google Guice 및 Wicket 자체에서 발생하는 대부분의 메모리 누수가 발견되었지만 아무 것도 할 수 없습니다.

개발 과정을 가속화 할 수있는 방법이 있습니까? 다시로드 시간을 줄이기 위해 Glassfish와 같은 고급 웹 컨테이너로 옮겨야합니다 (미안하지만 WebLogic 또는 WebSphere를 구입할 여유가 없습니다).

미리 감사드립니다. 어떤 의견이라도 환영합니다!

+0

JRebel (http://www.zeroturnaround.com/jrebel/)을 사용하면 정말 도움이됩니다. 아직 서버를 다시 시작해야하지만 대부분의 변경 사항은 작동합니다. Wicket과 같은 Java 중심 프레임 워크에 가장 적합합니다. 또한 개발 용 JDK의 해킹 된 버전을 사용할 수있는 경우 DCEVM (http://ssw.jku.at/dcevm/)을 시도 할 수 있습니다. – tetsuo

+0

OMG .... 이전에 JRebel 또는 DCEVM과 같은 것이 있다는 것을 결코 알지 못했습니다! 지금 당장이 솔루션을 사용해 볼 수는 없지만 가족 주말입니다! 감사합니다. 나는 이것들을 근무일에 점검 할 것이다! – mickey

+0

@tetsuo 그런데 의견을 '답변'으로 표시 할 수없는 이유는 무엇입니까? – mickey

답변

5

JRebel을 사용합니다. 정말 도움이됩니다. 아직 서버를 다시 시작해야하지만 대부분의 변경 사항은 작동합니다. Wicket과 같은 Java 중심 프레임 워크에 가장 적합합니다. 또한 개발 용 JDK의 해킹 된 버전을 사용할 수 있다면 DCEVM을 시도 할 수 있습니다.

+0

죄송합니다.이 답변에 투표하기에 충분한 명성이 없었습니다. JRebel과 DECVM을 시도했지만 DECVM은 항상 작동하지 않지만 JRebel은 흔들립니다! 처음으로 제 3 자 제품이 공식으로 합류해야한다고 생각합니다. – mickey

0

나는 일식에서 webapp를 시작하기위한 간단한 부두 래퍼를 가지고있다. 디버그 모드에서 시작하면 메서드 시그니처 또는 필드 이름을 변경하지 않으면 다시로드 할 필요가 없습니다. 컨텍스트 재로드가 필요 없습니다. properties.getWebApplicationPath()가 ./WebContent (또는 받는다는 프로젝트 구조에 따라 다른 어쩌면 STH)입니다

import org.eclipse.jetty.server.Server; 
    import org.eclipse.jetty.webapp.WebAppContext; 

    public static void main(String[] args) { 
     Properties properties= ...//read properties from text file 
     Server server = new Server(properties.getPort()); 
     WebAppContext webapp = new WebAppContext(
       properties.getWebApplicationPath(), properties.getContextPath()); 
    server.start(); 
     //.... and here can be key capture for stopping Jetty 

    } 

.

이 톰캣에 배포 할 때 메모리 누수가 해결되지 않는,하지만 개발 과정에서 매우 도움이 될 수 있습니다. Wicket과 Guice도 사용하고 있으며 메모리 누수가 발생하지 않았습니다.

+0

답변을 주셔서 감사하지만 메소드 서명 수정, 심지어 개발주기 중에 항상 새로운 클래스가 도입 되어도 JRebel 또는 DCEVM이 더 나은 솔루션 인 것으로 보입니다. – mickey