Dao Genérico + CDI

4 respostas
A

Ola pessoal,

estou tentando criar um DAO genérico mas utilizo o CDI, estou tendo este erro abaixo, quem puder ajudar agradeço.

GRAVE: Exception sending context initialized event to listener instance of class org.jboss.weld.environment.servlet.Listener
org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001410 The injection point field br.com.weblog.view.PostBean.dao has non-proxyable dependencies
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:288)
        at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:122)
        at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:141)
        at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:331)
        at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:317)
        at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:399)
        at org.jboss.weld.environment.servlet.Listener.contextInitialized(Listener.java:171)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:521)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1359)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
        at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1500)
        at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:849)
        at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:351)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:558)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        at java.lang.Thread.run(Thread.java:662)
DAO
public class DAO<T> {

    private final Class<T> classe;
    private EntityManager em;

    public DAO(Class<T> classe) {
        this.classe = classe;
    }

    public void adiciona(T t) {
        // persiste o objeto.
        em.persist(t);
    }...............
DAO Factory
public class DaoFactory {

    @RequestScoped
    @Produces
    public DAO create(InjectionPoint injectionPoint) {
        ParameterizedType type = (ParameterizedType) injectionPoint.getType();
        Class classe = (Class) type.getActualTypeArguments()[0];
        return new DAO(classe);
    }
}

4 Respostas

D

Posta a implementação ou só a parte de declaração até class de sua classe.

A
dreampeppers99:
Posta a implementação ou só a parte de declaração até class de sua classe.
ai vai:
/**
 *
 * @author Dilnei
 *
 * Bean gerenciado do JSF
 */
@Transactional
@RequestScoped
@Named
public class PostBean implements Serializable {

    @Inject
    private Post post;
    @Inject
    private DAO dao;

    public void gravaPost() {
        dao.adiciona(post);
    }

    public Post getPost() {
        return post == null ? new Post() : post;
    }
JPAUtil
public class JPAUtil {

    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("weblogPU");

    @RequestScoped
    @Produces
    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    // Recebe uma Entity Manager e faz o seu fechamento(@Disposes(ela sera descartada através desta annotation)).
    public void close(@Disposes EntityManager em) {
        em.close();
    }
bean
import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;

/**
 *
 * @author Dilnei
 *
 * Classe que representa o Objeto(entidade no banco de dados) Post
 */
@Entity
public class Post implements Serializable {

    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;
    private String post;
    private String avatar;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Calendar dataPostagem;
    private String nome;
....set get

Interceptor


/**
*
* @author Dilnei
*
* Interceptador que ira receber uma EntityManager via Injeção de dependências da CDI.
*/
@Interceptor
@Transactional
public class TransactionInterceptor {

@Inject
private EntityManager em;

// Método que inicia a transação, este é o método que interceptara as requisições.
// Como nossa classe não implementa nenhuma interface,podemos atribuir qualquer nome
// para o método, para indicar que é ele que interceptará as invocações, precisamos
// anotar com @AroundInvoke.
@AroundInvoke
public Object intercept(InvocationContext context) throws Exception {
System.out.println("Abrindo a Transação");
em.getTransaction().begin();

// Passando para o JSF tratar a requisicão e pegando o retorno da lógica.
Object resultado = context.proceed();
em.getTransaction().commit();
System.out.println("comitando a Transação");
return resultado;
}
}

A

Ola pessoal, consegui evoluir no weld mas agora tenho o erro nesta linnha do meu DaoFactory, agradeço quem puder ajudar:

[b]ParameterizedType type = (ParameterizedType) injectionPoint.getType();[/b]
public class DaoFactory {
  @Produces
  public DAO create(InjectionPoint injectionPoint) {
    ParameterizedType type = (ParameterizedType) injectionPoint.getType();
    Class classe = (Class) type.getActualTypeArguments()[0];
    return new DAO(classe);
  }
}
14/07/2011 13:36:20 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/post.xhtml]
javax.el.ELException: /post.xhtml @19,136 value="#{postBean.post.post}": Error reading 'post' on type br.com.weblog.view.PostBean_$$_javassist_5
        at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:107)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
        at javax.faces.component.UIOutput.getValue(UIOutput.java:168)
        at org.primefaces.util.ComponentUtils.getStringValueToRender(ComponentUtils.java:66)
        at org.primefaces.component.inputtextarea.InputTextareaRenderer.encodeMarkup(InputTextareaRenderer.java:104)
        at org.primefaces.component.inputtextarea.InputTextareaRenderer.encodeEnd(InputTextareaRenderer.java:51)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:295)
        at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
        at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
        at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:58)
        at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:46)
        at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:225)
        at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:148)
        at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:75)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
        at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
        at br.com.weblog.factory.DaoFactory.create(DaoFactory.java:18)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:304)
        at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)
        at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:163)
        at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:298)
        at org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:200)
        at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstance(MethodInjectionPoint.java:164)
        at org.jboss.weld.bean.ProducerMethod$1.produce(ProducerMethod.java:143)
        at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:360)
        at org.jboss.weld.context.DependentContext.get(DependentContext.java:62)
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:709)
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:771)
        at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:794)
        at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:108)
        at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:790)
        at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:802)
        at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1$1.proceed(ManagedBean.java:177)
        at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:51)
        at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:171)
        at org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:142)
        at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:165)
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:332)
        at org.jboss.weld.context.AbstractMapContext.get(AbstractMapContext.java:112)
        at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance(ClientProxyMethodHandler.java:143)
        at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:100)
        at org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43)
        at br.com.weblog.view.PostBean_$$_javassist_5.getPost(PostBean_$$_javassist_5.java)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:71)
        at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102)
        ... 46 more
T

Veja se isso te ajuda brother

Criado 13 de julho de 2011
Ultima resposta 14 de jul. de 2011
Respostas 4
Participantes 3