PDA

View Full Version : چگونه روی localhost سرور jsp راه اندازی کنیم ؟



hrmprog
شنبه 25 اسفند 1386, 09:55 صبح
همانطور که می دانید می توان بدون نصب محیط های توسعه نرم افزار در مورد ASP.NET و PHP روی localhost سرور ایجاد کرد . آیا این امکان برای Java نیز امکان پذیر است ؟
من می خواهم یک سرور محلی ایجاد کنم . چه برنامه هایی را باید نصب کنم و چه تنظیم هایی را باید انجام دهم ؟ در ضمن سیستم عامل من ویندوز است . در حال حاضر سرور دات نت و PHP ( با استفاده از IIS ) و SQL و MySQL روی آن نصب است .
با تشکر:بوس:

amirshiva
شنبه 25 اسفند 1386, 10:33 صبح
به سایت زیر مراجعه کننید
http://tomcat.apache.org
وtomcat 6 راداونلود کنید(راحترین web server جاوا)
جزئیات داخل فایلش هست

saeed_Z_F
یک شنبه 26 اسفند 1386, 08:28 صبح
سلام
Apache tomcat یکی از application server های جاوا است شما گزینه های کاملتری مانند Glassfish و weblogic و JBoss و... را نیز در اختیار دارید که هر کدام مزیتها و معایب خود را دارند البته یک application server کامل باید تمامی قابلیت ها و استاندارد های Java EE 5 را پیاده سازی کرده باشد .
در کل باید ببینید بسته به نیاز کدامیک بدرد شما می خورد.

javaphantom
یک شنبه 26 اسفند 1386, 18:14 عصر
سلام
Apache tomcat یکی از application server های جاوا است شما گزینه های کاملتری مانند Glassfish و weblogic و JBoss و... را نیز در اختیار دارید که هر کدام مزیتها و معایب خود را دارند البته یک application server کامل باید تمامی قابلیت ها و استاندارد های Java EE 5 را پیاده سازی کرده باشد .
در کل باید ببینید بسته به نیاز کدامیک بدرد شما می خورد.

کمتر جایی هست که قبول داشته باشند که tomcat یک application server هست توی کتابهای core java به انی اشاره شده است که tomcat یک container است که برای servlet و jsp می باشد.

JBoss , Glassfish رو به عنوان application server می دونند که هر دو open source هستند.
حالا واقعا یک application server چیه به چه چیز می توان گفت application server
Remote Method Invocation
باید منطقی وجود داشته باشه که بشه از لایه های مختلف ارتباط بین آنها برقرار کرد.
Load Balancing
همه ما می دونیم که ممکنه یک سرور با مقدار زبادی کاربر مواجه بشه و همین امر باعث می شه سر بار یا همان over head برای سرور بوجود بیاد باید در این موقع بتوان از تقاضای موجود روی سرور را به سرور های دیگر منتقل کرد.
Transparent Failure
اتفاقه دیگه ممکن server قطع بشه (crash) کنه یا اینکه توی شبکه اختلال ایجاد بشه و این امکان باید وجود داشته باشه که کاربر رو زمین و هوا نباشه و باید از طریق یک مسیر دیگه به یک server دیگه وصل بشه. حالا با چه سرعتی و با چه زمانی این مسئله صورت بگیره بازم مهم هست.
Transaction
مهمترین قسمت همین بحث transaction می باشد. چه اتفاقی می افته وقتی که دوتا کاربر باهم همزمان از یک منبع شروع به استفاده کردن می کنند و در یک لحظه زمانی؟ یا فرض کنیم طرف از حسابش پول برداشته توی transaction طرف database عمل commit صورت کرفته ولی هنوز پول به دشته طرف نرسیده سرور crash کنه. حالا خر بیار باقالی بار کن.
Clustering
آقا اگر سرور crash کرد برای یک مدت طولانی ملت چی کار کنن مگه ایرانه؟ باید باقی سرور ها بتونند سرویس بدند دیگه.
Dynamic redeployment
اگر یک سرور Update شده برنامه هاش حالا تکلیف بقیه چیه بشین تا یکی همون فایلها رو ببره اون هارم update کنه. مگه ایرانه؟ باید طوری باشه که بطور همزمان بقیه هم بتونند update بشند.
Component Lifycycle
از همه مهتر همین componentبازیه که مدریت طول عمر component های ما باید مدیریت بشه حالا اونایی که می گن tomcat یک application server هست حتما این کار رو می کنه!؟
نه عزیزان tomcat از کارا بلد نیست. نه این کارو خیلی کار های دیگرهم نمی تونه بکنه که من توی این لیست آوردم
Caching
فرض کنید یه بابایی هر روز صبح حسابش رو چک می کنه حالا چقدر خوب می شد که این server بدبخت به جایی اینکه هروز بره query به زنه یک حافظه کنار می زاشت که این بابا اومد زیاد الاف نشه سریع به صورت cache به زاره جلوش خوبه نه؟
pooling connection
یکی دیگه از خواص مهم همین است که به تعداد معینی stream برای ایجاد connection با database بوجود بیاید و در صورتی که بی کار شد در درون یک استخر یا همان pool بی افتد و کاربر بعدی که اومد سریع connection رو بدن دستش.

حالا خودتون بگین چند از این کارها رو tomcat انجام می ده.
توی تمام application server های که برای جاوا هست مانند jboss و glassfish و و و همگی دارای یک containerبرای jsp , servlet هستند که مثلا jboss از tomcat استفاده می کنه.

hrmprog
یک شنبه 26 اسفند 1386, 18:29 عصر
آیا امکان داره از IIS استفاده کرد ،‌ شبیه همان کاری که برای PHP انجام می دهیم ؟

javaphantom
یک شنبه 26 اسفند 1386, 18:59 عصر
آیا امکان داره از IIS استفاده کرد ،‌ شبیه همان کاری که برای PHP انجام می دهیم ؟

IIS یک container برای asp هست شما می توانید php یا asp توی اون بندازید و اون برایتان کار انجام بده.
IIS عقب مونده ترین application server دنیاست. tomcat خیلی پیشرفته تر و قوی تره از کل IIS چی به رسه به weblogic یا sun یا JBoss اونا که دیگه داغون می کنند.

IIS ماله عمو بیلی هست فقط روی windwos بالا می آید حالا خود windows چه مزخرفی هست که جای خود دارد. متاسفانه کدی از اون بیرون نمی دن که ببینی چه چیز ناراحتی یا حتی بشه در جاهای آکادمیک مخصوصا دانشگاه در مورد صحبت کرد یک سیستم عامل تجاری از نوع عقب مونده

به نظر من شما از اون دسته آدمها هستید که نمی خواهید چیزی یاد بگیرید. این همه توضیح دادن بقیه بازم رفتی سر حرف خودت.
IIS چیه دیگه؟ برو تحقیق کن از مواردی که بالا برات گفتم ببین کدوم از اینها رو IIS می تونه حتی یک ذره اش رو پشتیبانی کنه؟ تازم بکنه روی چی؟ روی سیستم عامل windows که یک thread ساده هم نمی تونه handle کنه. یک برنامه Update می شه توش یا یک دونه برنامه جدید روش نصب می شه restart لازمه. ببین اون دیگه چه سروری هست :قهقهه:
طفلک

anubis_ir
دوشنبه 27 اسفند 1386, 07:39 صبح
بله (IIS) می‌تونه. اون بحث ری استارت کردن سرور هم مربوط بود به تکنولوژی com و استفاده از کامپوننت‌های مربوطه که الان با دات نت چندین سال است از این خبرها نیست.
pooling connection رو باید دیتابیس سرور انجام بده نه IIS . این مورد هم در سمت کلاینت ADO.NET‌ و هم در SQL server به خوبی پیاده سازی شده.
بحث‌های کلاسترینگ و غیره هم مربوط است به سیستم عامل که ویندوز هم در این زمینه مشکلی نداره. اصولا ذاتا ارتباطی به وب سرور ندارد. سیستم‌ عامل این موارد رو مهیا کرده. بدیهی است هم اس کیوال سرور و هم IIS یکپارچگی خوبی رو در این زمینه می‌تونند ارائه بدهند و به اندازه کافی کتاب و مقاله در این زمینه موجود است.
بحث Transaction هم در دیتابیس سرور پیاده سازی میشه. این چه ربطی به وب سرور داره برادر من.

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

hrmprog
دوشنبه 27 اسفند 1386, 11:15 صبح
یادتان باشد که زکات علم انتشار آن است .
خیلی متاسفم ، اگر نمی خواهید جواب درست بدهید لطفا توهین نکنید .

javaphantom
دوشنبه 27 اسفند 1386, 11:58 صبح
بله (IIS) می‌تونه. اون بحث ری استارت کردن سرور هم مربوط بود به تکنولوژی com و استفاده از کامپوننت‌های مربوطه که الان با دات نت چندین سال است از این خبرها نیست.
pooling connection رو باید دیتابیس سرور انجام بده نه IIS . این مورد هم در سمت کلاینت ADO.NET‌ و هم در SQL server به خوبی پیاده سازی شده.
بحث‌های کلاسترینگ و غیره هم مربوط است به سیستم عامل که ویندوز هم در این زمینه مشکلی نداره. اصولا ذاتا ارتباطی به وب سرور ندارد. سیستم‌ عامل این موارد رو مهیا کرده. بدیهی است هم اس کیوال سرور و هم IIS یکپارچگی خوبی رو در این زمینه می‌تونند ارائه بدهند و به اندازه کافی کتاب و مقاله در این زمینه موجود است.
بحث Transaction هم در دیتابیس سرور پیاده سازی میشه. این چه ربطی به وب سرور داره برادر من.

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


آره عزیز جان طرف که مبتدی هست که در اون شکی نیست و از اینکه شما هم بی سواد هستید شکی نیست.
من جواب تک به تک گفتها تون رو می دم با ذکر منبع و یک سر سایت هرچند می دونم که هیچ کدومش رو نمیری بخونی اگرم بخونی نمی فهمی چی هست باید کلی بعدش بری مطالعه کنی ولی خوب یک حسنی که داره اینکه باقی که می یان و احیانا می خونند . با خوندن این مطالب می فهمن که چرا انقدر همه می گن JEE و دارن به این سمت تکنولوژیهای JEE می آیند.
مطالب خیلی مفصل هست که من بخوام همشو توضیح بدم ولی خوب به اختصار اشاره می کنم با ذکر منابع.

فرمودید: pooling connectionرو باید دیتابیس سرور انجام بده نه IIS . این مورد هم در سمت کلاینت ADO.NET‌ و هم در SQL server به خوبی پیاده سازی شده.

مهندس ما داریم در مورد web صحبت می کنیم ها می فهمی یعنی چی یعنی اینکه سرور باید ایجاد connection کنه شایدم کاره شما درسته شما از طریق browser تون مستقیم با database ایجاد connectionمی کنید تو معماری web وقتی صحبت از سمت client می کنیم همون لایه presentation هست که فقط همون browser هست می تونه applet هم باشه ولی کلان ADO.NET این حرفها معنی نمی ده. پس وقتی که قراره server ایجاد connection با database کنه اون موقع pooling connection معنی می ده البته شاید OS شما همون windows کبیر برا تون connection می گیره :قهقهه: نه عزیز توی دنیای من OS از این کارا نیم کنه وظیفه application server هست که برای من connetion هایی که از طرف client سرازیر می شه رو هندل کنه و تعداد آنها رو کنترل کنه و جریان استخر هم که گفتم برای این در نظر می گیره که دائم connection جدید ایجاد نکنه یا connection های بیکار رو از بین نبره که مجبور بشه بازم یکی دیگه درست کنه. البته به گفته شما این database هست که انگار stream یا همان connection بین client ایجاد می کنه :قهقهه: الله اکبر. شاهکاری همین و می تونم بگم.
یک Patternی هست به نام singleton بخونش بعد نیست. بدرد بخوره.


فرمودید: بحث Transaction هم در دیتابیس سرور پیاده سازی میشه. این چه ربطی به وب سرور داره برادر من.
اول از همه من برادر شما نیستم و نمی خوامم باشم.
خوب حق داری دیگه .NET بیشتر از این نمی زاره آدم پیشرفت کنه. تازه بدتر از اون وقتی آدم علاقه ای به مطالعه و یادگیری نباشه.
در platform -JEE تکنولوژی وجود داره به نام( Java Transaction API (JTA
سان دیگه یکمشت بیکار نشستن چیزی که توی database اونم فقط sql server Microsoft بزرگ هست رو نشتن براش API نوشتن. حتمان اجرای این API ها هم توسط قسمت serve database هست. این کلمه server database که استفاده کردید خودش جای بحث است. حالا چی هست خدا می دونه. در تمام application server های ejb شما می توانید قسمت transaction جدایی از خود database داشته باشید که این خودش به دو قسمت جدا ازهم هم تعریف شده یعنی شما می توانید از application server بخواهید جدا از database جداول tarnasaction دسترسی داشته باشید که که جدا از database عمل می کند و همچنین می توانید دسترسی به یک لایه پایین تر یعنی JTA api ها رو که مخصوص کتابخانه جاوا هستند داشته باشید و برای خود یک transaction جدا از database که علت آنرا قبلا توضیح دادم رو داشته باشید.
این link بیشتر در مورد JTA صحبت می کنه http://java.sun.com/products/jta
کدی که در پایین نوشته می شه یک نمونه مستند در کار هست

import javax.ejb.*;
import javax.annotation.Resource;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import javax.transaction.UserTransaction;
@Stateless()
@TransactionManagement(javax.ejb.TransactionManage mentType.BEAN)
public class TellerBean implements Teller {
@PersistenceContext private EntityManager em;
@Resource private javax.transaction.UserTransaction userTx;
public void transferFunds(float amount, String fromAccount, String
toAccount)
{
// Lookup for accts with the provided account Ids
try {
userTx.begin();
BankAccount acct1 = em.find(BankAccount.class, fromAccount);
BankAccount acct2 = em.find(BankAccount.class, toAccount);
if (acct1.balance < amount)
userTx.rollback();
acct1.withdraw(amount);
acct2.deposit(amount);
em.persist(acct1);
em.persist(acct2);
userTx.commit();
} catch (Exception e) {
System.out.println(“Exception occurred during transfer of
funds.” + e.getMessage());
}
}
}

این کد ها چی هست و چی کار می کنه خودش داستان داره ولی خوب بیکارن دیکه اینرارو می نویسن database اونم فقط sql server انجام میده oracle و Mysql و بقیه که نمی تونن انجام بدن sun اومده براش api نوشته تازه برای اینکه ضایع نشه توی applicaition server هام ازش استفاده کرده.

فرمودید که :بحث‌های کلاسترینگ و غیره هم مربوط است به سیستم عامل که ویندوز هم در این زمینه مشکلی نداره. اصولا ذاتا ارتباطی به وب سرور ندارد. سیستم‌ عامل این موارد رو مهیا کرده.

طفلک IIS عقب مونده نتونسته یک چیزی رو پشتیبانی کنه انداخته کردن OS که توی windows 2003 یک حرکتهایی زده که حالا اون جای بحث داره و لی نه اینجا. بعدآ خواستم windows رو بکوبم بحث می کنیم. اونم علمی با سند و مدرک و نه البته با شما مهندس. شما کارت درسته البته برای خودتو دوستات.

دوستان عزیز Clustering امروزه در تمام application server ها وجود داره کسانی که با sun application یا jboss و همچنین weblogic کار کرده اند حتما بخش تنظیمات Clustering را دیده اند و خوب IIS نداره دیگه.


فرموده اید: بدیهی است هم اس کیوال سرور و هم IIS یکپارچگی خوبی رو در این زمینه می‌تونند ارائه بدهند و به اندازه کافی کتاب و مقاله در این زمینه موجود است.

البته که کتاب و مقاله بسیار هست ولی شما به هیچ کدوم از آنها اشاره نکرده اید چون اصلا با خوندن زیاد رابطه خوبی ندارید.

راستی این سایت رو حتما دوستان تماشا کنند و بخندند

http://www.search-this.com/2007/06/27/microsoft-iis-vs-apache-who-serves-more/
:شیطان:
این قدرت IIS که همه دارن ازش استفاده می کنند ایشون راست می گه چون دنیا هم این مقالات و کتابها که ایشون قرمودند زیاد هست رو ندیده اند.

اما گفته آخرتون:موفق باشی

مطمعن باش که هستم. من بارها گفتم من توی فروم های مختلفی دارم موضوع می نویسم که اکثرشون ایرانی نیستند ولی واقعا همچین کسانی با چنین سوادی کم پیدا می شه. من گفته های شما به عنوان یک شوخی تلقی می کنم و قضاوت رو به کسانی می سپرم که اولا صاحب نظر باشند و دوما منابعی که من به آنها در آخر اشاره می کنم رو بخونند.
من خیلی دلم می خواد بیشتر توضیح بدم و مسئله رو باز کنم ولی به دلیل مشغله کاری واقعا نمی شه. من در روز با آدمهایی که مانند شما هستند زیاد درگیر هستم چه در محیط کار چه جای دیگر و متاسفانه برای این آدما فقط یک نسخه پیشنهاد می کنه و آن این است که
نظرات شخصیتون برای خودتون محترم هست.
منابع
کتاب Mastring Entrpise JavaBeans 3
Clustering فصل ۱۶صفحه ۵۰۵
transaction فصل ۱۰ صفحه ۲۷۱
A Prelude to Enterprise JavaBeans فصل اول صفحه ۳۹

javaphantom
دوشنبه 27 اسفند 1386, 12:21 عصر
یادتان باشد که زکات علم انتشار آن است .
خیلی متاسفم ، اگر نمی خواهید جواب درست بدهید لطفا توهین نکنید .

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

anubis_ir
دوشنبه 27 اسفند 1386, 13:06 عصر
کانکشن پولینک یعنی یک کش از اتصال‌های موجود به دیتابیس که توسط دیتابیس سرور شما مدیریت می‌شود و هر بار با دریافت درخواست جدیدی یکی از آنها را می‌تواند استفاده کند یا خیر.
http://en.wikipedia.org/wiki/Connection_pool
بنابراین مدیریت این مورد به عهده دیتابیس سرور است نه IIS . همانطور که گفتم.

singleton یعنی داشتن یک وهله و تنها یک وهله از یک کلاس در کل برنامه و تضمینی در این مورد.
پولینگ در اینجا یک کش هست. چندین وهله از شیء دیتابیس در حال استفاده است.
این بحث singleton اصلا ارتباطی به کانکشن پولینگ نداره. چندتا کلمه رفتی یاد گرفتی مثل بقیه رفقات ... خوبه. موفق باشی.

در مورد بحث کلاینت اگر وبی نباشد و یک ویندوز APPLICATION باشد بله، خود ADO.NET می‌تونه سمت کلاینت این روش کش کردن رو و استفاده از یک شیء کانکشن رو بخوبی مدیریت کنه. البته اگر این مورد برای تو تازگی داره می‌تونی بیشتر مطالعه کنی.

بعد هم تو با این همه ادعا هنوز نمی دونی یک صفحه وب که کارش تموم شد تمام اشیاء اون رو سرور تخریب میکنه و دیگه اثری ازش باقی نخواهد ماند که حالا آی آی اس یا هر وب سرور دیگر بخواهد کانکشن‌های آنرا مدیریت کند. وظیفه دیتابیس سرور هست که سمت سرور این موضوع (کش) رو مدیریت کنه.

=================
معادل Java Transaction API هم در دات نت در ado.net‌ برای مدیریت ترنس اکشن‌ها هست و تمام اینها هم یک لایه ‌ای هستند بر همان اعمالی که باز هم دیتابیس باید آنها را مدیریت کند و تمام این فرامین در نهایت به فرامین Native مورد فهم یک دیتابیس سرور مثلا sql server ترجمه می‌شوند. بنابراین این مورد هم باز هم به یک وب سرور ربطی نداره. حتی اون Api هم یک لایه است برای استفاده از این توانایی‌ها.
این هم ربطی به iis‌ نداره. حتی ربطی به اون api هم نداره. عمق فاجعه تا چه حد هست که فکر می‌کنی یک API‌ جاوا این مورد رو داره برات مدیریت میکنه؟ یک وقت نری توی فوروم‌های خارجی این مسایل رو بنویسی.
================
نیازی نداره مایکروسافت تمام اینها را یک پکیج کنه و اسمش رو بذاره APPLICATION SERVER . هنر ادمین سرور هست که بتونه جمع موجود رو مدیریت کنه. کلاسترینگ و لود بالانسینگ و غیره.
حالا اگر تو سواد نداری اینها رو جمع کنی و استفاده کنی مشکل خودت هست. برو از لقمه آماده سان استفاده کن. دنیا آزاده.

موفق باشی

javaphantom
دوشنبه 27 اسفند 1386, 14:44 عصر
singleton می دونی کجا بدرد مخوره

سوال من چگون می توانم از کلاس به تعداد محدود instance بگیرم بطوریکه این دفعات minimum یک مرتبه و maximum ان n باشد.

جواب برای حل این مشکل از pattern ی که به آن singleton گفته می شود استفاده می کنیم
با فرض اینکه n به اندازه ۱۰ باشد و یک بار هم n به اندازه ۱ یعنی حداقل
کد رو براتون می نویسم
اما ربطش به pooling connection چیه. اول pattern رو کد می زنم بعد وارد مسئله می شم.

فرض که n=10 است یعنی ما می خواهیم کاری کنیم تو ی اجرای برنامه maximum از کلاس MySubject ققط ۱۰ بار instance انجام شود و نه بیشتر.


public class MySubject {

private static int counter;

public MySubject() {
if (this.counter <= 10) {
System.out.println("instance number " + this.counter);
counter++;
} else {
System.out.println("instance is not validate");
return;
}

}
public static void main(String[] s) {
for (int i =0; i<15; i++) {
new MySubject();
}
}

}
همانطور که مشاهده می کنید من کاری کردم که از کلاس مورد نظر نتوان بیشتر از ۱۰ بار instance گرفته شود. نتیجه کار وقتی که بخواهیم ۱۴ بار از آن instance بگیریم در خروجی چنین است
instance number 0
instance number 1
instance number 2
instance number 3
instance number 4
instance number 5
instance number 6
instance number 7
instance number 8
instance number 9
instance number 10
instance is not validate
instance is not validate
instance is not validate
instance is not validate

حال بخواهیم n را بصورت minimum فرض کنیم یعنی یک بار فقط یک بار instance گرفته شود می توان چنین رفتار کرد
به کد توجه کنید

public class MySubject {

private static MySubject mySubject;

public MySubject() {
if (this.mySubject == null) {
System.out.println("instance is ready");
mySubject = this;
} else {
System.out.println("instance is not validate");
return;
}

}
public static void main(String[] s) {
for (int i =0; i<5; i++) {
new MySubject();
}
}

}
همانطور که در کد نگاه می کنید از کلاس موجود فقط یک بار می توان instance گرفت.
در صورتی که بخواهیم بیشتر شود با پیغام خطا رو برو می شویم خروجی این برنامه
instance is ready
instance is not validate
instance is not validate
instance is not validate
instance is not validate

این pattern به چه درد می خوره و کارایی کجاست؟
همانطور که از اسمش پیداست به آن یگانه کننده گفته می شه. خوبی این کار اینکه که شما مطمعن هستید که فقط یک بار از کلاس شما instance گرفته شده اما این pattern به اینجا کارش ختم نمی شه و می توان آن را بسط داد تعداد n را کنترل کرد. بدی این دو روش اینه که عمل instance گرفتن بصورت static است یعنی این خود کد زن هست که دستور instance رو می دهد قشنگی کار اینکه خود برنامه بتونه تشخیص بده و این عمل بازهم سادس از طریق یک thread می تونید تعداد رو بصورت dynamic کنترل کنید. این مقدمه ای بود بر singleton pattern
دارم زکات می دما.
خوب حالا بریم ببینم مهندس چی گفته.

javaphantom
دوشنبه 27 اسفند 1386, 14:45 عصر
کانکشن پولینک یعنی یک کش از اتصال‌های موجود به دیتابیس که توسط دیتابیس سرور شما مدیریت می‌شود و هر بار با دریافت درخواست جدیدی یکی از آنها را می‌تواند استفاده کند یا خیر.
http://en.wikipedia.org/wiki/Connection_pool
بنابراین مدیریت این مورد به عهده دیتابیس سرور است نه IIS . همانطور که گفتم.

singleton یعنی داشتن یک وهله و تنها یک وهله از یک کلاس در کل برنامه و تضمینی در این مورد.
پولینگ در اینجا یک کش هست. چندین وهله از شیء دیتابیس در حال استفاده است.
این بحث singleton اصلا ارتباطی به کانکشن پولینگ نداره. چندتا کلمه رفتی یاد گرفتی مثل بقیه رفقات ... خوبه. موفق باشی.

در مورد بحث کلاینت اگر وبی نباشد و یک ویندوز APPLICATION باشد بله، خود ADO.NET می‌تونه سمت کلاینت این روش کش کردن رو و استفاده از یک شیء کانکشن رو بخوبی مدیریت کنه. البته اگر این مورد برای تو تازگی داره می‌تونی بیشتر مطالعه کنی.
موفق باشی

خوب حالا بریم سراغ pooling connection که ببینم چی داره می گه طفلک.
با توجه به اینکه فهمیدم با بسط دادن pattern singleton می شه تعدا instance گرفتن کلاس ها رو کنترل کرد که بصورت default همه تازه کارا فکر می کنند یک فقط یک بار باید عمل instance انجام بشه طبق گفته کتاب 4 gang اما دیدم نه همچینم یک بار لازم نیست خاصیت pattern ها این که بشه اونها رو بسط داد و باهم تلفیقشون کرد martin fowler در کتاب design pattern.
ما هم بسطش دادیم و تعداد و از ۱ به ۱۰ یا هر عددی که بخواهیم بردیم و گفتیم این تعداد static هست و با یک thread می شه کاری کرد که dynamic بشه. اگر خواستید کد میدم.
حالا
ما فرض می کنیم که یک web application درست کردیم که یک سری user می یان و در آن یکسری اطلاعات می ریزن مثلا بانک رو در نظر بگیرد.
ما در لایه سرور چهار عمل رو انجام می دیم بنا به تقاضای مشتری
insert,update,delete,select
خوب چه جوری یا از طریق jdbc یا JDO و لایه persistence ها یا هر جور. چه جوری این عمل صورت باید بگیره
client تقاضای خودشو می ده به سرور حالا باید سرور بره سراغ باسخ دهی به کاربر باید ایجاد یک stream بکنه با کی با database. تا اینجا اکثر این کار رو انجام دادیم از طریق یک stream به یک لایه مدیریتی database وصل می شیم و query لازم رو بهش می دیم. پس از طرف سرور داره stream درست می شه یا همان connection گرفته می شه. database توی یک لایه دیگست حالا می خواد فیزیکی باشه می خواد logic باشه. اما تفاضا از طرف client به سمت سرور بوده دستورات رو باید توی application server مدیریت یا همان instance گرفته بشه. database که مستقیم به client وصل نیست که بفهم داستان چیه که بیاد بقول مهندس اون بیاد stream درست کنه که بخواد stream ها رو مدیریت کنه.
حالا فرض می کنیم که تعداد متقاضیها برای ایجاد stream یا همان connection زیاد بشه. خیلی زیاد بشه. اما همه این مسئله رو خوب می دونیم مقدار بازگشتی query های فرستاده شده همه یکسان نیست. مثلا یکی می خواد حساب باز کنه یکی می خواد پول واریز کنه یکی می خواد پول رد و بدل کنه و و و و خوب پس این application server داره عمل instance رو انجام می ده که بتونه stream درست کنه و این stream ها کانالی است برای فرستادن و گرفتن اطلاعات از database حالا اگر ۱۰۰ نفر در یک آن از تقاضای سرویس کنند باید application عمل instance گیری به تعداد 100 رو انجام بده اما همانطورم گه گفتم بعضی از این stream ها زود بیکار می شن بعضی ها هم نه همچنان ترافیک data توشون هست. اما اونایی که بیکار شدن چی؟ بریزیمشون دور اینها همه توی server از شون instnace گرفته شده. توی database که ازشون instance گرفته نشده البته مهندس می گه توی database سرور این عمل صورت می گیره. مهندسه دیگه. نه تمام اینها توی ram سرور instance گرفته شده. واقعا حیفه که به این راحتی تا بیکار شدن بریزیمشون دور از طریق garbage collection تازه اگر این کار رو کنیم باز مجبوریم برای نفرات بعد دوباره connection ایجاد یا همان instance بگیریم. خوب حالا تکلیف چیه؟ اینجاست بحث pooling connection از طرف application server بوجود می آید که اول از همه بتونیم تعداد instance ها رو کنترل کنیم اما چه جوری؟ از طریق singleton اونم بصورت dynamic اما یک مدیریت هم می خواهیم که این stream های بیکارو دور نریزه بلافاصله اون ها رو به یک client دیگه بده و هر موقع بیکار شد دوباره بزارتش تو ی استخره stream ها. اینجاست که بحث pooling connection توی application server بوجود می آید و برای اینکه complexity کار کد نویس رو از بین ببره و از همه مهمتر بصورت Standard عمل کنه می آن این قسمت رو روی دوش application server می زارن.
مثال عملیش توی زنگیمون هست.
قدیما دمه امام زاده ها که سقا خونه داشت می اومدن از این لیوانهای آهنی استفاده می کردن یک دونه زنجیرهم بهش وصل می کردن که مردم می اومدن تو صف وای می سادن همه از یکی دو لیوان آب می خوردن . کار اقتصادی بود نه نیازی به ظرف شور بود نه لیوان نو تازه لیوان هم کسی نمی تونست بدزده. همه از همون می خوردن و فرداشم می مردن.

مهندس انقدر از IIS نگو هر جا که می ری IIS رو بعضی وقتها با tomcat مقایسه می کنند تازه بعضی ها هم tomcat رو بعنوان application server قبول ندارند بعنوان servlet و jsp -
container می شناسند. IIS و کلا محصولات ماکروسافت در هیچ یک از برنامه های سازمانی یا همان enterprise حرفی برای گفتن نداره. خودش این مسئله رو قبول داره بعد داری اصرار می کنی که اینطور نیست. باشه.
حالا دیدی singleton چه ربطی داشت به pooling connection چندتا کلمه که یاد نگرفتم هیچی برات پیاده سازی هم کردم. دوست داری برات یک connetion pooling بنویسم ببنی که چندتا کلمه نیست بلکه چندین مفهوم به اضافه بیش از چند ده تجربه کاره.
ببینیم دیگه چی گفته مهندس

javaphantom
دوشنبه 27 اسفند 1386, 15:22 عصر
شما درست می گید من در مورد transaction براتون نوشتم که علاوه بر اینکه خوده appliation می تونه اونه مدیریت کنه بدون دخالت لایه database کد نویس دستش باز هست که در صورت نیاز به یک لایه پایین تر به و مستقیم از JTA استفاده بکنه و این دست کد نویس رو باز می زاره اما این به این معناست که ما علاوه بر داشتن جداول transaction در database در خود قسمت application server هم می توانیم داشته باشیم و علتش هم توضیح دادم که چرا.
دقیقا راست می گی آخری رو که ماکروسافت نیازی نداره که اینهارو همه یک جا استفاده کنه
طبق این نوشته
Microsoft's contribution to application servers is the .NET Framework. This technology includes the Windows Communication Foundation, .NET Remoting, Microsoft Message Queuing, ASP.NET, ADO.NET, and Internet Information Services
اینجوری یک بار IIS می فروشه یک بار windows می فروشه یک بار sql server می فروشه کلا فروشه.
شما هم شاد باش که داری از این محصول قدرتمند استفاده می کنی که دنیا رو مخصوصا کشور پهناور ایران رو مبهوت خودش کرده و از این تکنولوژی استفاده می کنند برای همین هم هست که توی دنیا حرفی برای گفتن داره.
و کلام آخر ما تا حالا این همه با محصولات JBoss یا sun یا weblogic کار کردیم همه توی یک package نبودن البته استاد فرمودن هست خوب حتما راست می گه. راست که نه ولی می گه دیگه

راستی از بقیه می خوام یه سری به این سایت هم بزنند
http://en.wikipedia.org/wiki/Comparison_of_web_servers
حالا بازم حرف خودوتو بگو ولی من دیگه حوابتم نمی دم ببینم بقیه چی مگین شاید شما درست میگید دینا داره مزخرف می گه

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

javaphantom
دوشنبه 27 اسفند 1386, 15:46 عصر
به این می گن چپوندن توهم اون وقت برای ما می شماره مخصولات عمو
http://upload.wikimedia.org/wikipedia/en/4/49/DotNet3.0.svg
چی بگم آخه بابا بی خیال اصلا
اینم توضیحاتش
http://en.wikipedia.org/wiki/Image:DotNet3.0.svg
همه رو کرده توهم شده معماری .net خندست دیگه

آخ عمو بیلی اگر بدونی ایرونی ها چقدر دوست دارن! نمی آیی ایران دیگه

zer0cool
سه شنبه 28 اسفند 1386, 10:02 صبح
http://en.wikipedia.org/wiki/IIS
http://en.wikipedia.org/wiki/ActiveX_Data_Objects

http://en.wikipedia.org/wiki/Application_server
http://en.wikipedia.org/wiki/Web_server

http://en.wikipedia.org/wiki/Localhost

http://www.dofactory.com/Patterns/PatternSingleton.aspx#intent
http://www.javaworld.com/javaworld/jw-04-2003/jw-0425-designpatterns.html