• 雷林鹏分享: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:EJBEjbComponent 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:EJBEjbComponent -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的多个层面应用程序。

      (编辑:雷林鹏 来源:网络|侵删)

  • 相关阅读:
    VS2005环境下的DLL应用
    Windows Xp下BMP位图转JPEG格式
    [转]C# 中使用委托对List<>进行排序和筛选
    [转]DRP系统知识点总结
    [转]计算机是如何启动的
    [转]JSP基础知识
    [转] 视觉直观感受若干常用排序算法
    [转]使用余弦定理计算两篇文章的相似性
    [转] 关于幂律分布的一个笔记
    [转]函数式编程(泛函编程模型)初探
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/13050394.html
Copyright © 2020-2023  润新知