2010-07-14 36 views
6

मेरे पास एक समय में 2 अलग जावा अनुप्रयोग चल रहे हैं। (दो अलग javaw.exe) जब वे चल रहे हैं, तो मुझे उनके बीच एक वस्तु साझा करने की आवश्यकता है।जावा एप्लिकेशन के बीच ऑब्जेक्ट कैसे साझा करें?

सबसे आसान तरीका है किसी स्थायी संग्रहण बिना इस लक्ष्य को हासिल करने के लिए क्या है?

+1

देखें [दो अलग जावा डेस्कटॉप अनुप्रयोगों के बीच संचार] (http://stackoverflow.com/questions/1680898/communication-between-two-separate-java-desktop-applications) –

+0

यह बहुत उपयोगी है। धन्यवाद :) – Vishal

उत्तर

6

ऑब्जेक्ट्स और उनके आवृत्ति चर जावा प्रोग्राम में धागे के बीच साझा किए जा सकते हैं, जो कि बहुत आसान काम है।
यदि आपको डेटा प्रोग्राम के साथ दो प्रोग्रामों के बीच ऑब्जेक्ट्स (उदाहरण का उदाहरण) साझा करने की आवश्यकता है, तो अगला choise RMI Socket Communication या जावा मैसेजिंग सेवा का उपयोग करेगा।

0

शायद Oracle Coherence? यह अनुप्रयोगों में साझा स्मृति मानचित्र में काम करता है।

3

आप उपयोग कर सकते हैं टीसीपी

  1. एक स्थानीय सॉफ्टवेयर बंदरगाह का उपयोग करें, का कहना है कि स्थानीय होस्ट: 999।
  2. सर्वर (इस पोर्ट पर ध्यान) और ग्राहक के रूप में अन्य (: 999, लेकिन यह के अपने उपयोग के लिए भिन्न पोर्ट का उपयोग करेगा स्थानीय होस्ट पर सर्वर से कनेक्ट होगा) के रूप में एक आवेदन करें।
  3. क्लाइंट आपकी ऑब्जेक्ट को स्ट्रीम करने के लिए क्रमबद्ध करेगा।
  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) का उपयोग करें और सॉकेट से अधिक वस्तु हस्तांतरण। इसे सॉकेट श्रोताओं को लिखने की आवश्यकता होगी।

दूसरा दृष्टिकोण का उपयोग कर और एक तीसरी पार्टी पुस्तकालय (जैसे EHCache) को विन्यस्त की आवश्यकता होगी।

2

आपको यह तय करना होगा कि क्या आप साझा और अद्यतन स्थिति पसंद करते हैं, या बस एक बार-संदेश-ऑब्जेक्ट भेजें।

पहले मामले में आपको किसी ऑब्जेक्ट को "रिमोट रेफरेंस" साझा करना होगा। RMI एक अच्छा दृष्टिकोण है।

दूसरे मामले में आप केवल वस्तु आप साझा करने और उसे भेजना चाहते हैं क्रमानुसार करने की जरूरत है।

  • RMI :) इस जोड़ता है करने के लिए एक RMI पंजीकृत रिसीवर, एक परम के रूप में mesasge वस्तु के साथ एक विधि का आह्वान: आप इसे (बाई के लिए परिवर्तित) Ankit said के रूप में श्रृंखलाबद्ध एक सॉकेट से अधिक या यहाँ तक कि आप उपयोग कर सकते हैं भेज सकते हैं और RMI वस्तु

  • जावा संदेश सेवा (JMS), शायद एक overkill ... के बारे में भूल

  • कुछ अन्य रचनात्मक लेकिन सरल बात ...

2

मुझे लगता है कि 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, IdGenerator आदि The documentation is good और मेरे अनुभव में कार्यान्वयन ठोस है।

संबंधित मुद्दे