آموزشبرنامه نویسیجاوا

آموزش EJB – راه اندازی اپلیکیشن – جلسه سوم

آموزش EJB

در جلسه قبل آموزش EJB که توسط آی تی پورت ارائه گردید به راه اندازی Environment اشاره کردیم اما در این آموزش جاوا و در این جلسه به راه اندازی اپلیکیشن EJB خواهیم پرداخت. برای راه اندازی اپلیکیشن EJB و ایجاد یک ماژول ساده، در برنامه NetBeans، و قسمت  New project استفاده خواهیم کرد. در ادامه مثالی از ایجاد یک پروژه ماژول EJB به نام Component آورده شده است.

راه اندازی اپلیکیشن EJB 

برای ایجاد یک پروژه در محیط NetBeans، از قسمت File  گزینه New Project را انتخاب کنید. 

راه اندازی اپلیکیشن EJB

از قسمت category گزینه Java EE و در قسمت Project نوع پروژه را EJB Module قرار دهید، سپس روی دکمه Next> کلیک کنید. 

راه اندازی اپلیکیشن EJB

نام و محل ذخیره سازی پروژه را وارد کنید. سپس روی دکمه Next کلیک کنید. 

راه اندازی اپلیکیشن EJB

در قسمت Server گزینه JBoss Application Server انتخاب کنید. روی دکمه Finish کلیک کنید. در تصویر بعد پروژه ای را که توسط NetBeans ایجاد شده است مشاهده خواهید کرد.

راه اندازی اپلیکیشن EJB

یک نمونه EJB ایجاد کنید

در ادامه مراحل راه اندازی اپلیکیشن EJB، برای ایجاد یک EJB ساده، در برنامه NetBeans قسمت New را انتخاب کنید. در مثالی که در زیر آورده شده است، ما یک کلاس EJB نوع stateless به نام libraSessionBean زیرمجموعه پروژه EjbComponent ایجاد خواهیم کرد.

پروژه EjbComponent را در پنجره Project explorer انتخاب کرده و بر روی آن کلیک راست کنید. گزینه New و سپس گزینه Session Bean را انتخاب نمایید. پس از آن شما پنجره New Session Bean را مشاهده خواهید کرد.

راه اندازی اپلیکیشن EJB

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)
گفتگو ها