2011-12-05 5 views
6

मैं जावा आरएमआई पर काम कर रहा हूं। मुझे बंदरगाह 2028 पर मेरी rmiregistry चलाने के साथ कोई समस्या नहीं है क्योंकि मैंने पहले से ही अपना परीक्षण कार्यक्रम चलाने के लिए उपयोग किया है। मैं अपने पोर्ट को अन्य बंदरगाह का उपयोग कर चला सकता हूं लेकिन मैं जानना चाहता हूं, हम कैसे लंबवत बंदरगाह पर चल रहे rmiregistry बंद कर सकते हैं?विशेष पोर्ट पर चल रहे rmiregistry को बंद करने के लिए कैसे?

// create the registry 
Registry rmiRegistry = LocateRegistry.createRegistry(port); 
... 
// connect to it 
JMXConnectorServer connector = 
    JMXConnectorServerFactory.newJMXConnectorServer(url, 
     new HashMap<String, Object>(), 
     ManagementFactory.getPlatformMBeanServer()); 
// do stuff with it ... 

// close the connection 
if (connector != null) { 
    connector.stop(); 
} 
// deregister the registry 
if (rmiRegistry != null) { 
    UnicastRemoteObject.unexportObject(rmiRegistry, true); 
} 

यहाँ full code for our JMXServer class है:

+0

क्या आप प्रोग्रामिंग या मैन्युअल रूप से एक अलग प्रक्रिया के रूप में rmiregistry शुरू कर रहे हैं? – Tudor

+0

नहीं। मैं इसे निम्नलिखित% rmiregistry 2028 और – slonkar

+0

जैसे लिनक्स खोल शुरू कर रहा हूं यदि आप इसे मैन्युअल रूप से प्रारंभ कर रहे हैं, तो क्या आप इसे मैन्युअल रूप से भी रोक नहीं सकते? – Tudor

उत्तर

9

आप प्रोग्रामिंग में ऐसा करना चाहते हैं, तो हम कुछ ऐसा करते हैं। हमें इनमें से 2 बनाने और उन्हें पूरी तरह से पंजीकरण करने में समस्याएं हैं, इसलिए हम विभिन्न बंदरगाहों पर हमारे यूनिट परीक्षण चलाने के लिए सुनिश्चित हैं।

मैं इस कोड का उपयोग अपने SimpleJmx जेएमएक्स क्लाइंट/सेवा पैकेज में करता हूं।

+0

मैं खोल से rmiregistry शुरू कर रहा हूँ। कार्यक्रम के माध्यम से इसका उपयोग नहीं कर रहा है। – slonkar

+1

मुझे एक्लिप्स में एक ही समस्या हो रही थी, जहां रजिस्ट्री थ्रेड हमेशा कोड स्निपेट के साथ हमेशा के लिए चलना जारी रखेगा। अंत में System.exit (0) जोड़ा गया, जो JVM में सभी थ्रेड को मारता है, और सभी ठीक से समाप्त होते हैं ;-) –

+0

+1 मैं कनेक्टर को रोक रहा था लेकिन रजिस्ट्री के सर्वर सॉकेट से छुटकारा पाने के लिए कैसे काम नहीं कर सका। जवाब के लिए धन्यवाद। – dannrob

1

आप खोल से rmiregistry चला रहे हैं के साथ इसे बंद करने की कोशिश:

Process p = 
Runtime.getRuntime().exec("ps -ef | grep rmiregistry | awk '{ print $2 }' | kill -9"); 

मैं खोल आदेशों के साथ इतना ताजा नहीं कर रहा हूँ, लेकिन मुझे आशा है कि आप विचार मिलता है।

+0

मुझे लगता है कि खोल से मुझे ps -ef का उपयोग करना होगा। grep rmiregistry। मैंने अभी तक इसका प्रयोग करके नहीं देखा है। लेकिन मैं आपको निश्चित रूप से बता दूंगा। धन्यवाद। – slonkar

+0

@ ट्यूडर: क्षमा करें आदमी ने यह काम नहीं किया ... लेकिन मुझे ऐसा करने का जवाब मिला। – slonkar

6

इतनी परेशानी के बाद मुझे अचानक एहसास हुआ कि आरएमरेग्रिस्ट्री खोल की पृष्ठभूमि में चलता है। तो हमें बस इसे बंद करना है, इसे पहले अग्रभूमि में लाएं और फिर इसे बंद करें। और यह काम किया।

BTW यह सिर्फ प्रकार अग्रभाग में लाने के लिए:

% fg 

और फिर इसे टाइप बंद करने के लिए:

Ctrl + C

यह है कि। बहुत बहुत धन्यवाद जिन्होंने मेरी मदद करने की कोशिश की।

1

यदि आरएमआई रजिस्ट्री पहले ही बंदरगाह का उपयोग कर रही है और आप किसी अन्य पोर्ट का उपयोग किये बिना किसी सेवा को पुनर्निर्मित करना चाहते हैं। आप नीचे दिए गए कोड को

Registry registry = null; 
try { 
    registry = LocateRegistry.createRegistry(1099); 
} catch (ExportException ex) { 
    registry = LocateRegistry.getRegistry(1099); 
} catch (RemoteException ex) { 
    Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
} 
संबंधित मुद्दे