PDA

View Full Version : سوال: انتقال یک برنامه به جاوا و مشکلات پیش رو



ali_hadian
جمعه 04 تیر 1389, 17:43 عصر
سلام

ما قبلا یک برنامه مدیریت کتابخانه با مشخصات زیر نوشته بودیم:
پلتفرم: C# , Desktop
بانک اطلاعات: MS SQL Server

الان نیاز هست که این برنامه رو تحت وب و الزاما با استفاده از JSP-Servlet بنویسیم.
چند تا سوال دارم:

1. امکان اتصال راحت و بی دردسر در JSP-Servlet به MS SQL Server و استفاده از امکانات اون مثل Stored Procedure هست؟ چگونه؟

2. برای Object - Relational Mapping (تبدیل پاسخ query به object و بالعکس که حتما باید استفاده بشه) چه راهی بهتر و آسونتره؟؟

3. در کل، استفاده از EJB رو برای این کار توصیه میکنید؟؟؟ (اگر جوابتون مثبته، بهتره از Containter Managed Persistence استفاده کنیم یا Bean Managed Persistence)؟؟؟

ضمنا حجم پروژه متوسطه (در حد امکانات ساده و معمول کتابخانه)

پیشاپیش ممنون.

behrooj
شنبه 05 تیر 1389, 14:29 عصر
در مورد ۱ و ۲:

پیشنهاد می‌کنم که از Hibernate استفاده کنید. این یک پیش شرط هم داره البته که اونم اینه که در صورتی که جداول فعلی شما با ساختار تعریف شده در Hibernate سازگار نباشه احتمالا درد‌سرهایی براتون ایجاد خواهد کرد. اینه که شاید بهتر باشه برای شروع فقط با یک یا دو موجودیت که با هم رابطه هم دارند تست کنید که در آینده مجبور به تصمیمات پرهزینه نشید.
اگر از Hibernate استفاده کردید:
برای ارتباط با MS SQL Server مفید خواهد بود: http://jtds.sourceforge.net/
که به عنوان یکی از Dialectهای (http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/C#%E2%80%8Eonfiguration-optional-dialects) Hibernate و در زمان تعریف درایور (http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/C#%E2%80%8Eonfiguration-hibernatejdbc) پایگاه داده مورد استفاده است. برای Stored Procedure هم امکاناتی (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html) موجوده.

اگر Hibernate به خوبی با ساختار داده‌های فعلی شما سازگار نشد، پیشنهاد می‌کنم که به سراغ امکانات Spring JDBC (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html) برید و ازش استفاده کنید. به طور خاص من این رویکرد رو بیشتر می‌پسندم؛ اول این که کلا بسیار منعطف و امکانات متنوعی داره و دوم این که شما این در حال انتقال هستید و احتمالا نیاز به پشتیبانی از برنامه‌نویس برای کارهای مختلف دارید. به طور خاص فکر می‌کنم که بهترین تکنیک در مسأله شما استفاده از Simple JDBC (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html#jdbc-simple-jdbc) و Mapping Query (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html#jdbc-object) در صورتی که نیاز به مدل‌سازی هم دارید، باشه.

در مورد ۳:
در صورتی که پروژه شما با حجم متوسطه و در صورتی که شما نیاز ندارید که لایه منطق سیستم رو در جای دیگه و با واسط دیگه‌ای استفاده کنید، پیشنهاد نمی‌کنم که کلا از EJB استفاده کنید. با این حال اگر تصمیم به این کار گرفتید،‌ پیشنهاد می‌کنم که از Spring EJB (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html) استفاده کنید به این دلیل که شما رو از خیلی از تنظیمات و کارها راحت می‌کنه.

نکته‌ی بعدی که شاید بیشتر در حالت سوال باشه این که چرا الزام دارید که فقط از JSP-Servlet استفاده کنید چرا که در صورتی که از تکنیک‌های بالا استفاده کنید،‌ امکانات خوب و راحتی هم برای لایه‌ی View می‌تونید داشته باشید؛ دلیل دیگه هم اینه که به نظرم در آینده استفاده صرف JSP-Servlet براتون مسائل نوتری رو هم به همراه خواهد داشت. به طور مثال استفاده از Servlet باعث میشه که دوباره خود شما مسوول طراحی یک معماری باشید که تمام Servletهای سیستم از یک اصول و مبانی تبعیت کنند.

موفق باشید.

pestilencia
سه شنبه 08 تیر 1389, 22:14 عصر
پلتفرم: C#‎‎ , Desktop
بانک اطلاعات: MS SQL Server


توضیحات پست قبل به قدر کفایت راهنمای اینجای کارتون هست، ولی، شما به نظر من بهتره که از MySQL استفاده بکنین.
بقیه تکنولوژی‌ها - Hibernate, Spring, Struts, JSF ...- به جای خودشون. بَک‌اِندتون رو هم به نظر من مطابق با و از جنس بقیه تکنولوژی‌هایی که استفاده می‌کنین، بکنین.

mazdadoost
چهارشنبه 09 تیر 1389, 00:01 صبح
سلام

ما قبلا یک برنامه مدیریت کتابخانه با مشخصات زیر نوشته بودیم:
پلتفرم: C#‎ , Desktop
بانک اطلاعات: MS SQL Server

الان نیاز هست که این برنامه رو تحت وب و الزاما با استفاده از JSP-Servlet بنویسیم.
چند تا سوال دارم:

1. امکان اتصال راحت و بی دردسر در JSP-Servlet به MS SQL Server و استفاده از امکانات اون مثل Stored Procedure هست؟ چگونه؟

2. برای Object - Relational Mapping (تبدیل پاسخ query به object و بالعکس که حتما باید استفاده بشه) چه راهی بهتر و آسونتره؟؟

3. در کل، استفاده از EJB رو برای این کار توصیه میکنید؟؟؟ (اگر جوابتون مثبته، بهتره از Containter Managed Persistence استفاده کنیم یا Bean Managed Persistence)؟؟؟

ضمنا حجم پروژه متوسطه (در حد امکانات ساده و معمول کتابخانه)

پیشاپیش ممنون.

سلام:
به لینک هایی که در امضای بنده هست مراجعه کنید.
1-در حال حاضر مایکروسافت اتصال به Sql-Server رو از طریق یک درایور اختصاصی پشتیبانی میکنه/ من در استفاد ازش دچار مشکل شدم و مشکلم در تماس با میکروسافت هم حل نشد.البته این به معنای کار نکردنش نیست .جایگزین های اپن سورس هم برای درایور دارید.

2-برای ORM راه حل ها بسیار است. Hibernate خیلی کامله.اما راه حل های دیگری هم موجوده.

3-ضمنا حجم پروژه متوسطه (در حد امکانات ساده و معمول کتابخانه): اگر از Spring استفاده کنید خواب راحت تری را تجربه خواهید کرد!:لبخندساده:

4-Groovy و Grails میتونند ابن پروژه رو براتون به سرعت در دنیای وب JavaEE عملیاتی کنند .

5-موفق و سربلند باشید.

ali_hadian
چهارشنبه 09 تیر 1389, 12:46 عصر
سلام


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

میشه کمی بیشتر توضیح بدید؟ چه نوع مشکلاتی؟؟؟


نکته‌ی بعدی که شاید بیشتر در حالت سوال باشه این که چرا الزام دارید که فقط از JSP-Servlet استفاده کنید

منظورم این نبود که فقط از فقط از JSP-Servlet استفاده کنم. منظورم اینه که باید با جاوا به صورت برنامه تحت وب بنویسیم. اتفاقا چون این یک پروژه درسی هست (البته بعدا قراره برای فروشش هم فکری بکنیم) استفاده از تکنولوژی های دیگه امتیاز داره.
در حال حاضر، تصمیم گرفتیم از struts و hibernate استفاده کنیم. نظرتون در مورد struts چیه؟ (مشکلات پیش رو، محدودیتها و ...) تلفیق struts و hibernate چطور؟


ولی، شما به نظر من بهتره که از MySQL استفاده بکنین.
مسئله اینه که برنامه رو یک بار کامل با sql server نوشتیم، استفاده ازه mysql (علیرغم همه مزایایی که داره) دوباره کاریه!


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

من از JTDS (http://jtds.sourceforge.net/) استفاده میکنم، مشکل خاصی که نداره (منظورم اینه که کسی ازش استفاده کرده؟ با مشکل خاصی مواجه نشدید؟)


ضمنا ممنون از توضیحات مفید و کاملتون، خیلی مفید بود.

pestilencia
چهارشنبه 09 تیر 1389, 15:08 عصر
در حال حاضر، تصمیم گرفتیم از struts و hibernate استفاده کنیم. نظرتون در مورد struts چیه؟ (مشکلات پیش رو، محدودیتها و ...) تلفیق struts و hibernate چطور؟

Struts یه فریموورک‌ه برای Viewتون. شما می‌تونین از JSF, Tapestry, SpringMVC, ... هم استفاده بکنین. انتخاب Struts (ورژن ۲ رو هم برین سراغش) یک مقدار سلیقه‌اس.
از اون طرف Hibernate یه فریموورک دیگه‌س برای Persistence Layerتون. که باز گزینه‌های معادل هم داره، ولی خب این تقریبا از همه شناخته‌شده‌تر و پرطرفدارتره.

شما نهایتا باید Struts و Hibernate رو با هم Integerate کنین (و حتا بهتر هم هست که Spring هم تو این integeration در نظر بگیرین.) و خب اصلا مشکل و تداخلی با هم ندارن.



مسئله اینه که برنامه رو یک بار کامل با sql server نوشتیم، استفاده ازه mysql (علیرغم همه مزایایی که داره) دوباره کاریه!


شما می‌خواین کل برنامه‌تون رو نه تنها Re-Design بکنین بلکه Re-Construct هم بکنین. از Desktop-based به Web-based تبدیلش کنین، بعد تغییر Back Endاتون از SQL Server به MySQL به نظرتون *دوباره‌کاری* میاد؟؟

اولا نظر شخصی من اینه که SQL Server هر چقدر هم ادعا یا گفته بشه که دیتابیس مطمئن و قابل اعتمادی‌ه، enterprise نیست! حتی اگه هم فرض کنیم باشه، شما می‌خواین رو یه وب‌سرور مطمئن deploy کنین، که خب فرض می‌کنیم که Tomcat خوبه (که هست هم) شما Apache هم نهایتا احتیاج دارین (احتمالا) و تمام اینها قراره رو یه سرور امن و stable راه‌اندازی بشه. ویندوز رو که احیانا نمی‌خواین بگین؟ اشتباه محض! پس گزینه‌هاتون می‌شه سیستم‌عامل‌های nix based* .
بعد چه جوری می‌خواین SQL Server رو مثلا روی CentOS *درست* نصب کنین که کار کنه؟ به نظر من شما باید بین انتخاب MySQL و PostgreSql دو به شک باشین، تا SQL Server. دیتابیس مایکروسافت اینجا کلا محلی از اعراب نداره.

نکته بعد اینکه شما برای ORMتون دارین از Hibernate استفاده می‌کنین، پس برای شروع کار باید Domain Model تعریف کنین (حالا به هر کدوم از حالت‌هایی که می‌شه تعریف کرد). خب همین حینی که دارین دومین مدل‌تون رو کدنویسی می‌کنین Annotation هم بزارین، بعد با Ant, Maven, یا حتی اگه از Jetty استفاده کنین، تو build.xml ذکر کنین که دیتابیس رو در صورت *عدم وجود* بسازه (از روی همون Domain Model و Annotationها). یعنی شما رو همون اولین اجرای برنامه‌تون تو محیط develope دیتابیس‌تون هم ساختین!

behrooj
پنج شنبه 10 تیر 1389, 14:21 عصر
با pestilencia در مورد هزینه‌ای که صحبتش رو می‌کنید،‌ موافقم! شما در واقع دارید این نرم‌افزار از ابتدا روی یک سکوی دیگه می‌سازید، پس احتمالا تغییر پایگاه‌داده هم می‌تونید انجام بدید.

با این حال اگر هنوز اصرار به استفاده از M$ SQL Server دارید، من پیشنهاد می‌کنم که بهتره‌ به سمت Spring JDBC برید. به عنوان مهم‌ترین دلیل این کار می‌تونم بگم که شما مدل داده‌ای دارید که ممکنه با توجه به تعاریف جدید شما از همین مدل داده در Hibernate سازگار نباشه و در واقع دردسر‌های لایه‌ی داده شما رو بیشتر کنه. معمولا این به این دلیله که Hibernate روی مدل داده‌ای که براش تعریف می‌شه،‌ نظارت و عملیاتی انجام می‌ده که ممکنه در حال حاضر با مدل فیزیکی شما منطبق نباشه. از طرف دیگه تو پست اولم هم اشاره کردم که Spring JDBC امکاناتی ارائه می‌ده که با طبیعت Migration در پروژه‌ی شما بیشتر سازگاره.

شاید یک ایده‌ی دیگه که بتونید استفاده کنید،‌ این باشه که اگر هم Hibernate استفاده می‌کنید به صورت استاندارد JPA (http://www.theserverside.com/news/thread.tss?thread_id=60442) ازش استفاده کنید؛ به این شکل بیشتر به شما اجازه می‌ده که به طور مستفیم در انجام عملیات داده‌ای کنترل بیشتری داشته‌باشید.

در مورد لایه‌ی View خوب انتخاب‌ها زیاده‌ و این بسته به نیاز‌های نرم‌افزار شما و وقتی که می‌خواهید براش بگذارید داره. شما می‌تونید JSF رو مثلا با پیاده‌سازی RichFaces (http://www.jboss.org/richfaces) داشته‌باشید که مولفه‌های خوبی نسبتا ارائه می‌ده. می‌تونید مثلا Spring MVC (http://static.springsource.org/docs/Spring-MVC-step-by-step/) رو با jQuery (http://jquery.com/) در کنار هم به‌کار بگیرید برای ایجاد ویژگی‌های AJAX یا حتی می‌تونید کلا به طور مثال از GWT (http://code.google.com/webtoolkit/) استفاده کنید که همش بسته به وقت و هزینه‌ی شما داره.