2010-07-14 8 views
6

한 번에 2 개의 Java 응용 프로그램이 실행됩니다. (두 개의 별도 javaw.exe) 그들이 실행되는 동안 그들 사이에 개체를 공유해야합니다.자바 응용 프로그램간에 객체를 공유하는 방법은 무엇입니까?

영구 저장 장치없이이 작업을 수행하는 가장 간단한 방법은 무엇입니까?

+1

[두 개의 서로 다른 Java 데스크탑 응용 프로그램 간의 통신] (http://stackoverflow.com/questions/1680898/communication-between-two-separate-java-desktop-applications) –

+0

이것은 매우 유용합니다. 감사합니다 :) – Vishal

답변

6

자바 프로그램에서 객체와 인스턴스 변수를 공유 할 수 있습니다. 이는 매우 간단한 작업입니다.
데이터 저장소가없는 두 프로그램간에 개체 (인스턴스)를 공유해야하는 경우 다음 선택 항목은 또는 Java 메시징 서비스를 사용합니다.

0

아마도 Oracle Coherence? 이는 응용 프로그램간에 공유되는 메모리 맵처럼 작동합니다.

3

당신은 TCP

  1. 로컬 소프트웨어 포트를 사용하여 사용할 수 로컬 호스트를 말 : 999.
  2. 하나의 응용 프로그램을 서버 (이 포트에서 수신 대기)와 다른 클라이언트로 만듭니다 (localhost : 999의 서버에 연결되지만 자체 용도로 다른 포트를 사용합니다).
  3. 클라이언트가 개체를 스트리밍하도록 serialize합니다.
  4. 서버가 비 직렬화됩니다!

예 : 영구적으로 객체를 저장할 수없는 경우 http://www.java-samples.com/showtutorial.php?tutorialid=1167

+0

물론 그렇지 않습니다. 그런 다음 공유 메모리와 같은 것이 있어야합니다. 공유 메모리의 예 : http://unserializableone.blogspot.com/2006/10/share-precious-heap-memory-accross.html – ankitjaininfo

1

, 어떻게 든 그것을 전송해야합니다. 이것은 네트워크 또는 일종의 공유 메모리를 통해 수행 될 수 있습니다.

첫 번째 (네트워크) 방식의 경우 직렬화 (java.io.Serializable)를 사용하고 소켓을 통해 개체를 전송하십시오. 이렇게하려면 소켓 리스너를 작성해야합니다.

두 번째 방법을 사용하려면 제 3 자 라이브러리 (예 : EHCache)를 사용하고 구성해야합니다.

2

공유 상태 및 업데이트 상태를 선호하는지 아니면 일회성 메시지 개체를 보낼지 결정해야합니다.

첫 번째 경우 어떤 개체에 "원격 참조"를 공유해야합니다. RMI 좋은 접근 방식입니다.

두 번째 경우에는 공유하고 보낼 개체 만 serialize하면됩니다.

  • RMI가하는 RMI는 수신기를 등록에 보낸 사람이 연결 :) PARAM로 mesasge 객체 메소드를 호출 : 당신은 Ankit said 같은 소켓을 통해 (부전승으로 전환) 직렬화 또는 사용할 수 보낼 수 있습니다 그리고 RMI 객체

  • 자바 메시징 서비스 (JMS), 아마도 잔인한 ...에 대해 잊어

  • 다른 창조적하지만 간단한 일이 ...

2

이 상황에서는 Hazelcast이 정상적으로 작동한다고 생각합니다. 실질적으로 설정이 필요하지 않습니다 (Hazelcast 항아리에 의존성을 추가하는 것 이상).다음 코드 샘플에서는 공유 Map을 설정하는 방법을 보여줍니다. 포함

// Code in process 1 
Config cfg = new Config(); 
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg); 
Map<Integer, String> sharedData = instance.getMap("shared"); 
sharedData.put(1, "This is shared data"); 

// Code in process 2 
Config cfg = new Config(); 
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg); 
Map<Integer, String> sharedData = instance.getMap("shared"); 
String theSharedString = sharedData.get(1); 

Hazelcast 지원 다양한 공유 데이터 구조 Map, Queue, List, AtomicLong, IdGeneratorThe documentation is good 내 경험에 구현 고체이다.

관련 문제