= CDI Produces Disposes
:index-group: CDI
:jbake-type: page
:jbake-status: published

Esté exemplo demostra como as anotações @Produces e @Disposes trabalham. Um LogFactory cria uma instância do LogHandler
dependendo de um atributo "type". Para o propósito deste exemplo, o type é hard-coded para especificar um valor.
Uma implementação Logger deve conter uma lista de LogHandlers.

 Teremos três implementações da interface LogHandler: 

* Uma DatabaseHandler
* Uma FileHandler
* Uma ConsoleHandler

O DatabaseHandler aparentemente gravaria os logs em um banco de dados. 

O FileHandler gravaria os logs em um arquivo.

O ConsoleHandler apenas imprimiria os logs para um console (saída padrão). 

Esté exemplo é apenas uma ilustração de como os conceitos dentro do CDI funcionam e não destina-se a fornecer uma implementação/design de um framework de log.


== ConsoleHandler

....
package org.superbiz.cdi.produces.disposes;

public class ConsoleHandler implements LogHandler {

    private String name;

    public ConsoleHandler(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void writeLog(String s) {
        System.out.printf("##### Handler: %s, Writing to the console!\n", getName());
    }
}
....

== DatabaseHandler

....
package org.superbiz.cdi.produces.disposes;

public class DatabaseHandler implements LogHandler {

    private String name;

    public DatabaseHandler(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void writeLog(String s) {
        System.out.printf("##### Handler: %s, Writing to the database!\n", getName());
        // Use conexão para gravar log no banco de dados
    }
}
....

== FileHandler

....
package org.superbiz.cdi.produces.disposes;

public class FileHandler implements LogHandler {

    private String name;

    public FileHandler(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void writeLog(String s) {
        System.out.printf("##### Handler: %s, Writing to the file!\n", getName());
        // Escreva para o arquivo de log
    }
}
....

== LogFactory

....
package org.superbiz.cdi.produces.disposes;

import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;

public class LogFactory {

    private int type = 2;

    @Produces
    public LogHandler getLogHandler() {
        switch (type) {
            case 1:
                return new FileHandler("@Produces created FileHandler!");
            case 2:
                return new DatabaseHandler("@Produces created DatabaseHandler!");
            case 3:
            default:
                return new ConsoleHandler("@Produces created ConsoleHandler!");
        }
    }

    public void closeLogHandler(@Disposes LogHandler handler) {
        switch (type) {
            case 1:
                System.out.println("Closing File handler!");
                break;
            case 2:
                System.out.println("Closing DB handler!");
                break;
            case 3:
            default:
                System.out.println("Closing Console handler!");
        }
    }
}
....

== Logger

....
package org.superbiz.cdi.produces.disposes;

public interface Logger {

    public void log(String s);

    public LogHandler getHandler();
}
....

== LoggerImpl

....
package org.superbiz.cdi.produces.disposes;

import javax.inject.Inject;
import javax.inject.Named;

@Named("logger")
public class LoggerImpl implements Logger {

    @Inject
    private LogHandler handler;

    @Override
    public void log(String s) {
        getHandler().writeLog(s);
    }

    public LogHandler getHandler() {
        return handler;
    }
}
....

== LogHandler

....
package org.superbiz.cdi.produces.disposes;

public interface LogHandler {

    public String getName();

    public void writeLog(String s);
}
....

== beans.xml

....
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                            http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

</beans>
....

== LoggerTest

....
package org.superbiz.cdi.produces.disposes;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

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

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class LoggerTest {

    @Inject
    Logger logger;

    private Context ctxt;

    @Before
    public void setUp() {
        try {
            ctxt = EJBContainer.createEJBContainer().getContext();
            ctxt.bind("inject", this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @After
    public void cleanUp() {
        try {
            ctxt.unbind("inject");
            ctxt.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testLogHandler() {
        assertNotNull(logger);
        assertFalse("Handler should not be a ConsoleHandler", logger.getHandler() instanceof ConsoleHandler);
        assertFalse("Handler should not be a FileHandler", logger.getHandler() instanceof FileHandler);
        assertTrue("Handler should be a DatabaseHandler", logger.getHandler() instanceof DatabaseHandler);
        logger.log("##### Testing write\n");
        logger = null;
    }

}
....

= Executando

....
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.cdi.produces.disposes.LoggerTest
Apache OpenEJB 4.0.0-beta-1    build: 20111002-04:06
http://tomee.apache.org/
INFO - openejb.home = /Users/dblevins/examples/cdi-produces-disposes
INFO - openejb.base = /Users/dblevins/examples/cdi-produces-disposes
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/cdi-produces-disposes/target/classes
INFO - Beginning load: /Users/dblevins/examples/cdi-produces-disposes/target/classes
INFO - Configuring enterprise application: /Users/dblevins/examples/cdi-produces-disposes
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean cdi-produces-disposes.Comp: Container(type=MANAGED, id=Default Managed Container)
INFO - Enterprise application "/Users/dblevins/examples/cdi-produces-disposes" loaded.
INFO - Assembling app: /Users/dblevins/examples/cdi-produces-disposes
INFO - Jndi(name="java:global/cdi-produces-disposes/cdi-produces-disposes.Comp!org.apache.openejb.BeanContext$Comp")
INFO - Jndi(name="java:global/cdi-produces-disposes/cdi-produces-disposes.Comp")
INFO - Jndi(name="java:global/EjbModule10202458/org.superbiz.cdi.produces.disposes.LoggerTest!org.superbiz.cdi.produces.disposes.LoggerTest")
INFO - Jndi(name="java:global/EjbModule10202458/org.superbiz.cdi.produces.disposes.LoggerTest")
INFO - Created Ejb(deployment-id=cdi-produces-disposes.Comp, ejb-name=cdi-produces-disposes.Comp, container=Default Managed Container)
INFO - Created Ejb(deployment-id=org.superbiz.cdi.produces.disposes.LoggerTest, ejb-name=org.superbiz.cdi.produces.disposes.LoggerTest, container=Default Managed Container)
INFO - Started Ejb(deployment-id=cdi-produces-disposes.Comp, ejb-name=cdi-produces-disposes.Comp, container=Default Managed Container)
INFO - Started Ejb(deployment-id=org.superbiz.cdi.produces.disposes.LoggerTest, ejb-name=org.superbiz.cdi.produces.disposes.LoggerTest, container=Default Managed Container)
INFO - Deployed Application(path=/Users/dblevins/examples/cdi-produces-disposes)
##### Handler: @Produces created DatabaseHandler!, Writing to the database!
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.02 sec

Results :

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