آموزش EJB – راه اندازی اپلیکیشن – جلسه سوم
در جلسه قبل آموزش EJB که توسط آی تی پورت ارائه گردید به راه اندازی Environment اشاره کردیم اما در این آموزش جاوا و در این جلسه به راه اندازی اپلیکیشن EJB خواهیم پرداخت. برای راه اندازی اپلیکیشن EJB و ایجاد یک ماژول ساده، در برنامه NetBeans، و قسمت New project استفاده خواهیم کرد. در ادامه مثالی از ایجاد یک پروژه ماژول EJB به نام Component آورده شده است.
راه اندازی اپلیکیشن EJB
برای ایجاد یک پروژه در محیط NetBeans، از قسمت File گزینه New Project را انتخاب کنید.
از قسمت category گزینه Java EE و در قسمت Project نوع پروژه را EJB Module قرار دهید، سپس روی دکمه Next> کلیک کنید.
نام و محل ذخیره سازی پروژه را وارد کنید. سپس روی دکمه Next کلیک کنید.
در قسمت Server گزینه JBoss Application Server انتخاب کنید. روی دکمه Finish کلیک کنید. در تصویر بعد پروژه ای را که توسط NetBeans ایجاد شده است مشاهده خواهید کرد.
یک نمونه EJB ایجاد کنید
در ادامه مراحل راه اندازی اپلیکیشن EJB، برای ایجاد یک EJB ساده، در برنامه NetBeans قسمت New را انتخاب کنید. در مثالی که در زیر آورده شده است، ما یک کلاس EJB نوع stateless به نام libraSessionBean زیرمجموعه پروژه EjbComponent ایجاد خواهیم کرد.
پروژه EjbComponent را در پنجره Project explorer انتخاب کرده و بر روی آن کلیک راست کنید. گزینه New و سپس گزینه Session Bean را انتخاب نمایید. پس از آن شما پنجره New Session Bean را مشاهده خواهید کرد.
session bean name و package name را وارد کنید. سپس روی دکمه Finish کلیک کنید. پس از آن در ادامه کلاس های EJB زیر را که توسط NetBeans ایجاد شده اند مشاهده خواهید کرد.
- LibrarySessionBean – session bean بدون حالت
- LibrarySessionBeanLocal – رابط محلی برای session bean
ما در حال تغییر رابط محلی به رابط از راه دور هستیم زیرا ما می خواهیم در یک برنامه مبتنی بر کنسول، به EJB خود دسترسی پیدا کنیم. از رابط Remote / Local برای آشکار کردن متد های تجاری که EJB باید آنها را اجرا کند استفاده می کنیم.
LibrarySessionBeanLocal به LibrarySessionBeanRemote و LibrarySessionBean به رابط LibrarySessionBeanRemote تبدیل می شود.
LibrarySessionBeanRemote
package com.tutorialspoint.stateless; import java.util.List; import javax.ejb.Remote; @Remote public interface LibrarySessionBeanRemote { void addBook(String bookName); List getBooks(); }
LibrarySessionBean
package com.tutorialspoint.stateless; import java.util.ArrayList; import java.util.List; import javax.ejb.Stateless; @Stateless public class LibrarySessionBean implements LibrarySessionBeanRemote { List<String> bookShelf; public LibrarySessionBean() { bookShelf = new ArrayList<String>(); } public void addBook(String bookName) { bookShelf.add(bookName); } public List<String> getBooks() { return bookShelf; } }
یک پروژه بسازید
در مراحل بعدی راه اندازی اپلیکیشن EJB و برای ساخت پروژه، EjbComponent را در پنجره Project Explorer انتخاب کنید.
بر روی آن کلیک راست و از منوی باز شده گزینه clean and build را انتخاب نمایید.
پس از آن شما خروجی زیر را در کنسول NetBeans مشاهده خواهید کرد.
ant -f C:\\EJB\\EjbComponent clean dist init: undeploy-clean: deps-clean: Deleting directory C:\EJB\EjbComponent\build Deleting directory C:\EJB\EjbComponent\dist clean: init: deps-jar: Created dir: C:\EJB\EjbComponent\build\classes Copying 3 files to C:\EJB\EjbComponent\build\classes\META-INF Created dir: C:\EJB\EjbComponent\build\empty Created dir: C:\EJB\EjbComponent\build\generated-sources\ap-source-output Compiling 2 source files to C:\EJB\EjbComponent\build\classes warning: [options] bootstrap class path not set in conjunction with -source 1.6 Note: C:\EJB\EjbComponent\src\java\com\tutorialspoint\stateless \LibraryPersistentBean.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. ۱ warning compile: library-inclusion-in-archive: Created dir: C:\EJB\EjbComponent\dist Building jar: C:\EJB\EjbComponent\dist\EjbComponent.jar dist: BUILD SUCCESSFUL (total time: 3 seconds)
راه اندازی Application Server
به پنجره Services و سپس قسمت Servers و پس از آن JBoss application server بروید.
سرور برنامه JBoss را در زیر سرورها در پنجره خدمات انتخاب کنید.
بر روی آن کلیک راست کنید و از منوی باز شده گزینه start را انتخاب نمایید.
خروجی زیر را در NetBeans، تحت عنوان JBoss Application Server مشاهده خواهید کرد.
Calling C:\jboss-5.1.0.GA\bin\run.conf.bat ========================================================================= JBoss Bootstrap Environment JBOSS_HOME: C:\jboss-5.1.0.GA JAVA: C:\Program Files (x86)\Java\jdk1.6.0_21\bin\java JAVA_OPTS: -Dprogram.name=run.bat -Xms128m -Xmx512m -server CLASSPATH: C:\jboss-5.1.0.GA\bin\run.jar ========================================================================= ۱۶:۲۵:۵۰,۰۶۲ INFO [ServerImpl] Starting JBoss (Microcontainer)... ۱۶:۲۵:۵۰,۰۶۲ INFO [ServerImpl] Release ID: JBoss [The Oracle] 5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634) ... ۱۶:۲۶:۴۰,۴۲۰ INFO [TomcatDeployment] deploy, ctxPath=/admin-console ۱۶:۲۶:۴۰,۴۸۵ INFO [config] Initializing Mojarra (1.2_12-b01-FCS) for context '/admin-console' ۱۶:۲۶:۴۲,۳۶۲ INFO [TomcatDeployment] deploy, ctxPath=/ ۱۶:۲۶:۴۲,۴۰۶ INFO [TomcatDeployment] deploy, ctxPath=/jmx-console ۱۶:۲۶:۴۲,۴۷۱ INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080 ۱۶:۲۶:۴۲,۴۸۷ INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009 ۱۶:۲۶:۴۲,۴۹۳ INFO [ServerImpl] JBoss (Microcontainer) [۵٫۱٫۰٫GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)] Started in 52s:427ms
اجرای پروژه
پس از راه اندازی اپلیکیشن EJB برای اجرای آن، پروژه EjbComponent را در پنجره Project Explorer انتخاب کنید.
بر روی آن کلیک راست کنید و از منوی باز شده گزینه Deploy را انتخاب کنید.
در ادامه خروجی زیر را در خروجی کنسول NetBeans مشاهده خواهید کرد.
ant -f C:\\EJB\\EjbComponent -DforceRedeploy=true -Ddirectory.deployment.supported=false -Dnb.wait.for.caches=true run init: deps-jar: compile: library-inclusion-in-archive: Building jar: C:\EJB\EjbComponent\dist\EjbComponent.jar dist-directory-deploy: pre-run-deploy: Checking data source definitions for missing JDBC drivers... Distributing C:\EJB\EjbComponent\dist\EjbComponent.jar to [org.jboss.deployment.spi.LocalhostTarget@1e4f84ee] Deploying C:\EJB\EjbComponent\dist\EjbComponent.jar Application Deployed Operation start started Operation start completed post-run-deploy: run-deploy: run: BUILD SUCCESSFUL (total time: 2 seconds)
دسترسی Client به EJB ایجاد کنید
برای راه اندازی اپلیکیشن EJB و دادن دسترسی به کلاینت ها، در محیط NetBeans، از قسمت File گزینه New Project را انتخاب کنید
در بخش category نوع پروژه را بر روی Java Application قرار دهید. سپس روی دکمه Next کلیک کنید
نام و محل ذخیره سازی پروژه را وارد کنید. روی دکمه Finish کلیک کنید. ما EjbTester به عنوان نام انتخاب کرده ایم. سپس روی آن راست کلیک کرده و گزینه properties را انتخاب نمایید.
مولفه های پروژه EJB را که قبلاً تحت عنوان کتابخانه ها ساخته شده اند را با استفاده از گزینه Add Project واقع در تب compile، اضافه کنید.
با استفاده از گزینه Add jar/folder واقع در تب compile کتابخانه های jboss را اضافه کنید. کتابخانه های Jboss را می توان در مسیر jboss installation folder>> client folder قرار داد.
jndi.properties را تحت پروژه EjbTester در نظر بگیرید.
jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost
پکیج های com.tutorialspoint.test و EJBTester.java در زیر آن کلاس ایجاد کنید.
EJBTester.java
package com.tutorialspoint.test; import com.tutorialspoint.stateless.LibrarySessionBeanRemote; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import java.util.Properties; import javax.naming.InitialContext; import javax.naming.NamingException; public class EJBTester { BufferedReader brConsoleReader = null; Properties props; InitialContext ctx; { props = new Properties(); try { props.load(new FileInputStream("jndi.properties")); } catch (IOException ex) { ex.printStackTrace(); } try { ctx = new InitialContext(props); } catch (NamingException ex) { ex.printStackTrace(); } brConsoleReader = new BufferedReader(new InputStreamReader(System.in)); } public static void main(String[] args) { EJBTester ejbTester = new EJBTester(); ejbTester.testStatelessEjb(); } private void showGUI() { System.out.println("**********************"); System.out.println("Welcome to Book Store"); System.out.println("**********************"); System.out.print("Options \n1. Add Book\n2. Exit \nEnter Choice: "); } private void testStatelessEjb() { try { int choice = 1; LibrarySessionBeanRemote libraryBean = (LibrarySessionBeanRemote)ctx.lookup("LibrarySessionBean/remote"); while (choice != 2) { String bookName; showGUI(); String strChoice = brConsoleReader.readLine(); choice = Integer.parseInt(strChoice); if (choice == 1) { System.out.print("Enter book name: "); bookName = brConsoleReader.readLine(); libraryBean.addBook(bookName); }else if (choice == 2) { break; } } List<String> booksList = libraryBean.getBooks(); System.out.println("Book(s) entered so far: " + booksList.size()); for (int i = 0; i < booksList.size(); ++i) { System.out.println((i+1)+". " + booksList.get(i)); } LibrarySessionBeanRemote libraryBean1 = (LibrarySessionBeanRemote)ctx.lookup("LibrarySessionBean/remote"); List<String> booksList1 = libraryBean1.getBooks(); System.out.println( "***Using second lookup to get library stateless object***"); System.out.println( "Book(s) entered so far: " + booksList1.size()); for (int i = 0; i < booksList1.size(); ++i) { System.out.println((i+1)+". " + booksList1.get(i)); } } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } finally { try { if(brConsoleReader !=null) { brConsoleReader.close(); } } catch (IOException ex) { System.out.println(ex.getMessage()); } } } }
Client را برای دسترسی به EJB اجرا کنید
EJBTester.java را در کاوشگر پروژه پیدا کنید. روی کلاس EJBTester کلیک راست کرده و گزینه run file را انتخاب کنید.
run: ********************** Welcome to Book Store ********************** Options ۱٫ Add Book ۲٫ Exit Enter Choice: 1 Enter book name: Learn Java ********************** Welcome to Book Store ********************** Options ۱٫ Add Book ۲٫ Exit Enter Choice: 2 Book(s) entered so far: 1 ۱٫ Learn Java ***Using second lookup to get library stateless object*** Book(s) entered so far: 0 BUILD SUCCESSFUL (total time: 13 seconds)