ejbRozpoczęcie pracy z ejb


Uwagi

Ta sekcja zawiera przegląd tego, czym jest ejb i dlaczego deweloper może chcieć go użyć.

Powinien również wymieniać wszelkie duże tematy w ejb i zawierać linki do powiązanych tematów. Ponieważ Dokumentacja dla ejb jest nowa, może być konieczne utworzenie początkowych wersji tych pokrewnych tematów.

Konfigurowanie EJB z JBoss AS 7.1

1. Przegląd

W tym artykule omówimy, jak zacząć korzystać z Enterprise JavaBeans (EJB). Będziemy używać JBoss AS 7.1.1, ale możesz dowolnie korzystać z dowolnego serwera.

2. Zależności Maven dla fasoli

Aby użyć EJB, upewnij się, że dodałeś jego najnowszą wersję do sekcji zależności pliku pom.xml:

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

Upewnij się, że poprawnie dodałeś zależności JBoss, ponieważ w tym samouczku będziemy używać JBoss jako naszego serwera aplikacji. W dalszej części samouczka omówimy szczegółowo, jak skonfigurować kompilację maven dla projektu.

3. EJB Remote

Najpierw stwórzmy interfejs Bean o nazwie HelloWorldRemote.

public interface HelloWorldRemote {
    public String getHelloWorld();
}
 

Teraz zaimplementujemy powyższy interfejs i HelloWorldBean mu nazwę HelloWorldBean .

@Stateless
public class HelloWorldBean implements HelloWorldRemote {

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

Zwróć uwagę na notację @Stateless na górze deklaracji klasy. Oznacza bezpaństwową fasolę sesyjną.

4. Konfiguracja Maven dla Remote Bean

W tej sekcji omówimy, jak skonfigurować maven do budowania i uruchamiania aplikacji na serwerze.

Spójrzmy na wtyczki jeden po drugim.

4.1 Wtyczka kompilatora

Wtyczka maven-kompilator służy do kompilacji źródeł naszego projektu.

W tym przypadku użyliśmy wersji 2.3.1 wtyczki ze źródłowym i docelowym JDK ustawionym na 1.7 w konfiguracji.

Zdefiniowaliśmy te ustawienia jako właściwości wewnątrz tagu i odsyłamy je za pomocą $ {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 Wtyczka EJB

Ta wtyczka generuje plik Bean, a także powiązany jar klienta.

Podaliśmy wersję ejb jako 3.2, a właściwość generateClient ma wartość true, która generuje klienta.

4.3 Wdrażanie w JBoss

Wtyczka jboss-as-maven służy do wdrażania, ponownego wdrażania, cofania lub uruchamiania aplikacji w JBoss AS 7.

W tej konfiguracji podajemy nazwę pliku kompilacji taką samą jak nazwa pliku kompilacji projektu, która w naszym przypadku jest domyślnie wersją artefactid-wersja ejb-remote-1.0-SNAPSHOT .

4.4 Wymagane zależności Maven dla EJB

jboss-javaee-6.0 definiuje wersję interfejsów API Java EE 6 JBossa, której chcemy używać.

JBoss dystrybuuje kompletny zestaw interfejsów API Java EE 6, w tym zestawienie komponentów (BOM).

LM określa wersje stosu (lub kolekcji) artefaktów. Określamy to w znaczniku, aby zawsze otrzymywać poprawne wersje artefaktów. Sam typ tej zależności jest pom, który zawiera wymagane zależności.

<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 Adnotacje

Poniższe otrzyma zależność adnotacji:

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

4.6 EJB wersja 3.2

W poniższym kodzie otrzymujemy najnowszą wersję specyfikacji:

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

Aby uruchomić powyższy projekt na serwerze JBoss, musimy najpierw uruchomić:

mvn clean install
 

Następnie musimy wdrożyć go na działającym serwerze JBoss, uruchamiając następującą komendę maven:

jboss-as:deploy
 

Teraz powinieneś zobaczyć, jak plik jar jest wdrażany na serwerze jboss.

Alternatywnie możesz skopiować dostępny słoik z folderu docelowego w projekcie i wkleić go do folderu aplikacji WWW na serwerze.

5. Konfigurowanie projektu klienta

Po utworzeniu zdalnego komponentu bean powinniśmy przetestować wdrożony komponent bean, tworząc klienta.

Najpierw omówmy konfigurację maven dla projektu.

5.1 Użyte wtyczki Maven

Wtyczka maven-kompilator służy do kompilacji źródeł twojego projektu.

Podaliśmy wersję jdk 1.7 dla klas źródłowych i docelowych.

Naszym klientem jest program Java, do jego uruchomienia używamy exec-maven-plugin która pomaga uruchamiać programy systemowe i Java. Musimy określić plik wykonywalny (tj. Java), ścieżkę klasy i klasę java (com.baeldung.ejb.client.Client).

Ścieżka klasy pozostaje pusta, ponieważ wtyczka zawiera niezbędne argumenty ścieżki klas oparte na podanych zależnościach.

5.2 Zależności Maven dla klienta EJB3

Aby uruchomić klienta EJB3, musimy uwzględnić następujące zależności.

Do uruchomienia klienta jesteśmy zależni od zdalnych interfejsów biznesowych EJB tej aplikacji. Musimy więc określić zależność jar klienta ejb. Tag o wartości „ejb-client” służy do określenia zależności tego projektu od jar klienta EJB.

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

Zależności jboss-transaction-api_1.1_spec , jboss-ejb-api_3.1_spec , jboss-ejb-client , xnio-api , xnio-nio , jboss-remoting , jboss-sasl , jboss-marshalling-river mieć zakres jak starcie z powodu są one wymagane w czasie wykonywania, a nie podczas kompilacji.

Zależności jboss-javaee-6.0 i jboss-as-ejb-client-bom w dependenceManagement mają zakres jako import. Służy to do włączenia informacji zarządzania zależnościami ze zdalnej POM do bieżącego projektu. Te zdalne POM są dostarczane przez JBoss, który zawiera niezbędne zależności do uruchomienia klienta.

5.3 Właściwości klienta JBoss EJB

Utwórz plik w „src / main / resources” i nazwij go jako 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. Tworzenie klasy klienta

Najpierw tworzymy klasę 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;
    }
}
 

Teraz stwórzmy rzeczywistą klasę klienta, która zużyje komponent bean, który wdrożyliśmy na serwerze:

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;
    }
}
 

Klasa Client zużywa ziarno i generuje wynik.

7. Wnioski

Stworzyliśmy więc serwer EJB i klienta, który korzysta z usługi. Projekt można uruchomić na dowolnym serwerze aplikacji.