During learn and experience

۳ مطلب با موضوع «Java EE» ثبت شده است

Spring reactive stack web framework یا همان Spring WebFlux

از این بعد نام Spring reactive stack web framework را بیشتر بیشتر خواهید شنید. این stack جدید که برای توسعه برنامه های تحت وب در Spring 5 معرفی شده است و نسل بعدی توسعه برنامه های تحت وب در Spring Framework است که پس از Spring MVC و Spring Boot (Spring Servlet stack based web framework) که سال ها در بین توسعه دهندگان جاوا استفاده می شد آمده است و قابلیت تولید سیستم های reactive و non-blocking درون Spring Framework را با استفاده از پروژه Reactor خواهد داد.

برنامه های تولید شده با Spring WebFlux هم قابلیت اجرا درون Servlet container ها  مثل Tomcat, Jetty, Servlet 3.1 و هم قابلیت اجرا بر روی سرور هایی مانند Netty یا Undertow را دارد.

من اولین بار این مدل تولید برنامه تحت وب در دنیای جاوا رو با Play Framework تجربه کردم (حدود ۴ سال پیش) و سیستم های خوبی با Play Framework تولید کردیم ولی همیشه مشکل کمبود توسعه دهنده و پلاگین برای Play Framework را داشتیم ولی کاملا مشخص بود که أینده تولید برنامه تحت وب در دنیای جاوا از servlet container ها نمی گذرد و مدل پردازشی با event-loop بهمراه تعداد thread های کم آینده توسعه برنامه های تحت وب جاوا را رقم خواهد زد و قدرت JVM بصورت کامل نمایش داده خواهد شد.

سازگاری کامل Reactor با استاندارد Reactive Stream که در جاوا ۹ معرفی شده است آینده Spring WebFlux را تضمین خواهد کرد.

فعلا Spring 5 M5 عرضه شده و مستندات Spring WebFlux کامل نیست و مثال های کاملی برای آن وجود نداره ولی چیزی که واضح هستش اینه که مثل همیشه Backward compatibility وجود خواهد داشت. در زیر یک کنترلر که با Spring WebFlux پیاده سازی شده است را می بینیم:

@GetMapping("/persons")
Flux<Person> getPersons() {
    return this.repository.getPersons();
}
۲۵ ارديبهشت ۹۶ ، ۲۳:۲۷ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

بررسی Ninja Framework

قبلا یه مطلبی درباره Ninja Framework خونده بودم و همیشه دوست داشتم یه سرکی توش بکشم ببینم چه حرفی برای گفتن داره. تا اینکه بالاخره Ninja Framework منو طلبید و دیشبو با اون گذروندم.

به نظر میرسه Ninja Framework توسط یکسری جاوا developer خفن که هیچ کدوم از فریم ورک های وب جاوا موجود مثل Spring MVC یا Play Framework کارشونو برای پروژه هاشون بخوبی راه ننداخته توسعه داده شده و به همین دلیل از کلی best practice های توی فریم ورک های قبلی در Ninja Framework هم استفاده شده.

Ninja Framework خیلی بیش از حد شبیه Play Framework ولی بر خلاف Play کاملا با جاوا نوشته شده و هیچ وابستگی در هیچ سطحی با اسکالا نداره. یجورایی Ninja Framework اومده کلی از library ها و ابزار های بالغ در دنیای جاوا مثل Maven, Freemarker, Google Guice, JPA و ... رو با استفاده از best practice های development و معماری در فریم ورک های وب جاوا مثل Spring MVC یا Play Framework ترکیب کرده و یک فریم ورک وب ایده آل برای عاشقان جاوا درست کرده.

 

مزایای Ninja Framework:

  • یادگیری سریع برای توسعه دهندگان جاوا: چون برای کار باهاش فقط باید جاوا بلد باشی حتی دانش Java EE لازم نداره و از همه مهمتر نیومده چرخ رو از اول اختراع کنه و هر جا شده از library ها و ابزار های استاندارد و بالغ دنیای جاوا استفاده کرده که خیلی از توسعه دهندگان جاوا باهاش آشنا هستند.
  • Stateless بودن: درسته که Ninja Framework بر روی servlet container jetty بالا میاد ولی از servlet container فقط بعنوان وب سرور استفاده می کنه و از استاندارد های servlet container در Java EE تبعیت نمی کنه و بر خلاف اون مثل Play Framework کاملا stateless است که کمک می کنه به راحتی scale بشه.
  • کتابخانه تست حاضر و آماده: Ninja Framework هم شبیه Play برای نوشتن تست های اتوماتیک در هر سطحی (unit، functional و integration) کلاس های و کتابخانه های حاضر و آماده داره و کلی کار آدم رو راحت میکنه.
  • سازگاری با تمام IDE های دنیای جاوا: چون Ninja Framework از Maven بعنوان build tools استفاده کرده و حتی برای ایجاد یک پروژه Ninja باید از maven archetype استفاده کرد تقریبا با تمام IDE های موجود در دنیای جاوا سازگاری داره و به راحتی میشه با هر IDE باهاش کار کرد.

معایب Ninja Framework (بیشتر در مقایسه با Play Framework):

  • اگر توی web application تون بخاین از websocket استفاده کنید، Ninja Framework هیچ امکاناتی برای این کار نداره.
  • مباحث سیستم های Reactive مثل non blocking و async بودن در Ninja Framework وجود نداره.
  • هیچکدام از API های Ninja بر پایه Java 8 طراحی نشدند.
  • community فوق العاده کوچک.
  • قابلیت SuperDevMode که قراره امکان hot code reloading رو برای ما بیاره کاملا به IDE وابستس و در اکثر موارد کار نمی کنه (حداقل تو Intellij).

به نظرم Ninja Framework تلاشی بوده برای آوردن بهترین تجربیات فریم ورک های وب مثل Play یا Ruby on Rails در کنار جاوا و استاندارد های Java EE. کاری که در Play هم اتفاق افتاده ولی در بسیاری از موارد جاوا و استاندارد های Java EE با اسکالا و استاندارد های اون جا بجا شده که این کمی به مذاق توسعه دهندگان جاوا خوش نیومده. Ninja Framework با هدف داشتن یک فریم ورک مدرن و کاملا بر پایه استاندارد های جاوا و Java EE وارد میدان شده.

اگر بخام مقایسه نهایی رو با Play انجام بدم، از نظر فرآیند توسعه و مدرن بودن، Ninja Framework خودشو از Java EE جدا کرده و می تونه با Play در این زمینه رقابت کنه هر چند در مواردی مثل hot code reloading یا websocket عقبتره. از نظر معماری ولی Play چون بر پایه مفاهیم Reactive بنا شده و کاملا non blocking و async است در مبحث scalability بر روی یک ماشین خیلی جلوتر از Ninja Framework است که برای این موارد به servlet container اعتماد می کنه.

در کل با Ninja Framework خیلی حال کردم و یه application باهاش بالا آوردم و ازش ممنونم که باعث شد علاقم و اعتقادم به Play بیشتر از پیش بشه.

 

۱۲ بهمن ۹۴ ، ۰۹:۲۱ ۰ نظر موافقین ۳ مخالفین ۰
سعید زرین فام

گذر از Java EE، اندر مزایای Play framework

حدود ۳ ماه پیش وقتی در نقش معمار نرم افزار، باید در زمینه تصمیم گیری برای انتخاب Framework و پلتفرم  برای توسعه یک back-end مشترک موبایل و وب مشارکت می کردم، گذشتن از Java EE، Spring، Servlet و ... کار خیلی سختی بود. پس از حدود ۹ سال فعالیت و تدریس در دنیای Java EE و Framework های بر پایه آن و کسب تجربیاتی در زمینه توسعه سیستم های Enterprise و Web با استفاده از آنها، رفتن به سمت Framework ها و Platform های نو ظهور مانند Node.js یا Play Framework و استفاده از آنها در یک پروژه واقعی هم از نظر دلبستگی ها به Java EE و هم بار مسئولیت، کار سختی بود.
اما الان از انتخاب Play framework بسیار راضی هستم. بماند چه پارامتر هایی برای انتخاب این Framework از بین سایرین دخیل بود و چرا Play framework انتخاب شد، در حال حاضر بسیار راضی هستم.
می تونم به Play framework بگم تقلیدی از Ruby on Rails به زبان جاوا و Scala. برای صحبت درباره Play framework و مزایا آن خیلی باید بنویسم ولی مزایای زیر خیلی برای تیم ما مفید بوده که چند تاشو ذکر می کنم:
  • امکانات عالی و ساده برای تولید سرویس های REST.
  • ابزار های کافی برای نوشتن تست (unit, integration و functional).
  • قابلیت hot code reloading که فرایند توسعه رو خیلی لذت بخش می کنه.
  • معماری MVC خیلی ساده برای توسعه برنامه های تحت وب.
  • امکان استفاده آسان از کتابخانه های Java.
  • قابلیت database evolutions برای مدیریت تغییرات RDBMS در نسخه جدید سیستم در حال توسعه.
  • ...
ما از Play framework برای تولید سرویس های REST بعنوان back-end برنامه های موبایل و تولید برنامه های تحت وب استفاده می کنیم.

شاد باشید.
۰۶ خرداد ۹۳ ، ۱۲:۵۵ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام