雷林鵬分享:EJB創建應用

  要創建一個簡單的EJB模塊,我們這裏使用NetBeans“New project”嚮導。在下面的例子中,我們將創建一個名爲“Component”的EJB模塊項目。

  創建項目

  在NetBeans IDE中,選擇File > New Project >. 可以看到如下圖.

EJB創建應用

  在類別中選擇項目類型,Java EE的EJB模塊項目類型。點擊Next>按鈕,你會看到以下的畫面。

EJB創建應用

  輸入項目的名稱和位置。點擊Next>按鈕。你會看到以下的畫面。

EJB創建應用

  選擇服務器爲JBoss應用服務器。單擊“Finish”按鈕。你會看到以下由NetBeans創建的項目。

EJB創建應用

  創建一個簡單的EJB

  要創建一個簡單的EJB,我們將使用NetBeans“New”嚮導。在下面的例子中,我們將在EjbComponent項目下創建一個無狀態EJB類名爲librarySessionBean。

  在項目資源管理器窗口中選擇項目EjbComponent,右鍵單擊它。選擇New > Session Bean。您將看到新的會話Bean嚮導。

EJB創建應用

  輸入會話bean的名稱和包名。單擊“Finish ”按鈕。你會看到以下由NetBeans創建的EJB類。

  LibrarySessionBean - 無狀態會話bean

  LibrarySessionBeanLocal - 本地接口的會話bean

  要改變本地接口,我們要一個基於控制檯的應用程序訪問我們的EJB遠程接口。遠程/本地接口用於公開一個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 bookShelf;

  public LibrarySessionBean(){

  bookShelf = new ArrayList();

  }

  public void addBook(String bookName) {

  bookShelf.add(bookName);

  }

  public List getBooks() {

  return bookShelf;

  }

  }

  構建項目

  在Project Explorer窗口中選擇EjbComponent項目。

  右鍵點擊它來打開上下文菜單。

  選擇 clean and build。

  在NetBeans控制檯輸出,你會看到以下的輸出。

  ant -f C:\EJB\EjbComponent clean dist

  init:

  undeploy-clean:

  deps-clean:

  Deleting directory C:EJBEjbComponentuild

  Deleting directory C:EJBEjbComponentdist

  clean:

  init:

  deps-jar:

  Created dir: C:EJBEjbComponentuildclasses

  Copying 3 files to C:EJBEjbComponentuildclassesMETA-INF

  Created dir: C:EJBEjbComponentuildempty

  Created dir: C:EJBEjbComponentuildgenerated-sourcesap-source-output

  Compiling 2 source files to C:EJBEjbComponentuildclasses

  warning: [options] bootstrap class path not set in conjunction with -source 1.6

  Note: C:EJBEjbComponentsrcjavacom utorialspointstateless

  LibraryPersistentBean.java uses unchecked or unsafe operations.

  Note: Recompile with -Xlint:unchecked for details.

  1 warning

  compile:

  library-inclusion-in-archive:

  Created dir: C:EJBEjbComponentdist

  Building jar: C:EJBEjbComponentdistEjbComponent.jar

  dist:

  BUILD SUCCESSFUL (total time: 3 seconds)

  啓動應用程序服務器

  服務器在服務窗口下選擇JBoss應用服務器。

  右鍵點擊它來打開上下文菜單。

  選擇start。

  你會看到下面的輸出在NetBeans中JBoss應用服務器下的輸出。

  Calling C:jboss-5.1.0.GAin

  un.conf.bat

  =========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: C:jboss-5.1.0.GA

  JAVA: C:Program Files (x86)Javajdk1.6.0_21injava

  JAVA_OPTS: -Dprogram.name=run.bat -Xms128m -Xmx512m -server

  CLASSPATH: C:jboss-5.1.0.GAin

  un.jar

  =========================================================================

  16:25:50,062 INFO [ServerImpl] Starting JBoss (Microcontainer)...

  16:25:50,062 INFO [ServerImpl] Release ID: JBoss [The Oracle] 5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)

  ...

  16:26:40,420 INFO [TomcatDeployment] deploy, ctxPath=/admin-console

  16:26:40,485 INFO [config] Initializing Mojarra (1.2_12-b01-FCS) for context '/admin-console'

  16:26:42,362 INFO [TomcatDeployment] deploy, ctxPath=/

  16:26:42,406 INFO [TomcatDeployment] deploy, ctxPath=/jmx-console

  16:26:42,471 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080

  16:26:42,487 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009

  16:26:42,493 INFO [ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)] Started in 52s:427ms

  部署項目

  在Project Explorer窗口中選擇EjbComponent項目。

  右擊它,打開上下文菜單。

  選擇 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:EJBEjbComponentdistEjbComponent.jar

  dist-directory-deploy:

  pre-run-deploy:

  Checking data source definitions for missing JDBC drivers...

  Distributing C:EJBEjbComponentdistEjbComponent.jar to [org.jboss.deployment.spi.LocalhostTarget@1e4f84ee]

  Deploying C:EJBEjbComponentdistEjbComponent.jar

  Applicaton Deployed

  Operation start started

  Operation start completed

  post-run-deploy:

  run-deploy:

  run:

  BUILD SUCCESSFUL (total time: 2 seconds)

  JBoss應用服務器的日誌輸出

  16:30:00,963 INFO [DeployHandler] Begin start, [EjbComponent.jar]

  ...

  16:30:01,233 INFO [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@12038795{vfszip:/C:/jboss-5.1.0.GA/server/default/deploy/EjbComponent.jar/}

  ...

  16:30:01,281 INFO [JBossASKernel] jndi:LibrarySessionBean/remote-com.tutorialspoint.stateless.LibrarySessionBeanRemote

  16:30:01,281 INFO [JBossASKernel] Class:com.tutorialspoint.stateless.LibrarySessionBeanRemote

  16:30:01,281 INFO [JBossASKernel] jndi:LibrarySessionBean/remote

  16:30:01,281 INFO [JBossASKernel] Added bean(jboss.j2ee:jar=EjbComponent.jar,name=

  LibrarySessionBean,service=EJB3) to KernelDeployment of: EjbComponent.jar

  16:30:01,282 INFO [JBossASKernel] installing bean: jboss.j2ee:jar=EjbComponent.jar,name=BookMessageHandler,service=EJB3

  16:30:01,282 INFO [JBossASKernel] with dependencies:

  16:30:01,282 INFO [JBossASKernel] and demands:

  16:30:01,282 INFO [JBossASKernel] jboss.ejb:service=EJBTimerService

  ...

  16:30:01,283 INFO [EJB3EndpointDeployer] Deploy AbstractBeanMetaData@5497cb{name=jboss.j2ee:jar=EjbComponent.jar, name=LibrarySessionBean, service=EJB3_endpoint bean=org.jboss.ejb3.endpoint.deployers.impl.EndpointImpl properties=[container] constructor=null autowireCandidate=true}

  ...

  16:30:01,394 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=EjbComponent.jar,name=LibrarySessionBean,service=EJB3

  16:30:01,395 INFO [EJBContainer] STARTED EJB: com.tutorialspoint.stateless.LibrarySessionBean ejbName: LibrarySessionBean

  16:30:01,401 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:

  LibrarySessionBean/remote - EJB3.x Default Remote Business Interface

  LibrarySessionBean/remote-com.tutorialspoint.stateless.LibrarySessionBeanRemote - EJB3.x Remote Business Interface

  16:30:02,723 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=EjbComponent.jar,name=LibrarySessionBean,service=EJB3

  16:30:02,723 INFO [EJBContainer] STARTED EJB: com.tutorialspoint.stateless.LibrarySessionBean ejbName: LibrarySessionBean

  16:30:02,731 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:

  LibrarySessionBean/remote - EJB3.x Default Remote Business Interface

  LibrarySessionBean/remote-com.tutorialspoint.stateless.LibrarySessionBeanRemote - EJB3.x Remote Business Interface

  創建客戶端訪問EJB

  在NetBeans IDE中選擇 File > New Project >.

  類別下選擇項目類型爲Java,項目類型爲Java應用程序的Java。點擊Next>按鈕。

  輸入項目的名稱和位置。單擊“Finish >“按鈕。我們選擇名爲EjbTester。

  右鍵點擊項目名稱(在Project explore窗口中)。選擇屬性properties。

  添加EJB組件項目的庫使用“Add Project ”按鈕,在compile選項卡下創建的。

  添加JBoss庫使用添加Add jar/folder按鈕,在compile選項卡。 Jboss的庫可以位於<jboss安裝文件夾>客戶端文件夾。

  在工程中創建 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

  1. Add Book

  2. Exit

  Enter 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 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 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());

  }

  }

  }

  }

  運行客戶端訪問EJB

  在project explorer中找到EJBTester.java。右鍵點擊上EJBTester類,並選擇“run file”。

  在Netbeans控制檯驗證以下輸出。

  run:

  **********************

  Welcome to Book Store

  **********************

  Options

  1. Add Book

  2. Exit

  Enter Choice: 1

  Enter book name: Learn Java

  **********************

  Welcome to Book Store

  **********************

  Options

  1. Add Book

  2. Exit

  Enter Choice: 2

  Book(s) entered so far: 1

  1. Learn Java

  ***Using second lookup to get library stateless object***

  Book(s) entered so far: 0

  BUILD SUCCESSFUL (total time: 13 seconds)

  在下面的章節中,我們將討論這個完整的EJB的多個層面應用程序。

  (編輯:雷林鵬 來源:網絡|侵刪)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章