Boa tarde a todos, antes de tudo agradeço em quem me ajudar.
estou estudando CDI a partir deste tutorial: http://blog.gilliard.eti.br/2010/05/aplicacao-desktop-com-weld-parte-2/
eu estou tentando fazer funcionar o Decorator do CDI, a minha classe decorator herda a classe que quero que ela decore, essa classe à ser decorada é injetada em outra e o decorator é declarado no beans.xml… nenhum erro acontece porém o método executado não é o da classe decoradora, mas sim o da que deveria ser decorada…
Em resumo peço que alguém me ajude a visualizar onde estou errando, códigos:
beans.xml:
[code]<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”>
<interceptors>
<class>pacote.cdi.bo.interceptors.implementation.SeguroInterceptor</class>
</interceptors>
<decorators>
<class>pacote.cdi.bo.decorator.CaixaDecorator</class>
</decorators>
</beans>[/code]
classe à ser decorada:
[code]package pacote.cdi.bo;
import java.io.Serializable;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import pacote.cdi.vo.Movimentacao;
public class CaixaEletronico implements Serializable {
@Inject private Event<Movimentacao> eventMovimentacao;
public void depositar(float valor) {
eventMovimentacao.fire(new Movimentacao(valor));
}
public void sacar(float valor) {
eventMovimentacao.fire(new Movimentacao(-1 * valor));
}
}
[/code]
classe decorator:
[code]package pacote.cdi.bo.decorator;
import java.io.Serializable;
import javax.decorator.Decorator;
import javax.decorator.Delegate;
import javax.inject.Inject;
import pacote.cdi.bo.CaixaEletronico;
@Decorator
public class CaixaDecorator extends CaixaEletronico implements Serializable {
@Inject
@Delegate
private CaixaEletronico delegate;
@Override
public void sacar(float valor) {
System.out.println("CaixaDecorator.sacar()");
delegate.sacar(valor);
}
@Override
public void depositar(float valor) {
System.out.println("CaixaDecorator.depositar()");
delegate.depositar(valor);
}
}
[/code]
outras relevantes:
[code]package pacote.cdi.main;
import org.jboss.weld.environment.se.StartMain;
public class Main {
public static void main(String[] args) {
long inicio = System.currentTimeMillis();
System.out.println(inicio);
StartMain.main(args);
long fim = System.currentTimeMillis();
System.out.println(fim);
System.out.println("diferença:"+ (fim-inicio));
}
}
[/code]
[code]package pacote.cdi.main;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import org.jboss.weld.environment.se.events.ContainerInitialized;
import pacote.cdi.bo.CaixaEletronico;
import pacote.cdi.bo.ContaBancaria;
public class Core {
@Inject private CaixaEletronico caixaEletronico;
@Inject private ContaBancaria contaBancaria;
public void containerInitialized (@Observes ContainerInitialized initEvent){
System.out.println("container inicializado");
caixaEletronico.sacar(200.0f);
System.out.println(contaBancaria.getSaldo());
caixaEletronico.depositar(300.0f);
System.out.println(contaBancaria.getSaldo());
}
}
[/code]
novamente, grato.
editando, eu tinha deixando as classes sem implementar Serializable, googlando vi gente dizendo que resolveu problema fazendo isso mas não resolveu, também estava invertida a ordem que declarei no beans.xml entre o decorator e o interceptor mas invertendo não deu diferença…