2010-05-06 4 views
1

(인스턴스 데이터가 아닌) 네트워크를 통해 코드 (클래스)를 포함하는 객체를 전송하는 편리한 방법이 있습니까?네트워크를 통해 java.lang.reflect.Proxy를 전송하십시오.

왜 내가 이것을하고 싶은지 묻지 마십시오. 그것은 임무에 있습니다. 나는 그들이 그것이 의미하는 바가 무엇인지를 묻는 질문을 여러 번했고, 대답을 바꾸지 않았으므로 네트워크를 통해 (현장 데이터뿐만 아니라) 코드를 전송하기를 정말로 원한다고 생각합니다. 솔직히 말해서 어쨌든이 과제에서 Proxy가 필요한 이유에 대해서는 전혀 모른다. 단순한 클래스를 작성하면 IMO를 할 수있다. 할당은 우리가 서버에서 프록시를 인스턴스화하여 클라이언트로 전송해야한다고 말합니다. (예, 그들은 java.lang.reflect.Proxy에 대해 이야기합니다, 그들은이 클래스의 이름입니다). 프록시 용 클래스 파일이 없기 때문에 배포 할 수 없습니다. 내가 어떻게 든 생성 된 프록시의 바이트 코드를 읽고, 클라이언트로 전송 한 다음로드해야 할 것 같아요. 어떤 의미가 전혀 없습니다. 그러나 이것은 우리가하기를 원하는 것 같습니다. 나는 이유를 모르겠다.

+0

코드를 원격으로 호출하기를 원하지 않습니까? 클라이언트의 프록시 호출은 실제로 서버에서 코드를 실행하고 결과를 클라이언트에 반환합니다. – Yishai

+0

Yishai는 아마도 여기에서 정확할 것입니다. 프록시 개체는 종종 전선을 통해 요청을 전송하는 데 사용됩니다. 다음 위치에있는 java.lang.reflect.Proxy java 문서를 읽는 것이 좋습니다. http://java.sun.com/javase/6/docs/api/java/lang/reflect/Proxy.html – aperkins

+0

프록시 클래스가 좋습니다. 다른 강의로의 연습은 내가 정말로 즐긴 미들웨어와 같은 RMI를 작성하는 것이었다. 좋은 프록시를 생성하기 위해 필자는 자신의 직렬화 프레임 워크, 네트워크 전송, 매우 기본적인 명명법, 주석 및 반사를 많이 사용했습니다. 이 연습에서는 투명하게 복제 된 시스템을 작성하고 사실을 숨겨야합니다 서버는 프록시와 함께 복제됩니다. 그리고 할당은 실제로 우리가 서버에서 프록시를 인스턴스화해야한다고 말하면 프록시는 클라이언트에 의해 사용되어야합니다. – panzi

답변

1

Apache River 프로젝트 (이전에 Jini가 Sun에서 실행될 때 사용됨)의 핵심 가치 제안입니다.

"코드베이스"HTTP 서버에서 원격으로 실행하는 데 필요한 코드를 넣고 조회 서버에 프록시를 게시하십시오. 강은 코드베이스 URL로 프록시 (직렬화 된 인스턴스)에 주석을 붙입니다. 클라이언트가 조회 서버에서 해당 프록시를 가져 와서 인스턴스화하면 코드베이스 jar가 샌드 박스 처리 된 클래스 로더에서 사용됩니다. 클라이언트에서 실행되는 코드를로드하여 원본 서비스로 다시 통신하는 관리하는 "스마트 프록시"를 만드는 것이 일반적이며,보다 간단한 프록시를 사용하여 RMI 호출을 만들 수도 있습니다.

강으로 캡슐화 된 기술은 복잡하지만 심오합니다.

+0

실제로 여기에서 의도 한 것과 같습니다. (그래도 과제를 말하면 왜 그런 일을해야하는지 알지 못합니다. 과제의 정적 인 설정과 연습의 초점은 전혀 다릅니다.) – panzi

관련 문제