ejb开始使用ejb


备注

本节概述了ejb是什么,以及开发人员可能想要使用它的原因。

它还应该提到ejb中的任何大型主题,并链接到相关主题。由于ejb的Documentation是新的,您可能需要创建这些相关主题的初始版本。

使用JBoss AS 7.1设置EJB

1.概述

在本文中,我们将讨论如何开始使用Enterprise JavaBeans(EJB)。我们将使用JBoss AS 7.1.1.Final,但您可以自由使用您选择的任何服务器。

2. Bean的Maven依赖项

为了使用EJB,请确保将其最新版本添加到pom.xml文件的dependencies部分:

<dependency>
    <groupId>org.jboss.spec.javax.ejb</groupId>
    <artifactId>jboss-ejb-api_3.2_spec</artifactId>
    <version>1.0.0.Final</version>
</dependency>
 

确保正确添加JBoss依赖项,因为我们将在本教程中将JBoss用作应用程序服务器。在本教程的后半部分,我们将详细讨论如何为项目设置maven构建。

3. EJB Remote

让我们首先创建名为HelloWorldRemote的Bean接口。

public interface HelloWorldRemote {
    public String getHelloWorld();
}
 

现在我们将实现上面的接口并将其命名为HelloWorldBean

@Stateless
public class HelloWorldBean implements HelloWorldRemote {

    public HelloWorldBean() {
    
    }
    
    @Override
    public String getHelloWorld(){
        return ("Hello World");
    }
}
 

请注意类声明之上的@Stateless 表示法。它表示无状态会话bean。

4.远程Bean的Maven设置

在本节中,我们将讨论如何设置maven以在服务器上构建和运行应用程序。

让我们一个一个地看一下插件。

4.1。编译器插件

maven-compiler-plugin用于编译项目的源代码。

这里我们使用了插件的2.3.1版本,其中源和目标JDK在配置下设置为1.7。

我们已将这些设置定义为标记内的属性,并通过$ {property}引用它。

<version.compiler.plugin>2.3.1</version.compiler.plugin>
<!-- maven-compiler-plugin -->
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.source>1.7</maven.compiler.source>
 

4.2 EJB插件

这个插件生成Bean文件以及相关的客户端jar。

我们已将ejb版本指定为3.2,并将generateClient属性设置为true以生成客户端。

4.3在JBoss中部署

jboss-as-maven-plugin用于在JBoss AS 7中部署,重新部署,取消部署或运行​​应用程序。

在此配置中,我们指定构建文件名与项目构建文件名相同,默认情况下为artifactid-version格式,例如ejb-remote-1.0-SNAPSHOT

4.4 EJB的必需Maven依赖项

jboss-javaee-6.0定义了我们想要使用的JBoss Java EE 6 API的版本。

JBoss分发了一整套Java EE 6 API,包括物料清单(BOM)。

BOM指定工件的堆栈(或集合)的版本。我们在标签中指定它,以便我们始终获得正确的工件版本。此依赖项本身的类型是包含所需依赖项的pom。

<dependency>
    <groupId>org.jboss.spec</groupId>
    <artifactId>jboss-javaee-6.0</artifactId>
    <version>${version.org.jboss.spec.jboss.javaee.6.0}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
 

4.5注释

以下将获得注释依赖项:

<dependency>
    <groupId>org.jboss.spec.javax.annotation</groupId>
    <artifactId>jboss-annotations-api_1.1_spec</artifactId>
    <scope>provided</scope>
</dependency>
 

4.6 EJB版本3.2

在下面的代码中,我们获得了最新版本的规范:

<dependency>
    <groupId>org.jboss.spec.javax.ejb</groupId>
    <artifactId>jboss-ejb-api_3.2_spec</artifactId>
    <version>1.0.0.Final</version>
</dependency>
 

要在JBoss服务器上运行上述项目,我们需要先运行:

mvn clean install
 

然后我们需要通过运行以下maven命令将它部署到正在运行的JBoss服务器:

jboss-as:deploy
 

现在您应该看到在jboss服务器中部署了jar文件。

或者,您可以从项目中的目标文件夹中复制可用的jar,并将其粘贴到服务器的webapp文件夹中。

5.设置客户端项目

在创建远程bean之后,我们应该通过创建客户端来测试已部署的bean。

首先让我们讨论项目的maven设置。

使用了5.1 Maven插件

maven-compiler-plugin用于编译项目的源代码。

我们为源类和目标类指定了jdk 1.7版本。

我们的客户端是一个Java程序,为了运行它,我们使用exec-maven-plugin 来帮助执行系统和Java程序。我们需要指定可执行文件(即java),类路径和java类(com.baeldung.ejb.client.Client)。

类路径保持为空,因为插件包含基于所提供的依赖项所必需的类路径参数。

5.2 EJB3客户端的Maven依赖关系

为了运行EJB3客户端,我们需要包含以下依赖项。

我们依赖于此应用程序的EJB远程业务接口来运行客户端。所以我们需要指定ejb客户端jar依赖项。值为“ejb-client”的标记用于指定此项目对EJB客户端jar的依赖性。

<dependency>
    <groupId>com.theopentutorials.ejb3</groupId>
    <artifactId>ejbmavendemo</artifactId>
    <type>ejb-client</type>
    <version>${project.version}</version>
</dependency>
 

依赖关系jboss-transaction-api_1.1_specjboss-ejb-api_3.1_specjboss-ejb-clientxnio-apixnio-niojboss-remotingjboss-sasljboss-marshalling-river 具有作为运行时的范围,因为这些是运行时间,而不是在编译期间。

dependencyManagement下的依赖关系jboss-javaee-6.0jboss-as-ejb-client-bom的范围为import。这用于将来自远程POM的依赖关系管理信息包括到当前项目中。这些远程POM由JBoss提供,其中包含运行客户端所必需的依赖项。

5.3 JBoss EJB Client属性

在“src / main / resources”下创建一个文件,并将其命名为jboss-ejb-client.properties。

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
 

6.创建客户端类

首先,我们创建一个ClientUtility类:

public class ClientUtility {
    private static Context initialContext;
    private static final String PKG_INTERFACES = "org.jboss.ejb.client.naming";

    public static Context getInitialContext() throws NamingException {
        if (initialContext == null) {
            Properties properties = new Properties();
            properties.put(Context.URL_PKG_PREFIXES, PKG_INTERFACES);
            initialContext = new InitialContext(properties);
         }
        return initialContext;
    }
}
 

现在让我们创建一个实际的Client类,它将使用我们在服务器中部署的bean:

public class Client {
    
    //The lookup method to get the EJB name
    private static HelloWorldRemote doLookup() {
        Context context = null;
        HelloWorldRemote bean = null;
        try {
            // 1. Obtaining Context
            context = ClientUtility.getInitialContext();
            // 2. Generate JNDI Lookup name
            String lookupName = getLookupName();
            // 3. Lookup and cast
            bean = (HelloWorldRemote) context.lookup(lookupName);
 
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return bean;
    }
 
    private static String getLookupName() {
        
         // The app name is the EAR name of the deployed EJB without .ear suffix.
         // Since we haven't deployed the application as a .ear, the app name for
         // us will be an empty string
         
        String appName = "";
 
        
         // The module name is the JAR name of the deployed EJB without the .jar
         // suffix.
        String moduleName = "ejb-remote-0.0.1-SNAPSHOT";
 
        
        // AS7 allows each deployment to have an (optional) distinct name. This
        // can be an empty string if distinct name is not specified.
        String distinctName = "";
 
        // The EJB bean implementation class name
        String beanName = "HelloWorldBean";
 
        // Fully qualified remote interface name
        final String interfaceName = "com.baeldung.ejb.tutorial.HelloWorldRemote";
 
        // Create a look up string name
        String name = "ejb:" + appName + "/" + moduleName + "/" + distinctName
                + "/" + beanName + "!" + interfaceName;
        
        return name;
    }
}
 

Client类使用bean并输出结果。

7.结论

所以我们创建了一个EJB服务器和一个使用该服务的客户端。该项目可以在任何Application Server上运行。