핫스왑 및 대안?


15

대학 시절의 초기부터 저는 Java를 사용하고 있으며 가장 큰 문제는 다른 해석 언어보다 생산성이 떨어지는 것입니다. 모든 사람들은 java가 최고의 컴파일 언어 중 하나라고 확신합니다.

그러나 Sun과 Oracle은이 문제를 해결하기 위해 충분한 노력을 기울이지 않았습니다. 물론 문제 중 하나는 클래스를 다시로드하는 것입니다.

이 문제를 해결하기위한 커뮤니티의 최신 시도는 DaVinci Hotswap 프로젝트 , JRebel , PlayFramework 입니다. 그러나이 글을 쓰는 시점에서 그들은 여전히 ​​성숙하지 않았고 (imo) 원주민이었습니다. 그들 중 일부는 기업용이 아니며 일부는 모든 IDE와 호환되지 않으며 일부는 미성숙 한 대학 프로젝트입니다. 로드맵과 개발자가 준비한 Java도 준비가되었지만 Java 커뮤니티에는 여전히 클래스를 새로 고칠 수있는 솔루션이 없습니다.

오라클이이 문제를 해결하기 위해 노력하는 것이 너무 어렵습니까? 클래스 재로드가 아직 기본적으로 구현되지 않은 이유는 무엇입니까?


2
실제로 JRebel은 완전히 엔터프라이즈 지원되며 비어있는 것은 아니지만 IDE 지원 기능이 뛰어납니다.
CarlosZ

@CarlosZ 정말요? 첫 베타에서 3.x 시리즈까지 JRebel과 함께 IntelliJ IDEA를 사용했습니다. "this"대신 "that"을 사용해야합니다. 각 릴리스의 포럼에는 intelliJ 플러그인과 관련된 많은 문제가 있습니다. 그러나 최악의 경험은 디버깅 문제였습니다. 디버거가 매우 늦게 연결할 수 있습니다. 그리고 우리에게는 엄청난 문제가있었습니다. intellJ 사용자로서 나는 IDEA의 JRebel에 대한 구체적인 경험이 있습니다. 물론 돈을 지불하는 것도 또 다른 문제입니다.

@CarlosZ 정말 질문이다. 왜 자바에서 클래스 리로드를 구현하기가 어려운지 궁금하다.

답변:


4

JEE / J2EE는 어떻습니까? 이것은 12 년 전에 처음 발표되었습니다. 이것은 Sun / Oracle 및 기타 여러 공급 업체에서 직접 지원됩니다.

OSGi는 어떻습니까? 첫 번째 릴리스는 거의 11 년 전에 이루어졌습니다. Eclipse (IDE)가 내장되어 있으며 Sun / Oracle의 Glassfish와 Apache Felix가 광범위하게 사용합니다. Spring-OSGi와 함께 사용할 수 있습니다.

엔터프라이즈 애플리케이션은 애플리케이션 서버에서 별도의 제품으로 의도적으로 지원 되었기 때문에 Java SE에서 기본적으로 지원되지 않았습니다.


@Peter Lawrey 1) J2EE에 관한 Lawrey 구체적인 솔루션이 있습니까? 당신의 요점을 볼 수 없었습니까? 2) 클래스를 다시로드하려면 OSGI를 사용해야한다고 생각합니까? 퍼즐은 어때? JCR 수준에서도 여전히 합의가 없습니다 :). OSGI는 클래스 재로드와는 매우 다른 영역을 다루고 있습니다. 3) JavaSE 부분을 이해할 수 없습니다. 조금 더 설명해 주시겠습니까? DaVinci HotSwap 프로젝트는 Oracle에서 후원합니다. 그것은 적어도 나에게도 그러한 해결책을 열망한다는 것을 의미합니다.

핫 스왑이 수행 할 작업에 따라 다릅니다. 디버깅을 위해 핫 스왑을 원하면 얼마 동안이 작업을 수행 할 수있었습니다. 그러나 강력한 엔터프라이즈 솔루션의 경우 이러한 특성의 핫 스왑은 적합하지 않으며 제어 된 릴리스 만 가능합니다. 이 경우 JEE 및 OSGi를 사용하면 거의 동일한 이점을 가지지 만 프로덕션 환경에서 기대할 수있는 제어 기능으로 실행중인 응용 프로그램을 업데이트 할 수 있습니다. 예를 들어, OSGi 컨테이너에서 응용 프로그램을 중지하지 않고 클래스를 제거하고 최신 버전으로 바꿀 수 있습니다. 어떤 OSGi가 필요하지 않은 것은 무엇입니까?
피터 로리

1) JEE / J2EE 참조 구현이 시작될 수 있지만 JEE를 사용하는 것이 더 대중적이며 더 많이 있습니다. 내 요점은 실행중인 시스템에서 코드를 바꿀 수 있다는 것입니다. 프로덕션 / 제어 환경에서 더 필요한 것은 무엇입니까?
피터 로리

1
2) OSGi를 사용하는 유일한 클래스는 클래스를 다시로드하는 것입니다. OSGi의 주요 용도로 무엇을 보십니까?
피터 로리

3) JEE의 요점은 이것이 엔터프라이즈 애플리케이션을 지원할 수있는 공간이라는 것입니다. JSE는 JEE 또는 다른 응용 프로그램에 사용할 수있는 기본 플랫폼입니다.
피터 로리

2

이것을 시도하십시오 : http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

여러 가지 복잡한 문제가 있습니다. 실제로 상태 저장 엔터티에 대한 구조적 변경을 수행하는 솔루션은 Java 용인지 아닌지 알 수 없습니다. Ruby 또는 PHP와 같은 동적 언어는 실제로 그렇게하지 않습니다. Erlang에 대해서는 확실하지 않지만 상태가 손실 될 것이라고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.