:index-group: Referencing EJBs
:jbake-type: page
:jbake-status: status=published
= Inyección de Ejbs

Este ejemplo muestra cómo usar la anotación `@EJB` en una clase de bean para
referenciar otros beans.

Esta funcionalidad a menudo se denomina inyección de dependencia (consulte
http://www.martinfowler.com/articles/injection.html), y ha sido
introducido en Java EE 5.

En este ejemplo particular, crearemos dos beans de sesión sin estado (stateless) 

* un bean de sesión de DataStore
* un bean de sesión DataReader

El bean DataReader usa el bean DataStore para recuperar información,
dentro del bean DataReader se obtiene una referencia
al bean DataStore usando la anotación `@EJB`, evitando así el uso
de la API JNDI.

== DataReader

[source,java]
----
package org.superbiz.injection;

import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 * Este es un bean pojo sesión sin estado estilo EJB 3.1
 * Cada implementación de bean de sesión sin estado debe estar anotada
 * usando la anotación @Stateless
 * Este EJB tiene 2 interfaces de negocio: DataReaderRemote, una interfaz remota
 *  negocio y DataReaderLocal, una interfaz de nogocio local
 * <p />
 * Las variables de instancia 'dataStoreRemote' están anotadas con la anotación @EJB:
 * esto significa que el servidor de aplicaciones, en tiempo de ejecución, inyectará en esta instancia variable una referencia al EJB DataStoreRemote
 * <p />
 * Las variables de instancia 'dataStoreLocal' están anotadas con la anotación @EJB:
 * esto significa que el servidor de aplicaciones, en tiempo de ejecución inyectará en esta instancia
 * variable una referencia a EJB DataStoreLocal
 */

@Stateless
public class DataReader {

    @EJB
    private DataStoreRemote dataStoreRemote;
    @EJB
    private DataStoreLocal dataStoreLocal;
    @EJB
    private DataStore dataStore;

    public String readDataFromLocalStore() {
        return "LOCAL:" + dataStoreLocal.getData();
    }

    public String readDataFromLocalBeanStore() {
        return "LOCALBEAN:" + dataStore.getData();
    }

    public String readDataFromRemoteStore() {
        return "REMOTE:" + dataStoreRemote.getData();
    }
}
----

== DataStore

[source,java]
----
package org.superbiz.injection;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 * Este es un bean pojo de sesión sin estado estilo EJB 3
 * Cada implementación de bean de sesión sin estado debe estar anotada
 * usando la anotación @Stateless
 * Este EJB tiene 2 interfaces de negocio: DataStoreRemote, una interfaz de negocio remota
 * y DataStoreLocal, una interfaz de negocio local
 */

@Stateless
@LocalBean
public class DataStore implements DataStoreLocal, DataStoreRemote {

    public String getData() {
        return "42";
    }
}
----

== DataStoreLocal

[source,java]
----
package org.superbiz.injection;

import javax.ejb.Local;

/**
 * Esta es una interfaz de negociolocal EJB 3
 * Una interfaz de negocio local se puede anotar con la anotación @Local,
 * @Local es una anotación opcional. Una interfaz de negocio que
 * no esta anotado con @Local o @Remote se supone se asume como Local
 */

@Local
public interface DataStoreLocal {

    public String getData();
}
----

== DataStoreRemote

[source,java]
----
package org.superbiz.injection;

import javax.ejb.Remote;

/**
 * Esta es una interfaz de negocio remota EJB 3
 * Se debe anotar una interfaz de negocio remota con la anotación @Remote
 */

@Remote
public interface DataStoreRemote {

    public String getData();
}
----

== EjbDependencyTest

[source,java]
----
package org.superbiz.injection;

import junit.framework.TestCase;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;

/**
 * Un caso de prueba para DataReaderImpl ejb, probando tanto la interfaz remota 
 * como la local
 */

public class EjbDependencyTest extends TestCase {

    public void test() throws Exception {
        final Context context = EJBContainer.createEJBContainer().getContext();

        DataReader dataReader = (DataReader) context.lookup("java:global/injection-of-ejbs/DataReader");

        assertNotNull(dataReader);

        assertEquals("LOCAL:42", dataReader.readDataFromLocalStore());
        assertEquals("REMOTE:42", dataReader.readDataFromRemoteStore());
        assertEquals("LOCALBEAN:42", dataReader.readDataFromLocalBeanStore());
    }
}
----

== Ejecución

[source,console]
----
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.injection.EjbDependencyTest
Apache OpenEJB 4.0.0-beta-1    build: 20111002-04:06
http://tomee.apache.org/
INFO - openejb.home = /Users/dblevins/examples/injection-of-ejbs
INFO - openejb.base = /Users/dblevins/examples/injection-of-ejbs
INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-ejbs/target/classes
INFO - Beginning load: /Users/dblevins/examples/injection-of-ejbs/target/classes
INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-ejbs
INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
INFO - Auto-creating a container for bean DataReader: Container(type=STATELESS, id=Default Stateless Container)
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.injection.EjbDependencyTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Enterprise application "/Users/dblevins/examples/injection-of-ejbs" loaded.
INFO - Assembling app: /Users/dblevins/examples/injection-of-ejbs
INFO - Jndi(name="java:global/injection-of-ejbs/DataReader!org.superbiz.injection.DataReader")
INFO - Jndi(name="java:global/injection-of-ejbs/DataReader")
INFO - Jndi(name="java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStore")
INFO - Jndi(name="java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreLocal")
INFO - Jndi(name="java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreRemote")
INFO - Jndi(name="java:global/injection-of-ejbs/DataStore")
INFO - Jndi(name="java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest!org.superbiz.injection.EjbDependencyTest")
INFO - Jndi(name="java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest")
INFO - Created Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)
INFO - Created Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)
INFO - Started Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)
INFO - Started Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)
INFO - Started Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)
INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-ejbs)
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.225 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
----
