PDA

View Full Version : لپ كلام jndi



maamiri
چهارشنبه 20 آذر 1387, 22:56 عصر
دوستان عزيز من هر كاري ميكنم نمي تونم به اسم jndi‌كه تو netbeans تعريف كردم دسترسي پيداكنم.منظورم از طريق application.ميشه دوستان عزيز يك مثال خيلي ساده لينك كنن كه توش يك application client از طريق jndi‌به يك ejb module دسترسي پيدا ميكنه.البته اين مثال رو من پيدا كردم اما وقتي فايل كلاينت رو بيرون از netbeans احرا ميكنم err عدم دسترسي ميده.
http://www.netbeans.org/kb/61/javaee/entappclient.html:خجالت:

javaphantom
پنج شنبه 21 آذر 1387, 11:05 صبح
شما باید اول از همه مشخص کنید که web applicaton تون چی هست. بعد از اون که مشخص شد تازه یک سری تنظیمات ما داریم که بر اساس web application انجامی می دیم. بعد از اینکه این تنظمات انجام شد به سراغ JNDI می ریم. اگر دارید با ejb container کار می کنید باید مشخص کنید که دارید از session ها استفاده می کنید اونهم از remote یا ایینکه از message container.

مشخصات دقیق بدین راهنماییتون می کنم.

maamiri
جمعه 22 آذر 1387, 00:12 صبح
فكر ميكنم اين مثالي كه تو لينك داده session باشه.
خوب پس نتيجه اخلاقي اين ميشه كه session رو توضيح بديد:لبخند:

javaphantom
جمعه 22 آذر 1387, 13:31 عصر
فكر ميكنم اين مثالي كه تو لينك داده session باشه.
خوب پس نتيجه اخلاقي اين ميشه كه session رو توضيح بديد:لبخند:

اینجا مگه آموزشگاست .

session در هرجا معنی خواص خودشو داره. من نمی دونم مربوط به کدوم قسمت رو میخوای بدونی.
اگر منظورت session bean ها در EJB 3 هستند من به شما پیشنهاد می کنم با این پایه ضعیفی که داری بیخیال بشی و بری اول سراغ مطالب پایه ای تر و اولیه J2EE بهتره.
نوشتن چند خط کد که معنیشم نمی فهمی و برای اجرای آنها دیگه IDE و نمی دونم آموزش گام گام نمی تونه کمکت کنه.
باید بشنی وقت بزاری چندین کتاب بخونی بعد کمک بگیری.
خیلی مفهوم ها ست که باید بدونی. و واقعا من نمی تونم اینجا به همشون توضیح بدم. شما کتاب servlet & jsp ماله core java رو تهیه کن زبان اصلی. با مفاهیم اولیه j2ee آشنا بشو. با یک servlet container آشنا بشو مثل tomcat. تنظیمات و قابلیت ها رو یاد بگیر. پیاده سازی بکن بعد تازه وارد یک دنیای دیگه بشو. همین خودش یک ۲ سالی مشغولت می کنه. عوضش بعد از ۲ سال یک چیزخوب و قوی و با معلومات پر فیلتر شدی. این نظر من. با این تفاسیر برای اینکه باورت بشه که مطالبی که گفتم واقعیت داره من یک مثال ساده HelloWorld رو با ejb3 و session bean ها به اضافه مطلب jndi برای شما می نویسم.

web application: glassfish

در قسمت server و مربوط به فسمت business کار که قرار چاپ کنه hello world بعد اونو به سمت client پاس بده از طریق jndi از طرف client این business صدا می شه و رشته تولید شده به سمت client بر گردونده می شه و درسمت کلات رشته hello world چاپ می شه.

در قسمت server

import javax.ejb.Remote;

@Remote
public interface HelloRemote {
public String sayHelloWorld();
}
حالا نوبت نوشتن session bean هست که از طریق این interface مشخص می کنه که یک بصورت remote هست و باید یک متدود رو پیاده سازی کنه که همون چاپ کردن hellow world است.
این session بصورت stateless هست. طول عمر کوتاه ودر کنترل ejb container هست. یعنی این ejb container شما هست که بنا به در خواست client از اون instance می گیره و بعدش هم خودش هر موقع که بخواد دخلشو می یاره.

import javax.ejb.Stateless;

@Stateless
public claas HelloBean implements HelloRemote {
public String sayHelloWorld() {
return "Hello World";
}
}

حالا بعد از compile کردن این دوتا یک jar فایل درست می کنیم بعد این jar file رو deploy می کنیم توی web application نمون که ejb container داره. می ریم سراغ client و jndi
اول یک سری نتظمات مربوط به glassfish و بعد یک context که می رهه از طریق jndi اون object مورد نظر که همونی هست که توی EJB Container مون Deploy کردیم رو صدا می کنه و کار تمومه.


import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;


/**
*
* @author root
*/
public class Main {


public static void main(String[] s) throws Exception {
Properties prop = new Properties();
prop.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
prop.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
prop.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFa ctoryImpl");
prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
prop.setProperty("org.omg.CORBA.ORBInitialPort", "4325");

Context ctx = new InitialContext(prop);
HelloRemote h = (HelloRemote) ctx.lookup("HelloRemote");
System.out.println(h.sayHelloWorld());
}
}

بعد این فایل مثل حالت معمولی با javac کامپایل و اجرا می شه و میره از توی server و business رو صدا می کنه
الله اکبر داره.

maamiri
جمعه 22 آذر 1387, 22:03 عصر
مرسيت باشه جوان
با اينكه زياد قرو لوند ميكني اما معلومه دلت پاكه
من چند ماهي ميشه كه دارم با اين jndiوejb سرو كله ميزنم.يه مثال ساده نياز داشتم كه دركش كنم.
هميشه سوال كردن از يك مبحث بصورت يك مثال دليل بر بيسوادي يا تنبلي نيست.خيلي وقتها آدما مطالعه ميكنن مثل من.من الان بيشتر از 3 مدل كتاب خوندم اما خداييش مطلب رو نگرفتم.شما هم بهتره از اين طعنه زدنهات دست برداري...
هر كس براي خودش شخصيتي داره
در هر صورت ممنون كه وقت گذاشتي و يك مثال برام آماده كردي

javaphantom
جمعه 22 آذر 1387, 22:50 عصر
مرسيت باشه جوان
با اينكه زياد قرو لوند ميكني اما معلومه دلت پاكه
من چند ماهي ميشه كه دارم با اين jndiوejb سرو كله ميزنم.يه مثال ساده نياز داشتم كه دركش كنم.
هميشه سوال كردن از يك مبحث بصورت يك مثال دليل بر بيسوادي يا تنبلي نيست.خيلي وقتها آدما مطالعه ميكنن مثل من.من الان بيشتر از 3 مدل كتاب خوندم اما خداييش مطلب رو نگرفتم.شما هم بهتره از اين طعنه زدنهات دست برداري...
هر كس براي خودش شخصيتي داره
در هر صورت ممنون كه وقت گذاشتي و يك مثال برام آماده كردي

سوال کردن از یک مبحث یا سوال مربوط به یک مفهوم؟ این هم مطمعن باش که با مثال نمی تونی مفهوم رو درک کنی.
می دونی چرا مطلب رو نگرفتی چون من بازم می گم پایه ضعیف هست. پیش نیازهای کتاب رو رعایت نکردی.
طعنه نمی زنم. اتفاقا جزو معدود کسانی هستی توی این فروم که داری سوالهای خوب مطرح می کنی. من خیلی مشتاق هستم که بیشتر توی زمینه ejb و معماری چندلایه ای و چگونه طراحی و پیاده سازی بحث کنم تا اینکه بیام روش کامپایل کردن رو به یکی بگم. ولی اشتباه نکن که تدریس کردن هم جاش اینجا نیست. دوست دارم سوالها در سطح پیاده سازی باشه نه مفهوم های اولیه و تئوریک. می دونی دوست دارم exception بنادازی توی صفحه. بعد بگی من یک چند روزی هست دارم با این exception زندگی می کنم ولی نمی تونم از پسش بر بیام. اون موقعست که منم نا خودآگاه می ندازی تو هچل.
exception آدم و بزرگ می کنه :لبخند:
من به شخصیت هیچ کس توهین نکردم. اگر می گم بخون گفتم همیشه اولش به خودم می گم. بعد می آیام بکسی دیگه می گم. اگر فکر می کنی به شخصیت توهین شده من از تو معذرت می خوام. منظوری نداشتم.
طعنه می زنم که از لج منم که شده بری بخونی :شیطان:
بازم سوال داشتی بپرس مطمعن باش جواب از من داری

maamiri
یک شنبه 24 آذر 1387, 14:51 عصر
یه سوال برام پیش اومده.به این کد نگاه کن .فرق این JNDI که شما گفتین با این یکی چیه؟


java.lang.Object ejbHome =
initialContext.lookup(
"java:comp/env/com/mycompany/accounting/AccountEJB");
accountHome =
(AccountHome)javax.rmi.PortableRemoteObject.narrow (ejbHome, AccountHome.class);

یچیزی هم قبلش بگم بجون آقا من کتاب می خونم .core j2ee و ‌دوتا کتاب دیگه اما مباحث jndi اون خیلی کمه.مباحث مربوط به remote و session رو هم بلدم.امامشکل من مربوط به این مبحثه.در مورد مثالی هم که آوردی یه مشکلی باهاش دارم .کتابخونه های من ناقصه

cups_of_java
یک شنبه 24 آذر 1387, 16:24 عصر
یه سوال برام پیش اومده.به این کد نگاه کن .فرق این JNDI که شما گفتین با این یکی چیه؟

یچیزی هم قبلش بگم بجون آقا من کتاب می خونم .core j2ee و ‌دوتا کتاب دیگه اما مباحث jndi اون خیلی کمه.مباحث مربوط به remote و session رو هم بلدم.امامشکل من مربوط به این مبحثه.در مورد مثالی هم که آوردی یه مشکلی باهاش دارم .کتابخونه های من ناقصه

مثالی که شما زدی برای گرفتن reference به شی Home برای دسترسی به EJB های Remote هستش که در نسخه 2.1 کاربرد داشته.

مثال javaphantom برای EJB3 هستش که دیگه از شی Home خبری نیست و کار برنامه نویس راحت تر شده.

javaphantom
دوشنبه 25 آذر 1387, 00:01 صبح
مثالی که شما زدی برای گرفتن reference به شی Home برای دسترسی به EJB های Remote هستش که در نسخه 2.1 کاربرد داشته.

مثال javaphantom برای EJB3 هستش که دیگه از شی Home خبری نیست و کار برنامه نویس راحت تر شده.

کلیت سوال مربوط به java naming and directory interface هست. هیچ ربطی به معقوله ejb نداره که حالا بخواد مربوط به نسخه چندم ejb باشه.
وقتی صحبت از RMI یا همون Remote Method Invocation می شه، سر کله jndi هم پیدا می شه.

علت اینکه من به سراغ مثال از ejb شدم به این علت بود که از jndi به session پریدیم و من حدث زدم که شاید منظور از session ودر کنار اون jndi باید منظور اصلی ejb session باشه. برای همین به سراغ مثال از ejb شدم.

شما برای دسترسی به ejb session های remote باید از jndi استفاده کنید مخصوصا وقتی بخواهید مقداری بازگشتی داشته باشید یعنی مانند مثال من یک رشته از سمت server از طریق remote به سمت client بر گردونده بشه.

maamiri
دوشنبه 25 آذر 1387, 10:52 صبح
من یه مشکلی دارم با jndi
وقتی اجرا میکنم این پیغام میاد
javax.naming.CommunicationException: Can't find SerialContextProvider [Root exception is org.omg.CORBA.COMM_FAILURE:
میشه کمکم کنید

javaphantom
دوشنبه 25 آذر 1387, 11:31 صبح
من یه مشکلی دارم با jndi
وقتی اجرا میکنم این پیغام میاد
javax.naming.CommunicationException: Can't find SerialContextProvider [Root exception is org.omg.CORBA.COMM_FAILURE:
میشه کمکم کنید

کدی رو که نوشتی بفرست بیاد اینجا

maamiri
دوشنبه 25 آذر 1387, 11:44 صبح
دقیقا هموناییه که تو مثال netbeans برات لینک کردم در اول این بحث
وقتی کد های properties شمارو وارد نمیکنم کار میکنه اما وقتی کد های قسمت properties رو وارد میکنم این پیغام خطا میاد که گفتم.
:گیج:

maamiri
دوشنبه 25 آذر 1387, 12:15 عصر
میشه بپرسم این شماره پورتی که دادید همون شماره پورت glassfish ؟
شماره پورت glassfish که رو سیستم من باز شده 10701

javaphantom
دوشنبه 25 آذر 1387, 12:37 عصر
میشه بپرسم این شماره پورتی که دادید همون شماره پورت glassfish ؟
شماره پورت glassfish که رو سیستم من باز شده 10701


دوتا jar file باید به classpath برنامه client خودت اضافه کنی.
میری توی شاخه glassfish توی lib اونا این دوتا فایل appserv-rt.jar, javaee.jar
بعد از properties من استفاده کن

maamiri
دوشنبه 25 آذر 1387, 15:58 عصر
ممنون از اینکه وقت میزاری.اما هنوزم مشکل داره.
وقتی با پورت ۴۳۲۵ تست میکنم این پیغام میاد
WARNING: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 4325"
اما وقتی با پورت ۱۰۷۰۱ تست میکنم م۱۰ ثانیه مکث میکنه و بعد این پیغام میاد
javax.naming.CommunicationException: Can't find SerialContextProvider [Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe]
اون فایهایی رو هم که گفتی تو شاخه lib نرم افزارnetbeans خودم add کردم اما متاسفاهنه هنوز همین پیغام رو میده:عصبانی++:

maamiri
دوشنبه 25 آذر 1387, 16:09 عصر
منظورم شاخه libraries پروژه client تو netbeans بود:خجالت:

cups_of_java
دوشنبه 25 آذر 1387, 17:09 عصر
کلیت سوال مربوط به java naming and directory interface هست. هیچ ربطی به معقوله ejb نداره که حالا بخواد مربوط به نسخه چندم ejb باشه.
وقتی صحبت از RMI یا همون Remote Method Invocation می شه، سر کله jndi هم پیدا می شه.

علت اینکه من به سراغ مثال از ejb شدم به این علت بود که از jndi به session پریدیم و من حدث زدم که شاید منظور از session ودر کنار اون jndi باید منظور اصلی ejb session باشه. برای همین به سراغ مثال از ejb شدم.

شما برای دسترسی به ejb session های remote باید از jndi استفاده کنید مخصوصا وقتی بخواهید مقداری بازگشتی داشته باشید یعنی مانند مثال من یک رشته از سمت server از طریق remote به سمت client بر گردونده بشه.

حرف من سر JNDI نبود. سوال این بود که فرق این دو کاریرد JNDI چیه! منم گفتم که دومی مال زمانی بود که مجبور بودیم برای دسترسی به شی HOME در EJB2.1 از narrow استفاده کنیم ولی در EJB3 (مثال شما) می شه بطور مستقیم cast کرد و با خود شی EJB کار کرد.

وگرنه ایشون باید بدونه که JNDI چیه و چه کاریرد هایی داره...!

javaphantom
دوشنبه 25 آذر 1387, 17:55 عصر
ممنون از اینکه وقت میزاری.اما هنوزم مشکل داره.
وقتی با پورت ۴۳۲۵ تست میکنم این پیغام میاد
WARNING: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 4325"
اما وقتی با پورت ۱۰۷۰۱ تست میکنم م۱۰ ثانیه مکث میکنه و بعد این پیغام میاد
javax.naming.CommunicationException: Can't find SerialContextProvider [Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe]
اون فایهایی رو هم که گفتی تو شاخه lib نرم افزارnetbeans خودم add کردم اما متاسفاهنه هنوز همین پیغام رو میده:عصبانی++:

خوبه داری پیش رفت می کنی. مشکل از نتظیمات glassfish. با browser میری توی نتظیمات glassfish
بصورت default توی glassfish در سطح admin روی port 4848 می باشد.
کافی توی browsers توی address bar بزن یعنی بنویس localhost:4848 بعد صفحه تنظیم glassfish ظاهر می شه
با زدن username & password برای سطح دسترسی admin که خودت قبلا تنظیم کردی وارد تنظیمات glassfish از طریق brower می شی. اون پایین سمت چب فسمت configuration کلیک می کنی بعد ORB بعد IIOP Listener بعد ORB-Listener-1 روی اون کلیک می کنی صفحه جدید کنارت سمت راست refresh می شه بعد Listener port رو به او عددی تغییر بده که توی properties مقدار دادی . بعد save کن . دباره اجرا کن

maamiri
دوشنبه 25 آذر 1387, 19:06 عصر
:بوس::لبخندساده:

javaphantom
دوشنبه 25 آذر 1387, 20:13 عصر
:بوس::لبخندساده:

اینا یعنی چی؟:قهقهه: بدردت خوردم یا نه؟

maamiri
سه شنبه 26 آذر 1387, 12:26 عصر
قربون پسر برم من ...
جواب داد..اونم چه جوابی ولی یه غلط املایی داشتید..البته ببخشیدا...شما جای استادمی اما خوب چون بقیه هم ممکنه بخوان استفاده کنن اینو گفتم.تو خط
(HelloRemote) ctx.lookup("HelloRemote");
گفته بودید که درستش اینه
(HelloRemote) ctx.lookup("HelloBean");
.در ضمن من یک مشکلی دارم.وقتی کامپایل میکنم پیغام میاد که فایل HelloBean پیدا نشد.من این کارو کردم و مشکل حل شده.فکر کنم مشکل از netbeans 6.5 باشه چون تو 6.1 این مشکلو نداشتم.
@Stateless(mappedName="HelloBean")
در کل ممنون.خیلی کمک کردید.خداییش اینا رو من تو هیچ کتابی ندیدم که گفته باشه.لا اقل تو اون ۳ تا کتابی که من داشتم.یعنی اگه ۲ سال هم وقت میزاشتم باز به جواب نمی رسیدم بخدا.
بازم ممنون.من که دیگه ول کنت نیستم.کلی سوال دارم که به ترتیب ازت میپرسم.گیر بد کسی اوفتادی:لبخند::تشویق::چشمک:: وس::قلب:

maamiri
سه شنبه 26 آذر 1387, 12:44 عصر
:عصبانی++::گریه:
نه هنوز مشکل داره.تو commend وقتی فایل jar مربوط به client رو اجرا میکنم این پیغام میاد
Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
:گیج:

javaphantom
سه شنبه 26 آذر 1387, 19:55 عصر
:عصبانی++::گریه:
نه هنوز مشکل داره.تو commend وقتی فایل jar مربوط به client رو اجرا میکنم این پیغام میاد
Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
:گیج:
اون دوتا فایلی که بهت گفتم تو چندتا post قبل javaee.jar با یکی دیگه الان اسمش یادم نیست توی classpath اضافه کن.
قبلا netbeans برات handle می کرد حالا خودت باید بکنی.

در مورد اشکال دومی که گفتنی پیدا نمی کنه برای اینکه خودت اومد به یک اسم بی ربط map کردی بعد نزاشتیش توی web app من آدرس مستقیم بهت دادم برای همین map رو ایراد می گیره یعنی پیدا نمی کنه.
اگر مشکل غلط املایی دارم دیگه خودت درست کن. من اینرو که اجرا نمی کنم که ببنم کجا ایراد داره برای همین ممکنه غلط املایی پیدا کنی

maamiri
سه شنبه 26 آذر 1387, 22:03 عصر
والا من كه تو پاراگراف دوم نفهميدم چي گفتي دوست عزيز
ميشه واضح تر توضيح بدي؟

javaphantom
سه شنبه 26 آذر 1387, 23:45 عصر
والا من كه تو پاراگراف دوم نفهميدم چي گفتي دوست عزيز
ميشه واضح تر توضيح بدي؟

می ری توی جایی که glassfish رو داری .
توی folder ی که به نام lib هست در آدرس glassfish اونجا دوتا فایل جر رو به classpath سمتclient اضافه می کنی. این دوتا فایل عبارتند از

javaee.jar
appserv-rt.jar
توی netbeans خودش این کارو برات می کنه ولی اینجا چون دیگه خبری از اون نیست خودت باید به classpath سمت clinet اضافه کنی

maamiri
پنج شنبه 28 آذر 1387, 13:05 عصر
متاسفانه اين كارو كاردم جواب نداد...!!:افسرده:
دليل ديگه اي هم ميتونه داشته باشه؟

javaphantom
پنج شنبه 28 آذر 1387, 16:37 عصر
متاسفانه اين كارو كاردم جواب نداد...!!:افسرده:
دليل ديگه اي هم ميتونه داشته باشه؟

یک کار مسخره چون من یادم نیست کدوم از jar فایلها رو نیز داری هرچی jar فایل توی فلدر lib ی توی glassfishت هست رو به classpath سمت client اضافه کن

maamiri
پنج شنبه 28 آذر 1387, 16:45 عصر
قبل از اينكه شما بگي ..اين كار رو انجام دادم...نشد :ناراحت::عصبانی++:

javaphantom
پنج شنبه 28 آذر 1387, 17:18 عصر
قبل از اينكه شما بگي ..اين كار رو انجام دادم...نشد :ناراحت::عصبانی++:

jar فایلی که ساختی رو بزار توی سایت همراه با source تا بهت بگم چی کار باید بکنی

maamiri
پنج شنبه 28 آذر 1387, 17:51 عصر
لطفا آدرس mail تو بزار تا برات بفرستم.

javaphantom
جمعه 29 آذر 1387, 10:02 صبح
لطفا آدرس mail تو بزار تا برات بفرستم.

همینجام می تونستی بزاری ولی خوب
javasurgeon@yahoo.com

maamiri
جمعه 29 آذر 1387, 19:41 عصر
برات ميفرستم.اما يك سوال دارم ازت...
بجز اين روشي كه session روشهاي ديگه اي هم وجود داره؟اگه هست اسمشون رو بگو تا در باره شون مطالعه كنم.:متفکر:
باز هم ممنون:قلب:

javaphantom
جمعه 29 آذر 1387, 20:35 عصر
برات ميفرستم.اما يك سوال دارم ازت...
بجز اين روشي كه session روشهاي ديگه اي هم وجود داره؟اگه هست اسمشون رو بگو تا در باره شون مطالعه كنم.:متفکر:
باز هم ممنون:قلب:

اگر منظورت JNDI هست که کجاها بدرد می خوره اون بار توضیح دادم ولی خوب این بار بیشتر می گم
هر موقع که ما بخواهیم از یک JVM به یک یا چند JVM دیگه در تماس باشیم یعنی ارتباط داشته باشیم سراغ JNDI می ریم.
در RMI همانطور که گقتم چون بحث ارتباط بین دو JVM جدا از هم هست مثل همون چی که اول گفته هام بهش اشاره کردم سراغ JNDI می ریم.
اما چیزی که ‌EJB یا همان Enterprise Java Beans ها رو بسیار قدرت مند کرده وباعث شده که هیچ تکنولوژی نتونه فعلا با اون مقابله کنه وجود container اون هست. شما وقتی که با EJB می خواهید کار کنید بصورت ناخودآگاه مجبوری با خیلی از مفاهیم Java EE هم بصورت عملی و هم بصورت تئوری در گیر بشی. برای مثال همین JNDI+RMI و به دنبال اون JTA یاه همان Java Transaction API و بعد از اون بدون اینکه متوجه بشی JMS یا Java Message Service که همگی شامل تکنولوژی های Java EE هست و کلی مطلب پشتش هست که وقتی حساب می کنی می بینی بابا همون ASP عقب مونده بهتر از همشونه یا PHP. اکثر کسانی هم که من می بینم که در لایه JEE کار می کنند برای فرار از این مفهومات و تکنولوژی های J2EE که پیش نیاز همه آنها داشتن سواد آکادمیک هم در معقوله سخت افزار و هم در معقوله نرم افزار + تجریه زیاد در مورد پیاده سازی وداشتن دانش در مورد تحلیل و طراحی سیستم های نرم افزاری هست. چون بسیار در این مطالب فقیر هستند البته به کسی بر نخوره من منطورم خودم هستش تصور و درکشون از تکنولوژی و زبان قابل فهم نیست بطوری که فقط طرف دنباله کد می گرده. برنامه ای نوشتم که این کار و می کنه. برنامه برای من بنویسد که این کار رو بکنه. نیاز به کد دارم. زبان جاوا قدرت مند چون بعد می بینی رفته کتاب نشته ترجمه کرده و به خیالش کلی کار انجام داده در صورتی که کسی که تحصیلات آکادمیک گزونده باشه می فهمه که چه زبانی خوب می گن و باید چه خصوصیاتی داشته باشه و انتخاب زبان خودش برای معمار و تیم طراحی یک هنره. نه اینکه طرف چون delphi بلده هرچی پروژ دید بگه من با delphi انجام می دم یا جاوا یا C# یا هرچی. و طرف دائم دنبال کد باشه.
بحث بعدی که می خوام بگم اینکه چیزی که تکنولوژی های java EE رو پیاده سازی می کنه زبا جاواست. برای همینه که این زبان انقدررو به محبوبیت داره می ره و البته کامل بودن اون نسبت به دیگر زبانهای object orientedی. چون C# هم کپی جاوا بصورت ناقص هست ولی چون از لجاظ تکنولوژی ضعیفه برای همین پروژهای سازمانی با اون پیاده سازی نمشه.
بحث بعدی که می خوام بگم از همه اینها مهمتره و اون بحث استاندارد بودن هست. شما شاید توی یک شرکتی کار کنی که اون شرکت برای تامین یک سری از نیازهاش بشینه و یک سری component یا framework درست کنه. وقت می بره هزینه داره کار جای ارزش داره ولی یک ضعف بزرگ داره که همرو می بره زیر سوال و اون استاندارد نبودن محصول هست. چرا؟ چون یک محدود به همون شرکت و تیم اون شرکت هست. غیرقابل گشترش و قدرتمندتر شدن این محصول هست. چون تیم طراحی هر چی بلد بوده دیگه پیاده سازی کرده اون استاندارد نیست از بیرون هم نمی شه کاری کرد باید یک تیم بیاد کلی هزینه کنه تا ببینه داستان چی بوده و چی می خواد بشه. از همه مهمتر عدم پشتیانی از محصول هست. چون استاندارد نیست پشتیانی هم نمی شه صورت گرفت. کلی باید هزینه بشته که اون تیم محصول رو روپا نگه داره. کسانی که الان توی شرکتهای IT درحال کار هستند ۱۰۰٪ متوجه حرف من می شن. شرکت از محصول غیر استاندردش داره نون می خوره. تیم همه فکر و ذکرش محصول غیر استانداردش هست. در نتیجه همیشه داره عقب می ره. و بعد از یک مدت خودشو محصولش محو می شن تمام اینها رو گفتم که برم سراغ ejb و بگم این مصحول اسناندارد هست. مثلا فریم ورک ejb3 طبق استانداردهای JCP و تولید شرکت IBM هست. بعد می بینی بیش از ۳۰۰ شرکت ITو مخابراتی دارن روی این محصول کار می کند. براساس یکسری استاندارد که از طرف سان JCP داره مدیریت می شه درنتیجه پشتیانی هم بوجود می یاد و رقبا یکی یکی از گردونه خارج می شن.
ejb container خیلی از پیچیده گی های کد نویسی رو از بین برده ولی کلی مفهوم هم کنارش گذاشته + اینکه در صورتی که شما خواستید می تونید به لایه های پایین تر هم دسترسی داشته باشید. ejb3 بر اساس RMI هست + کلی از پیچیده گیهای RMI رو حل کرده. شما یک بار برو RMI بخون و با API های اون کار کن بعد بیا دباره سراغ EJB بعد می تونی ببینه کلی بیل زدن رو برات بیل زده ولی باز دستت باز هست. شرطش دونستن کد نیست. اشتباهی هست که کسانیکه تازه واحد C++ رو پاس کردن می خوان بیان سراغ جاوا همینه که فکر می کنند که جاوا یک زبانی آموزشی هست در صورتی که جاوا یک زبان تجاری هست و باید ازش پول درآورد. گاسلینگ کسی که تئوریزیسین سان هست خودش می گه زبان وسیلست، هدف نیست. دونستن مفاهیمه که می تونه به شما کمک کنه که یک پروژه رو جلو ببرید و از تکنولوژی درست استفاده کنید. کد زدن که کاره هیمن کسانی هست که توی این فروم هم زیاد هستند. دائم دنبال کد هستند. این آدمها رو کلا با ماهی ۵۰۰ با ۶۰۰ هزارتومان استخدادم می کنی می شینن برات کد می زنند. مثل کارگرهای ساختمان که دارن جوش می دن وآجر می دازن بالا.
من پیشنهادم به شما اینکه حالاکه تصمیم گرفتید بهصورت مفهومی جلو بیایید و فهمیدید که راه چاره کد نیست بلکه مطالعه هست
کتابهای زیادی هست که می تونم بهتون معرفی کنم که بخونید. ولی مهم اینه که من بدون شما چقدر از لحاظ پایه ای قوی هستید.
دنبال چی هستید؟
در مورد RMI مطالعه بکنید اونجاهم گیره JNDI می افتی و همچنین JMS همنطور

javaphantom
جمعه 29 آذر 1387, 20:38 عصر
چیزی که یادم رفت بگم اینکه این بحث بین من وشما خصوصی شده. هیچ کس نمیاد یک نظری بده یا حرفی بزنه. در صورتکی این همه اساتید اینجا هستند. واقعا حیفه . من شاید درام اشتباه می گم یا دارم اشتباه راهنمایی می کنم؟!

maamiri
جمعه 29 آذر 1387, 21:25 عصر
با همه حرفهايي كه زدي موافقم...من تازه به حرفت كه مي گفتي جاوا وسيلست و هدف نيست پي بردم...جاوا واقعا يك معماري بزرگه كه جزء به جزءش مهمه و بايد تمام اجزاء اون رو شناخت...
والا نمي خوام خالي ببندم و يا قلو كنم اما من تئوري جاوا رو بر عكس خيلي ها بلدم اما چطور پياده كردنش رو بلد نيستم...مثلا به همين jndi كه بحشو داريم ميكنيم نگاه كن من ميدونستم كه چيه و چيكار ميكنه اما روش پياده كردنش رو بلد نبودم.با اين اوصاف فكر ميكنم اينكه ميگيد 1 يا دو سال طول ميكشه تا آدم به يه جايي برسه در جاوا واقعا راسته..
اون چيزي رو هم كه گفتي اين بحث خصوصيه اشتباهه..اينقدر اين بحث كاربرديه كه متمعنم اگر كسي مثل من اين مشكل رو داشته باشه و بياد تو اين بخش حتما مثل من مشكلش حل ميشه
امروز persistence رو هم پياده كردم ...هم تونستمquery بگيرم و هم اطلاعات وارد ديتا بيس mysql بكنم...البته اون بحث قبلي بود كه قبلا پرسده بوم و جواب دادي ...كلي آدم كيف ميكنه وقتي به جواب ميرسه...اينهم به لطف و كمك شما بود....الان ميدونم از جاوا و مفاهيمش چيز زيادي نمي دونم و بايد كلي مطالعه داشته باشم...يك عالمه مممنون:قلب::تشویق:

cups_of_java
یک شنبه 01 دی 1387, 02:12 صبح
حرف های javaphantom درسته. بزار من نقطه نظرامو اضافه کنم.
اول اینکه Java EE فقط به EJB منتهی نمی شه. EJB قطره ای از این دریاست. درسته EJB استاندارده اما از اول اینقدر خشن و خشک بوده که مخالفانشم کم نبودن. امکاناتی که EJB می خواسته در اختیار نرم افزارهای سازمانی بزاره اینقدر وسیع و پیچیده بوده که در نسخه های ابتداییش نتونست اونا رو درست جمع کنه. EJB برای همه همیشه گنده بوده. سخت بوده. از هر جهت (هم پیاده سازی، هم تکنیکی و کاربردی) تمام تلاش Sun و بقیه تو JCP این بوده که EJB رو آسون کنن. طوری که پیچیدگی هاش رو بشه مدیریت کرد. کم کم دارن این کارو می کنن البته. اما همین مسائل به مرور زمان موج دیگه ای رو درست کرده که به جای استفاده از EJB از فریم ورک های غیر containerی مثل Spring استفاده می کنن که تعدادشون هم اصلن کم نیست. پیچیدگی و تنوع تو محیط های جاوا خیلی زیاده! برا همین هر کسی از پسش بر نمیآد. Springی ها هم به خاطر زیاد شدنشون به نوعی استاندارد شدن هرچند که تو SUN گروه JSR ندارن ;) وجود همین فریم ورک ها اصلن به Java EE کمک کرد تا بلوغ پیدا کنه. ایده های Hibernate و Spring و ... توی Java EE الان اومده در قالب JSR استاندارد شده! این خیلی قشنگه! تجارب موفق هستن که تکنولوژی رو می سازن!

در مورد Containerی بودن Java EE این که این روش خیلی مزایا داره اما معایبی هم داره (برا همین برخی نمی پسندش، البته واضحه وقتی تو می خوای کشتی سواری کنی باید منتظر دریا گرفتگی هم باشی)، هر دو طرف قضیه رو باید درک کرد. Containerی بودن تست و debug نرم افزار رو بسیار پیچیده و سخت تر می کنه. پیچیدگی های محیط اجرا رو بالا می بره و ... ولی خب بدون container هم گاهی اصلن نمی شه زنده موند ;)

حرف آخرم هم در مورد JNDI هستش. JNDI هیچی نیست جز یه سری API استاندارد و ساده برای دسترسی به سرویس ها و یا دایرکتوری ها. برای اینکه تو جاوا برای اتصال به سرویس هایی مثل Ldap، RMI، CORBA، DNS و یا هر سرویس دیگه ای مثل ConnectionPoolها و EJBها و ... یک و فقط یک راه ساده و استاندارد باشه JNDI رو طراحی کردن. JNDI باعث می شه کد تو بدون دونستن جزییات پیاده سازی سرویس (برای دسترسی به اون سرویس) بتونه به سرویس دسترسی داشته باشه. حالا تو RMI و یا EJB هم همین کاربرد رو داره. تا باهاش کار نکنی خوب برات جا نمی افته در حالی که چیز خاصی نیست.

maamiri
یک شنبه 01 دی 1387, 10:17 صبح
میدونم که مثلا میشه از jndi برای اتصال به ldap استفاده کرد و مجوزهای سرور مثل یوزرنیم و پسوورد رو از اون گرفت برای همین یک سرور ldap روی لینوکس ubuntu در خونه راه انداختم که بعدا به اون join بشم از ejb اما فعلا تو پیاده کردن jndi مشکل دارم.
javaphantom (http://barnamenevis.org/forum/member.php?u=17370) عزیز متوجه شدی مشکل من در پیاده کردن jndi چی بوده.فایل رو mail کردم:ناراحت:

javaphantom
یک شنبه 01 دی 1387, 15:48 عصر
میدونم که مثلا میشه از jndi برای اتصال به ldap استفاده کرد و مجوزهای سرور مثل یوزرنیم و پسوورد رو از اون گرفت برای همین یک سرور ldap روی لینوکس ubuntu در خونه راه انداختم که بعدا به اون join بشم از ejb اما فعلا تو پیاده کردن jndi مشکل دارم.
javaphantom (http://barnamenevis.org/forum/member.php?u=17370) عزیز متوجه شدی مشکل من در پیاده کردن jndi چی بوده.فایل رو mail کردم:ناراحت:

من از کسی ‌emailی دریافت نکردم:متفکر:

maamiri
یک شنبه 01 دی 1387, 17:59 عصر
فكر كنم آدرسي كه دادي اشتباهه..لطف كن يك بار ديگه چك كن آدرس و mailات رو..من دوباره فرستادم...ممنون

javaphantom
یک شنبه 01 دی 1387, 20:29 عصر
فكر كنم آدرسي كه دادي اشتباهه..لطف كن يك بار ديگه چك كن آدرس و mailات رو..من دوباره فرستادم...ممنون

همانطور که گفتم مشکل شما بخاطر نتظیمات classpath هست. این IDE ها سم هستند برای کسانی که حتی ۲ بار بصورت syntaxی یک پروژه را تا مرحله اجرا نیاورده باشند. من به شما خرده نمی گیرم چون واقعا حق دارید.

من دیروز یک email خصوصی از جناب mazdadoost گرفتم که حرفهای خیلی خوبی زده بود و ای کاش اونرا ایجا یک بار دیگه برای همه بازتاب می کرد.

بگذریم بریم سراغ جواب.
آقا توی netbeans در قسمت client تون وقتی clean and build می کنی یک فلدر کنار باقی داستانت درست می کنه به نام dist که وقتی وارد این فلدر می شی یک jar فایل می بینی. شما بیا کنار این jar فایل یک فلدر درست کن با نام lib داخل این فلدر lib بیا این سه تا jar فایل رو کپی کن. از توی glassfish/lib همون دوتا فایل appserv-rt.jar و javaee.jar بعد برو توی پروژه ejb ی که ساختی، اونم یک فلدر به نام dist درست کرده که یک jar فایل با نام EJBHello برات ساخته دیگه ، اون jar فایل هم کپی کن کنار اون دوتا توی فلدر lib خوب. این مرحله اول.
مرحله دوم بر می گرد به زمان java se و jar فایل درست کردن. دیگه ربطی به زبان نداره.
با یک برنامه که بتونه rar فایل باز کنه پروزه client رو که در کنار فلدر lib هست باز کن. وارد فلدر META-INFش بشو بعد اونجا یک فایل هست به نام MANIFEST.MF وارد اون فایل بشو در آخرین خط این فایل class-path رو معرفی کن چه جوری ؟ این جوری

Class-Path: lib/appserv-rt.jar lib/javaee.jar lib/EJBHello.jar

نکات زیر رو حتما چک کن. بعد نوشتن این مزخرافات حتما یک enter بزن که یک خط پایین بیایی. بعد فایل رو save کن.
نکته بعدی مطمعن شو که فایل تو، توی jar فایل save یا همان update شده. البته بستگی به نرم افزاری داره که داره داخل جر فایل رو بهت نشون می ده.
بعد مطمعن شو که ejb تو در web app ی که داری deploy شده
بعد با دستور

java -jar ApplicationClientHello.jar درهمون فلدر dist که مربوط به client هست برنامت رو اجرا کن

maamiri
یک شنبه 01 دی 1387, 20:49 عصر
ممنون از اين كه وقت گذاشتي برام...
من تقريبا اين كار ها رو انجام دادم بجز تغييرات در فايل manifist...يك كار ديگه كه من اشتباه كردم اين بود كه classpath رو از داخل terminal لينوكسم انجام مي دادم نه دا خل فايل..ممنون .مرحله به مرحله چك ميكنم.:تشویق:
:بوس:

maamiri
دوشنبه 02 دی 1387, 06:07 صبح
فکر کنم من یکمی بدشانسم:متعجب:
آدرسا رو set کردم آما این پیغام میاد.
Could not find the main class: applicationclienthello.Main lib/appserv-rt.jar lib/javaee.jar lib/EJBHello.jar. Program will exit


یکم این ور و اون ور سایتها رو جستجو کردم .همه همین جوری آدرس دادن.پس مشکل از چیه؟:گریه:آخه وقتی آدرس درسته چرا میگه فایلها پیدا نشد؟ها ها:گیج:
خل میشوم...:عصبانی++:

javaphantom
دوشنبه 02 دی 1387, 14:38 عصر
فکر کنم من یکمی بدشانسم:متعجب:
آدرسا رو set کردم آما این پیغام میاد.
Could not find the main class: applicationclienthello.Main lib/appserv-rt.jar lib/javaee.jar lib/EJBHello.jar. Program will exit


یکم این ور و اون ور سایتها رو جستجو کردم .همه همین جوری آدرس دادن.پس مشکل از چیه؟:گریه:آخه وقتی آدرس درسته چرا میگه فایلها پیدا نشد؟ها ها:گیج:
خل میشوم...:عصبانی++:

می خوای برات یک برنامه خودم بنویسم با source ش برات بزارم؟:لبخند:

maamiri
سه شنبه 03 دی 1387, 07:41 صبح
ممنون .یه جای قزیه میلنگه...
:قهقهه:

maamiri
سه شنبه 03 دی 1387, 10:29 صبح
دیدی یک جای قزیه میلنگه...:قهقهه::گریه:
باید دوتا فایل دیگه هم به نامهای appserv-deployment-client.jar appserv-ext.jar
اضافه می کردم...به هر حال الان مشکلم حل وشد..:لبخند:
این جریان باعث شد که با deploy کردن و manifest و خیلی چیزای دیگه بیشتر آشنا بشم.
دمت گرم داداش :قلب::بوس:
بوس بوس