핫스왑 및 대안?


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.