EJB بستر سمت سرور جاوا برای توسعه برنامه های تجاری توزیع شده. یک پلتفرم زبان جاوا در سمت سرور که برای توسعه و گسترش نرم افزارهای کاری توزیع شده است. اولین خصوصیاتی بود که روشی آسان برای کپسوله سازی و استفاده مجدد از منطق تجاری در برنامه های سازمانی جاوا ارائه داد.
EJB چیست و چه کاربردی در زبان جاوا دارد؟
بستر سمت سرور جاوا برای توسعه برنامه های تجاری توزیع شده
EJB مخفف کلمات Enterprise Java Bean است. یک پلتفرم زبان جاوا در سمت سرور که برای توسعه و گسترش نرم افزارهای کاری توزیع شده است.معماری EJB از سه جز اصلی تشکیل شده است: لوبیای سازمانی (EJB)، ظرف EJB و سرور برنامه جاوا. درون یک ظرف EJB اجرا میشوند و ظرف EJB درون یک سرور برنامه جاوا اجرا میشود.
دو نوع EJB وجود دارد - لوبیای جلسه ای و لوبیای پیام محور:
لوبیای جلسه توسط کاربر فراخوانی میشود و عملکردهای سازمانی مانند معاملات و مدیریت منابع را به صورت برنامه ریزی در دسترس کاربر قرار میدهد.
لوبیای پیام محور همچنین عملکرد شرکت را کپسوله کرده و تحویل میدهد، اما ناهمگام و مبتنی بر رویداد است. لوبیاهای پیام محور به وقایع گوش میدهند و پاسخ میدهند، و کاربر نمیتواند آنها را فراخوانی کند. هنگامی که برای ایجاد ماندگاری در سیستم EJB استفاده میشود، لوبیای موجودیت توسط Java Persistence API جایگزین میشوند.
رابط های EJB
EJB در مقابل JavaBeans
Enterprise JavaBeans اولین مدل توسعه مبتنی بر مولفه برای Java EE بود. EJB از لحاظ مؤلفه بودن به JavaBeans شباهت دارد، اما این همان جایی است که شباهت به پایان میرسد:
JavaBean یک کلاس جاوا است که چندین اشیا را در خود قرار داده و مطابق با قراردادهای خاص است. JavaBeans عمدتا برای توسعه سمت کاربر استفاده میشود.EJB یک کلاس جاوا است که با قابلیت های خاص سمت سرور عجین شده است. لوبیای سازمانی در برنامه ها و سیستم های تجاری وسیع مورد استفاده قرار میگیرد.
لوبیای جلسه
لوبیای جلسه عمومی ترین نوع لوبیای سازمانی است که نمایانگر یک بخش عمده از عملکرد تجاری است که میتواند توسط کاربر فراخوانی شود. کاربر در این حالت میتواند کلاس دیگری در JVM محلی یا ارتباط از راه دور باشد.
محتوای EJB چرخه حیات لوبیای جلسه را مدیریت میکند، که با توجه به وضعیت لوبیا تعیین میشود:
لوبیای جلسه بدون حالت مشابه دامنه درخواست در Java Servlet API است. لوبیای جلسه ای بدون حالت شامل قسمتی از قابلیت ارتباط پذیر است اما در غیر این صورت فاقد حالت است.
حبوبات جلسه با حالت فقط با یک کاربر مرتبط هستند و به جلسه در حال انجام آن کاربر پیوست میشوند. دانه های جلسه با حالت عملکردی مشابه دامنه جلسه در Servlet API دارند.
ساختار EJB
ایمنی نخ با لوبیای جلسه ای
یک سرویس دهنده لوبیای حالت دار همزمان میتواند فقط توسط یک کاربر دسترسی پیدا کند، بنابراین ایمنی نخ هنگام کار با این نوع لوبیا تضمین میشود. لوبیای جلسه ای بدون حالت و لوبیای منفرد انعطاف پذیرتر است و امکان اتصال همزمان را فراهم میکند که باید توسط توسعه دهنده مدیریت شود. شما در هنگام کار با این نوع لوبیا مسئول ایمنی نخ هستید.
ایمن سازی EJB
لوبیای پیام محور
لوبیای پیام محور JMS(سرویس پیام جاوا) فراخوانی میشوند. JMS، در جایی که لوبیای پیام محور به عنوان شنونده دستور عمل میکند، همانند یک الگوی دستور توزیع شده، عمل میکند. هنگامی که پیامی بر روی یک موضوع یا صف میرسد، لوبیای پیام محور که در آن موضوع گوش میدهد فراخوانی میشود.
لوبیای پیام محور معمولاً به اندازه لوبیای جلسه ای استفاده نمیشود اما قدرتمند است. ناهماهنگ و مبتنی بر رویداد، به ویژه برای مشاغل طولانی مدت که صرفه جویی در منابع مهم است، بسیار مفید هستند.
ساده ترین معماری شامل برنامه EJB و محتوا و سرور آن است که با سرویس پردازش پیام MDB هماهنگ میشوند. در تولید، معماری شما احتمالاً شامل مؤلفه سوم اختصاص یافته به مصرف حبوبات است. در توسعه، همه این اجزا میتوانند با همان ماشین محلی کار کنند.
شکل 1 معماری رویدادی محور را با لوبیاهای پیام محور نشان میدهد.
معماری رویدادی EJB
کار با لوبیا پیام محور بیشتر از استفاده از لوبیای جلسه ای است. در یک محیط رویداد محور معمولاً به یک کارگزار پیام مانند ActiveMQ نیاز دارید.در حالی که لوبیای جلسه ساده تر است و بنابراین بیشتر در EJB استفاده میشود، معماری های مبتنی بر رویداد به ویژه با انفجار ریز سرویس ها محبوب شده اند.
حاشیه نویسی EJB
تعریف و مصرف حبوبات سازمانی نکته مهمی برای بسیاری از توسعه دهندگان تا نسخه EJB 3.0 بود که حاشیه نویسی ها را به مشخصات EJB وارد کرد. حاشیه نویسی پیکربندی حبوبات سازمانی را برای طیف گسترده ای از عملکردهای موجود در Java EE بسیار آسان میکند.
لوبیای جلسه بدون حالت را تعریف کنید.
برای تعیین یک کلاس به عنوان یک جلسه بدون حالت، از javax.ejb.Stateless حاشیه استفاده میکنید، همانطور که در لیست 1 نشان داده شده است.
لیست کردن 1. مثال حاشیه نویسی بدون حالت
import javax.ejb.Stateless;
@Stateless
public class MyStatelessBean {
public String getGreeting() {
return "Hello JavaWorld.";
}
}
این لوبیای بدون حالت حاوی یک امضای ساده است که هیچ استدلالی نمیگیرد و یک رشته را برمی گرداند. اجازه ندهید سادگی شما را گول بزند: این لوبیا میتواند هر کاری را که لازم دارید انجام دهد، از جمله تعامل با لوبیا، خدمات دیگر یا لایه داده برنامه شما.
EJB@: یک لوبیای بدون حالت مصرف کنید
هنگامی که یک لوبیای جلسه را تعریف کردید، استفاده از آن بسیار ساده است:
لیست 2. مثال حاشیه ای EJB
public class MyServlet extends HttpServlet {
@EJB
MyStatelessBean myEjb;
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
response.getWriter().write("EJB Says " + myEjb.getGreeting());
}
}
Remote@ : رابط EJB از راه دور را تعریف کنید
در مثال های بالا، فرض کردیم کاربر EJB و EJB در همان JVM در حال اجرا هستند. اگر Enterprise bean و کاربر آن در JVM های جداگانه در حال اجرا هستند، EJB باید یک رابط Remote@ تعریف کند. در این حالت، همانطور که در لیست 3 نشان داده شده است، تعریف و پیاده سازی رابط با شماست.
لیست 3. مثال حاشیه نویسی از راه دور
@Remote
public interface MyStatelessEjbRemote {
String sayHello(String name);
}
رابط راه دور برای فراخوانی به کاربر ارسال میشود. سپس ارتباط با آن با اجرای سمت سرور EJB برآورده میشود. مثال MyStatelessBean در لیست 4 رابط راه دور را پیاده سازی میکند.
لیست 4. اجرای یک رابط راه دور
public class MyStatelessBean implements MyStatelessEjbRemote{
...
}
رابط محلی در مقابل راه دور
اگرچه دانستن چگونگی پیاده سازی یک رابط از راه دور مهم است، اما در عمل استفاده از رابط محلی معمول تر است. رابط محلی به طور پیش فرض استفاده میشود و هر زمان EJB در همان زمینه JVM فراخوانی شود کار میکند. استفاده از رابط از راه دور هنگامی پخش میشود که برنامه در چندین JVM توزیع شده باشد.
موضوع و زمانبندی موضوع با Singletons
ایمنی نخ هنگامی که با لوبیای جلسه کار میکنید ساخته میشود، اما چندین مشتری به طور همزمان میتوانند به لوبیای بدون حالت و به صورت تک نفره دسترسی داشته باشند. توسعه دهندگان هنگام اجرای این نوع حبوبات مسئول ایمنی نخ هستند.
لوبیای Singleton از طریق حاشیه نویسیLock پشتیبانی از ایمنی نخ را ارائه میدهد. برای تعیین امتیازات خواندن / نوشتن برای هر روش میتوانید از حاشیه نویسی Lock در روش های singleleton bean استفاده کنید. دو گزینهLock (LockType.READ) یا Lock (LockType.WRITE) است که پیش فرض است.
یکی دیگر از ویژگی های مفید لوبیا تک قلو، امکان برنامه ریزی کارها به روشی ساده و استفاده از حاشیه نویسی Schedule است. لیست 5 نحوه برنامه ریزی یک کار روزانه در ظهر را نشان میدهد.
لیست 5. مثال حاشیه ای زمانبندی @Schedule
@Singleton
public class MySchedulerBean {
@Schedule(hour = "12")
void doIt() {
System.out.println("Hello at Noon!");
}
}
CDI در مقابل EJB
CDI یا Context and Dependency Injection مشخصات جدیدتر سازمانی است که به گفته برخی از توسعه دهندگان میتواند جایگزین EJB شود.
در سطح بالا، CDI یک چارچوب مؤلفه های عمومی را ارائه میدهد، در حالی که EJB برای اجزای جداگانه منحصر به فرد خود برجسته است. در حالی که CDI از تزریق وابستگی برای تعریف و ارجاع هر مؤلفه نرم افزاری استفاده میکند، مؤلفه های EJB به طور رسمی تر تعریف میشوند و هرکدام مجموعه خاصی از قابلیت ها را خارج از جعبه ارائه میدهند. هر دو مشخصات برای توسعه آینده به عنوان بخشی از Jakarta EE در نظر گرفته شده است، جایی که در نهایت این سوال که آیا CDI باید جایگزین EJB شود حل خواهد شد.
چرخه حیات EJB
نتیجه
Enterprise JavaBeans اولین خصوصیاتی بود که روشی آسان برای کپسوله سازی و استفاده مجدد از منطق تجاری در برنامه های سازمانی جاوا ارائه داد. به دور از روح سنگین وزن قدیم، امروزه EJB یک چارچوب ناب و مبتنی بر حاشیه نویسی است که به شما امکان میدهد به طیف گسترده ای از عملکردهای شرکت، دقیقاً خارج از جعبه دسترسی پیدا کنید. دفعه بعدی که از شما خواسته شد تا به سرعت یک برنامه تجاری توزیع شده و قابل توسعه را افزایش دهید، EJB را در نظر بگیرید. ممکن است به طرز خوشایندی تعجب کنید.
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690
بستن دیگر باز نشو! |