# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا >  RMI در جاوا

## hamidshahram

با سلام.
لطفا در این مورد منو راهنمایی کنید. من یک سری اطلاعاتی دارم اگر کسی می دونه به من بگه. :متفکر:  :خیلی عصبانی:

----------


## YourName

با سلام و تبریک به شما کاربر جدید
مشابه Remoting  در دات نت هست و برای فراخوانی متدها از راه دور استفاده می شود ولی امروزه با  آمدن وب سرویسها نقش آنان کمرنگ تر شده است

----------


## hamidshahram

ممنونم می خواستم از این روش در یک پروژه ملی استفاده کنم ولی با صحبت های شما می خوام از وب سرویس استفاده کنم
لطفا یک مثال از اون برام بزنید می خوم ببینم چطوره؟
حل نشده

----------


## hamidshahram

سلام
البته من یه چیزایی در مورد Skeleton در مورد اون شنیدم ولی نمودنم چیه  یک نمونه مثال هم دارم به صورت زیر:
import java.rmi.*;
import java.rmi.server.*;
publicclass SampleClient 
{
publicstaticvoid main(String[] args)
{
// set the security manager for the client
System.setSecurityManager(new RMISecurityManager());
//get the remote object from the registry
try
{
System.out.println("Security Manager loaded");
String url = "//localhost/SAMPLE-SERVER";
SampleServer remoteObject = (SampleServer)Naming.lookup(url);
System.out.println("Got remote object");
//narrow the object down to a specific one
//System.out.println("Location: " + System.getProperty("LOCATION"));
// make the invocation
System.out.println(" 1 + 2 = " +
remoteObject.sum(1,2) );
}
catch (RemoteException exc)
{
System.out.println("Error in lookup: " + exc.toString());
}
catch (java.net.MalformedURLException exc)
{
System.out.println("Malformed URL: " + exc.toString());
}
catch (java.rmi.NotBoundException exc)
{
System.out.println("NotBound: " + exc.toString());
}

}
}

----------


## saeed_Z_F

سلام
به این لینک سر بزنید بدردتون میخوره :
http://java.sun.com/docs/books/tutorial/rmi/index.html

----------


## hamidshahram

لطفا بیشتر کمک کنید
اگه ممکنه فارسی باشه
با تشکر

----------


## behrangsa

> ممنونم می خواستم از این روش در یک پروژه ملی استفاده کنم ولی با صحبت های شما می خوام از وب سرویس استفاده کنم
> لطفا یک مثال از اون برام بزنید می خوم ببینم چطوره؟
> حل نشده


با پوزش بسیار، شما می‌خواهید از RMI در یک پروژه ملی استفاده کنید، بعد انتظار دارید که این تکنولوژی را در یک تالار برنامه‌نویسی یاد بگیرید؟ فکر نمیکنید که این بی‌انصافی باشد؟ اگر واقعاٌ میخواهید RMI را یاد بگیرید، چرا یک کتاب مربوط به آن را تهیه نمیکنید و مطالعه نمی‌کنید؟ اگر این یک پروژه شخصی بود باز میشد در این باره بحث کرد اما یک پروژه ملی بسیار مهمتر از آن است که بخواهیم تا این حد سطحی با آن برخورد کنیم...

در ضمن با کمی جستجو در اینترنت جواب تمام سوالات خود را خواهید یافت. اگر آشنایی شما با این مفاهیم بسیار کم است شاید بهترین جا برای شروع کردن wikipedia باشد. بعد برای rmi tutorial و web services tutorial جستجو کنید. البته خود سایت سان میکروسیستمز یک خود آموز برای یادگیری web services دارد که برای شروع بد نیست.

موفق باشید،
بهرنگ

----------


## zer0cool

RMI یک تکنولوژی قدیمی هستش و تکنولوژی جدیدش EJB هستش ولی من یه کد ساده از RMI براتون گذاشتم امیدوارم به دردتون بخوره، ولی بهر حال RMI یه تکنولوژی قدیمی محسوب میشه و اگه شما قصد انجام یه پروژه در سطح ملی رو دارین بهتر از EJB استفاده کنید.

----------


## hamidshahram

اگه ممکنه در مورد ejb توضیح بدهید و مثالی بزنید

----------


## javaphantom

ejb مجموعه ای از چند فایل جاوای که در نهایت تشکیل یک مولفه یا component می کند. وقتی صحبت از componet  می کنیم اون موقع باید صحبت از برنامه نویسی کامپونتی نیز بکنیم. تعریف کامپونت چیه؟ واقعا componet هم مانند تعریف object در دهه های 70 تا 80 امروزه بسیار سخت و نا مفهوم به نظر می رسه اما به زبان ساده می شه اینطور تعریف کرد که کامپونت مجموعه ای از چند object هست که به محیط خارج از خودش هیچ وابستگی نداره. شما در زبانهای visual بسیار از این کامپونت ها استفاده کرده این مسله JButton یک کامپونت هست که از چندین object مختلف یا حتی کامپونتهای دیگه استفاده شده ولی موجودیت جداگانه برای خودش داره. ejb هم همانطور که گفته شد مجموعه ای از چند محصول مختلف جاوایی یا همان object های جاواست. صحبت از این همه object توی هم باشه ولی مدیریت نداشته باشیم ؟ این کامپونت ها همه در قسمت server اجرا می شن پس نیاز به یک نرم افزار دیگه داریم تا مدیریت فرایند تولید و چیدمان این کامپونت ها را بر عهده داشته باشه. دقیقا ما ظرفی در قسمت سرور می خوایم که این کامپوننت ها درون اون بریزیم تا اون بتونه طول عمر و نحوه گردش این کامپونت ها رو مدیریت می کند که به آن ejb Container می گویند. این تکنولوژی در حال حاضر برای ایجاد برنامه های سازمانی یا همان Enterprise بسیار استفاده می شود تازه تمام تکنولوژی های قبل خودشم از جمله CORBA رو نیز پشتیبانی می کند در نسخه های قبلی آن ۱.۲ تا ۲.۱ این تکنولوژی بسیار پیچیدگی های خاصه حودشرو داشت در نتیجه شرکت های مختلف شروع به ساختن framework هایی کردند که بتواند برای تولید این نوع کامپونت ها بسیار سریع عمل کنه اما خوب استاندارد برای سان نبود از جمله struts , spring با اومدن آخرین نسخه آن یعنی ejb3 دیگر این مشکلات هم حل شد. ejb3 با شعار POJO Plain Old Java Object و همچنین با کمک annotation که جای گزین فایلهای عظیم xml شد دیگر واقعا کار را بسیار آسان کرد و هشتداری بود برای framework بازها.
اینهایی که گفته شده حتی اول ejb هم نیست. ejb کد زدن نیست  در ejb بحث bean provider و assembler و admin و architecture و و و  هست. کلی مفهوم باید بدونی محیط IDEنیست که کلمه ای در باب اون بگی و بقیم بیان تاییدت کنن. این شده بار عملی این فروم.
مثال خواستی جالبه تازه هم برات نوشتم کجا میخوای اجراش کنی؟ من فقط یک اشاره در مورد ejb container کردم کلی خود اون بند و بساط داره کسی که می خواد enterprise کار کنه باید بدونه SOA چیه تازه بعدش IT می یاد تو کار ولی خوب ما یک مثال هم می زنیم که شما از ما راضی باشی مثال ساده HELLO WORD ولی اینجا من بلد ینستم که کد بزنم درست چاپ بشه امید وارم خودت یک جوری بتونی مرتبش کنی
لوازم لازم:
یک کامپیوتر که بر روی آن JVM نسب باشد JDK1.6
یک web server ما خودمون با JBoss کار می کنیم jboss-4.2.1.GA حتما نسخه چهار چون داریم با EJB3 کار می کنیم
روند کار
یک interface ساده به نام Hello که در آن یک method تعریف می کنیم که مقدار string بر می گرداند
یک فایل جاوایی که این interface در آن پیاده سازی یا implement  می شود
در آخر سر یک jar فایل که نتیچه کارمون هست :D این قدرت POJO و ejb3

public interface Hello {
public String sayHello();
}
import javax.ejb.*
@Remote(Hello.class)
@Stateless
public class HelloBean implements Hello {
pubic String sayHello() {
return "Hello Java";
}
}
تموم شد.
کنار این دو فایل class یک folder به نام META-INF درست کن و در داخل آن یک فایل به نام MANIFEST.MF بساز. بعد برگرد یک مرحله قبل یعنی کنار اون دو کلاس بعد حالا جر فایل
jar -cvf mybean.jar * 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
این فایل باید در جایی که به container گفته شده که آن را deploy کند باید copy  شود
تموم شد.
حالا سوال پیش می آید بابا من انیو چه جوری اجرا کنم.
JNDI در یک کلام. این JNDI چیه؟ می تونید اینو به عنوان یک سوال مطرح کنید بیان در  باب این java naming هم یک صحبتی بکنند و ببیند بهترین IDE کدام است.
در ejb3 این کار هم راحت شده دیگر نیازی نیست 
تا اینجا چیزهایی که من گفتم بسیار خلاصه بود ولی پر از مطلب
تا اینجا ببین چه جوری می ری جلو اگر پیشرفت خوب بود بریم سر درس بعدی 
چاکس

----------


## hamidshahram

با سلام
ممنون از لطف شما خیلی خوب بود
واقعا از شما در این زمینه تشکر می کنم
اگه لطف کنید و شماره تلفن یا ایمیل به من بدید ممنون میشم :لبخند:

----------


## javaphantom

آیا این کار جزو قوانین اینجا هست . خوب اگر بازهم سوال دارید مطرح کنید بزاریم همه دوستان هم نظرات و پیشنهادات خودشون رو بدن

----------


## hamidshahram

حرف شما درسته ولي بقيه مسائل ديگه فني و نمي تونم تايپ كنم چون زمان زيادي مي گيره 
حالا يه شماره تلفن لازم دارم :متفکر:

----------


## javaphantom

> حرف شما درسته ولي بقيه مسائل ديگه فني و نمي تونم تايپ كنم چون زمان زيادي مي گيره 
> حالا يه شماره تلفن لازم دارم


آدرس ایمیل من در yahoo وچود داره می تونید بصورت ایمیل با من در تماس باشید.

javasurgeon@yahoo.com

----------


## unhandled_event

سلام
من تونستم یک سرور کوچک rmi  رو در حد فراخوانی یک متد ساده راه بندازم و بصورت local آزمایش کردم کار کرد با IP کامپیوتر در شبکه و یا حتی اسم و localhost.
اما وقتی از  یک کامپیوتر دیگه شبکه میخوام به سرور rmi  وصل بشم
connection refused میده و هر کاری کردیم درست نشده تا الان 
میخواستم ببینم آیا تنظیم و permission خاصی باید در client.policy  یا server.policy انجام بدیم ؟ میتونه مشکل شبکه باشه ؟ 
ممنون

----------


## javaphantom

> سلام
> من تونستم یک سرور کوچک rmi  رو در حد فراخوانی یک متد ساده راه بندازم و بصورت local آزمایش کردم کار کرد با IP کامپیوتر در شبکه و یا حتی اسم و localhost.
> اما وقتی از  یک کامپیوتر دیگه شبکه میخوام به سرور rmi  وصل بشم
> connection refused میده و هر کاری کردیم درست نشده تا الان 
> میخواستم ببینم آیا تنظیم و permission خاصی باید در client.policy  یا server.policy انجام بدیم ؟ میتونه مشکل شبکه باشه ؟ 
> ممنون


با خود api های rmi کار کردید یا با container ejb کار کردید؟

----------


## unhandled_event

با rmiregistry . اول rmiregistry  رو اجرا میکنم بعد برنامه سرور رو رو همون پورت پیش فرض که 1099  هست.

----------


## hamidshahram

من نمي دونم ولي مي توانيد به سايت http://www.java.sun.com مراجعه فرماييد

----------


## enterprise

Connection refused
ممکنه از
firewall ویندوز ؟ 
باشه

----------

