الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في استخدام RMI

مغلق
بدأه MKSoft في 22 أبريل 2007 · 37 رد · 2,931 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني قمت بأنشاء برنامج باستخدام تقنية RMI , لكن عندما أقوم بتشغيل Server , تخرج لي رسالة خطأ Exception

import java.rmi.*;
public interface TestRMI extends Remote
{public void setString(String data)throws RemoteException;
public String getString()throws RemoteException;}

import java.rmi.*;
import java.rmi.server.*;
public class TestRMIServant extends UnicastRemoteObject implements TestRMI
{private String d;
public TestRMIServant()throws RemoteException{}
public void setString(String data)throws RemoteException{
d=data;}
public String getString()throws RemoteException
{return d;}}

Server

import java.rmi.*;
public class RMIServer 
{public static void main(String[]args){
System.setSecurityManager(new RMISecurityManager());
try{TestRMI test=new TestRMIServant();
Naming.bind("TestRMI",test);
System.out.println("Server is ready");}
catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());}}}

Client

import java.rmi.*;
import java.rmi.server.*;
public class RMIClient
{public static void main(String[]args){
System.setSecurityManager(new RMISecurityManager());
String data="Hello Mohamed";
try{
TestRMI test=(TestRMI)Naming.lookup("TestRMI");
test.setString(data);}
catch(RemoteException e)
{System.out.println("Remote"+e.getMessage());}
catch(Exception e){
System.out.println(e.getMessage());}}}

نص Exception

المرفقات

#2

بص security exception

مذكور في هذا الرابط

http://patriot.net/~tvalesky/easyrmi.html

القي نظرة على الحلول

#3

هل عرفت Security policy ?

ناسي وين تحطها ، لكن في تتوريل بموقع صن يشرح الطريقه

#4

شكرا لك أخي elsheikhmh , وقد قرأت الحلول , لكن لم أستطيع ان افهم كيف اطبق تلك الحلول ..

#5

يبدو ان مشكلتك في الـ Policy

قم بانشاء ملف سمه rmipolicy.policy

اكتب فيه

grant {
	// Allow everything for now
	//permission java.security.AllPermission;

	permission java.net.SocketPermission "*:1024-65535",
		"connect,accept";
	permission java.net.SocketPermission "*:80", "connect";

};

منقطع من حين لاخر

#6

شكرا إخواني جميعا لكم , غلبتكم معاي ,

لكن اخي أبو فؤاد كيف انشأ هذا الملف , وأين أضعه , و كيف أستخدمه ؟؟؟

تم تعديل هذه المشاركة بواسطة MKSoft في 23 أبريل 2007 في 13:03

#7
اقتباس
لكن اخي أبو فؤاد كيف انشأ هذا الملف , وأين أضعه , و كيف أستخدمه ؟؟؟

انشا الملف في نفس مجلد المشروع

استخدمه كالتالي

java -Djava.security.policy=rmipolicy.policy

منقطع من حين لاخر

#8

بإمكانك الإستغناء عن السطر

System.setSecurityManager(new RMISecurityManager());

لكن سيكون البرنامج فيه ضعف أمني

SCJP 5.0

#9

أولا أخي مالك حياك الله , وقد قمت بتجريب اقتراحك , لكن للأسف كان هناك Exception .

java -Djava.security.policy=rmipolicy.policy

ثانيا شكرا لكم إخواني جميعا , على المحاولة لمساعدتي , وسامحوني لأني غلبتكم معاي , لكن أخي أبو فؤاد العبارة السابقة أين أقوم بكتابتها ...؟؟؟؟

أرجو منك أخي أبو فؤاد أن تتطلع على الكود الموجود في الأعلى و تساعدني بناء عليه , و شكر الله سعيك معي .. تحياتي.

تم تعديل هذه المشاركة بواسطة MKSoft في 24 أبريل 2007 في 20:31

#10

انتبه أنك لا تستخدم RMISecurityManager فلا حاجة لملف الـ policy

قم بتشغير كلاس السيرفر بدون أية إضافات

java RMIServer

تم تعديل هذه المشاركة بواسطة malek_sa في 24 أبريل 2007 في 21:34

SCJP 5.0

#11

العبره ليست بـ هل يشتغل أو لا ،

اعتقد ان MKSoft يريد ان يتعلمها ، لذلك الافضل لك ان تتبع الطريقه الصحيحه ،وتعرف لماذا هناك Security policy

، حقيقة افضل طريقه هي المذكوره في موقع صن ،

#12

الحقيقة لدي مشاكل مع JDK في جهازي

سوف اقوم باعادة اعداده و من ثم احاول تشغيل مثالك

لكن اذا اردت معلومات عن RMI

http://java.sun.com/j2se/1.3/docs/guide/rm...tstart.doc.html

منقطع من حين لاخر

#13

بارك الله فيكم إخواني على تفاعلكم معي .. و أنا أنتظر منكم الحلول الممكنة , لان المشكلة مازالت قائمة عندي .

#14

MKSoft

نسيت أن تكتب هذا الـ code في بداية ملف الـserver

import java.net.* // at the begining of class RMIServer

ومع الأخ malek_sa فيما قاله ، لا حاجة لملف الـ policy

#15

1. ترجم جميع ملفات الجافا لانشاء ملفات class

2. ترجم ملف TestRMIServant.java باستخدام rmic لانشاء ملف الـ Stub كالتالي

rmic TestRMIServant

3. شغل الريجستري

rmiregistry

4. شغل السيرفر مع الـ Policy File

java -Djava.security.policy=rmipolicy.policy RMIServer

تلاحظ جملة Serever is ready

5. شغل الكلاينت مع الـ Policy

java -Djava.security.policy=rmipolicy.policy RMIClient

سوف تظهر

*************Hello Mohamed

منقطع من حين لاخر

#16

بارك الله فيكم أحبائي و إخواني جميعا بلا استثناء , وأخص بالذكر أخي أبو فؤاد الذي ساعدني كثيرا ..

لكن أخي أبو فؤاد سامحني ,أولا أنا أستخدم JCreator لترجمة الملفات , و ثانيا أنا ليس لدي لأدنى خبرة في التعامل مع الطريقة السابقة التي شرحتها لي , فإذا كانت طرييقتك تعتمد على تنفيذ الملفات من خلال بيئة DOS , فأرجو منك أخي أبو فؤاد , فقط أن تشرح ليكيف أفعل ذلك , وشيء اخر أخي أبو فؤاد بالنسبة للأكواد التالية (أرجو أن تشرحها لي بشيء قليل من التفصيل ):

1-أين أكتب هذا الكود rmic TestRMIServant

2-وكيف أشغل rmiregistry

3-وبعدها كيف أشغل java -Djava.security.policy=rmipolicy.policy RMIServer .. مع Client و Server

قد تستغرب أخي أبو فؤاد من أسئلتي , لأنها ربما لا تدل على شخص , وصل إلى مرحلة تعلم RMI و JAVA ADvanced, لكن صدقني هذا هو الواقع فسامحني , وأسأل الله لك الجنة على مساعدتك لي ,و بارك الله فيك وفي جميع إخواني الذين يحاولون مساعدتي .

تحياتي .

تم تعديل هذه المشاركة بواسطة MKSoft في 26 أبريل 2007 في 12:45

#17
اقتباس
فإذا كانت طرييقتك تعتمد على تنفيذ الملفات من خلال بيئة DOS

نعم عن طريق الدوس لكن عشان اسهلها عليك استخدم ملفات الباتش كالتالي

في مجلد المشروع انشا ملف جديد و سمه startServer.bat افتح برنامج الـ notepad و اكتب التالي و احفظه بالاسم السابق و بامتداد bat

javac *.java
rmic TestRMIServant
start rmiregistry
java -Djava.security.policy=rmipolicy.policy RMIServer

تلا حظ وجود ملف بداخله شكل ترس

نفس الشيئ سننشا ملف لتشغيل الكلاينتو سمه startClient.bat

اكتب فيه التالي

java -Djava.security.policy=rmipolicy.policy RMIClient
pause

الان اضغ مرتين على ملف startServer.bat لتشغيله ستلاحظ انه بدا بتنفيذ الجمل و تشغيل الريجستري و من ثم تشغيل السيرفر

الان سنشغل ملف startClient.bat ستلاحظ انه اشتغل و طبع الجملة المطلوبة

ارجوا ان اكون افدتك

منقطع من حين لاخر

#18

السلام عليكم اخي أبو فؤاد ... و حياك الله على كل صبرك معي , وأسأل الله أن يجزيك عني خير ما جزا نبيا عن أمته ...

في الحقيقة أنا قمت بعمل كل ما طلبت مني , لكن ظهر معي أخطاء كما في الصورة ...

وأريد أن أقول لك شيئا , أنا أعلم أني أرهقتك بأسئلتي , فإذا أردت أن تكمل معي فحياك الله ووفقك , إن لم ترد ذلك , فبارك الله فيك ووفقك أيضا , على جهودك معي , فلك كامل الحرية في مساعدتي بعد اليوم .

الصورة ..

في الصورة لم يعثر على Javac و لا على rmic ولا حتى على rmiregistery ..

#19

يجب عليك ضبط PATH

اضغط بالزر اليمين على خصائص الكميوتر

ثم Advance ثم Enivroment Variable

New

Variable name= PATH

variable value=C:\Program Files\Java\jdk1.5.0_05\bin;

طبعا القيمة تختلف حسب مسار الجافا عندك

منقطع من حين لاخر

#20

لا أقول لك أخي أبو فؤاد ... إلا بارك الله لك في أهلك ومالك وولدك على مساعدتك لي ...

و الحمد لله البرنامج اشتغل معاي 100 100

تحياتي إليك أخي الغالي أبو فؤاد.

#21

أخي أبو فؤاد .. لدي سؤال ..

هل بإمكاني أن أقوم بإنشاء قاعدة بيانات على RMIServer , و أجعل RMIClient يقوم باستدعاء Methods من قاعدة البيانات الموجودة على RMIServer .

ملاحظة :: لقد قمت بعمل ذلك لكن للأسف ظهر عندي Exception , لذلك أرفقت لك الكود الذي قمت بإنشاءه لعلك تساعدني فيه..

الكود >> Data

صورة Exception >> صورة Exception

تم تعديل هذه المشاركة بواسطة MKSoft في 29 أبريل 2007 في 00:45

#22

ربما يفيدك هذا الموضوع.....

/index.ph...=83054&st=0

#23
اقتباس
هل بإمكاني أن أقوم بإنشاء قاعدة بيانات على RMIServer , و أجعل RMIClient يقوم باستدعاء Methods من قاعدة البيانات الموجودة على RMIServer .

اكيد يمكنك ذلك

بنفس الطريقة التي للميثود getString سوف تقوم بانشاء ميثود تستقبل جملة SQL و تنفذها على السيرفر و ترجعلك النتيجة

الروابط التي وضعتها مش شغالة

بالتوفيق

منقطع من حين لاخر

#24

السلام عليكم ::

تحياتي إليك أخي حسام وبارك الله فيك على المشاركة ..

كل التحية لك أخي أبو فؤاد على صبرك وتحملك معي .

كما قلت لك في المشاركة السابقة أني حاولت انشاء قاعدة بيانات على SERVER , لكن حدث معي Exception , لذلك أريد منك الاطلاع على الكود الذي قمت أنا بكتابته .

الكود >> Data

صورة Exception >> Exception

أخي أبو فؤاد .. هناك عندي استفسار بسيط لو سمحت .

انت تعلم أني عندما انشأت برنامج RMIServer و RMIClient , وباقي Classes قد تم وضعهم جميعا في نفس المجلد , بمعنى اخر , ان كل من Client و Server على نفس الحاسوب ,

لكن من المنطقي أن يتم وضع برنامج RMIServer و ملحقاته على host معين , و RMIClient على Host اخر .. لذلك السؤال المطلوب , ماهي Classes التي يجب أن توضع مع RMIServer على جهاز , وماهي التي يجب أن يتم وضعها مع RMIClient على جهاز اخر , و إذا هناك Classes أو برامج مساعدة يجب اضافتها حتى يكتمل الاتصال , أرجو منك أخي أبو فؤاد ان تقول لي عنها , وبارك الله فيك ؟؟؟؟؟

#25

السلام عليكم

اخي ابو فؤاد اشكر جهودك لمساعدتنا

انا لدي برنامج rmi

تظهر لي الصورة التاليه عند تنفيذ tart client.bat

natejah.bmp

هذا الموضوع مغلق.

مواضيع مشابهة