Problemas com JSF, Weld CDI e TomCat [RESOLVIDO]

37 respostas
B

Bom dia, galera.

Estou fazendo um estudo com JSF 2.2, TomCat 7 e Weld 2.0

Na parte do weld, já foi criado o arquivo beans.xml e alterado o web.xml;

Da a seguinte exceção:

WARNING: #{cidadeBean.grava}: java.lang.NullPointerException
javax.faces.FacesException: #{cidadeBean.grava}: java.lang.NullPointerException
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:722)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
	... 23 more
Caused by: java.lang.NullPointerException
	at br.com.protech.officeManager.dao.DAO.adiciona(DAO.java:37)
	at br.com.protech.officeManager.mb.CidadeBean.grava(CidadeBean.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 24 more

Abaixo estão os Arquivos

public class JPAUtil {

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

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

	public void close(@Disposes EntityManager em) {
		em.close();
	}

}
public class DAO<T> implements Serializable {

	private static final long serialVersionUID = 1L;

	private final Class<T> classe;

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

	@Inject
	private EntityManager em;

	public void adiciona(T t) {
		em.getTransaction().begin();
		em.persist(t);
		em.getTransaction().commit();
	}

//restante do codigo
}
@Named
@ViewScoped
public class CidadeBean implements Serializable {

	private Cidade cidade = new Cidade();

	private LazyDataModel<Cidade> lista;

	public void grava() {
		DAO<Cidade> dao = new DAO<Cidade>(Cidade.class);
		if (this.cidade.getId() != null)
			dao.atualiza(this.cidade);
		else
			dao.adiciona(this.cidade);
		this.cidade = new Cidade();
	}
   //Restante de codigo
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">
<ui:composition template="/_template.xhtml">
	<ui:define name="corpo">
		<h:form id="cadastro">
			<p:panel header="Cadastro">
				<h:messages styleClass="erros" />
				<h2>
					<h:outputText value="Editando ICMS"
						rendered="#{not empty cidadeBean.cidade.id}" />
					<h:outputText vralue="Cadastrando ICMS"
						rendered="#{empty cidadeBean.cidade.id}" />
				</h2>
				<h:outputLabel value="Cidade:" for="cidade" />
				<h:inputText id="cidade" value="#{cidadeBean.cidade.cidade}"
					required="true" />
				<h:outputLabel value="Estado:" for="uf" />
				<h:inputText id="uf" value="#{cidadeBean.cidade.uf}" required="true"
					size="100" />

				<p:commandButton value="Gravar" action="#{cidadeBean.grava}"
					update=":cadastro " />
				<p:commandButton value="Cancelar"
					action="#{cidadeBean.limpaFormulario}" immediate="true"
					update=":cadastro " />
			</p:panel>
		</h:form>
	</ui:define>
</ui:composition>
</html>

Obrigado pela ajuda…

37 Respostas

D

Não sei direito, mas Tomcat 7 não suporta a especificação CDI, suporta?
Lendo sobre, cheguei aqui, onde há uma resposta mais adequada para o que você está tentando fazer. O sujeito cita o Apache TomEE (pronuncie Tommy).
Talvez te ajude.

I

Posta o seu web.xml para ver se as configurações JNDI estão OK e dá uma olhada em como o Sergio Lopes exemplificou o ciclo de vida do CDI com JPA, ficou muito bom,
link http://blog.caelum.com.br/use-cdi-no-seu-proximo-projeto-java/ .

Pq você não injeta Cidade também ?

I

Suporta sim, mas é necessário fazer uma configuração em um arquivo context.xml, porque tanto o Tomcat quanto o Jetty trabalham de forma READ-ONLY com JNDI.

B

Muito Obrigado pelas respostas.

segue meu web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>OfficeManager</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <listener>
	   <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
	</listener>
 
	<resource-env-ref>
	   <resource-env-ref-name>BeanManager</resource-env-ref-name>
	   <resource-env-ref-type>
	      javax.enterprise.inject.spi.BeanManager
	   </resource-env-ref-type>
	</resource-env-ref>
</web-app>

Segue o contexto.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
   <Manager pathname=""/> <!-- disables storage of sessions across restarts -->
   <Resource name="BeanManager"
      auth="Container"
      type="javax.enterprise.inject.spi.BeanManager"
      factory="org.jboss.weld.resources.ManagerObjectFactory"/>
</Context>

Quando resolver esse problema irei injetar a classe Cidade, e eu segui esse mesmo artigo da caelum, mesmo assim não deu certo.

D
@Named  
@ViewScoped  
public class CidadeBean implements Serializable {  
  
    private Cidade cidade = new Cidade();  
  
    private LazyDataModel<Cidade> lista;  
  
    public void grava() {  
        DAO<Cidade> dao = new DAO<Cidade>(Cidade.class);  // se vc esta usando cdi vc não deve dar new 
        if (this.cidade.getId() != null)  
            dao.atualiza(this.cidade);  
        else  
            dao.adiciona(this.cidade);  
        this.cidade = new Cidade();  
    }  
   //Restante de codigo  
}

se vc der new no seu DAO o cdi não vai injetar o entityManager

e consequentimente vc tomara um nullpointer

tenta assim

@Named  
@ViewScoped  
public class CidadeBean implements Serializable {  
  
    private Cidade cidade = new Cidade();  
    @Inject 
    private DAO<Cidade> dao ;  
    private LazyDataModel<Cidade> lista;  
  
    public void grava() {    
        if (this.cidade.getId() != null)  
            dao.atualiza(this.cidade);  
        else  
            dao.adiciona(this.cidade);  
        this.cidade = new Cidade();  
    }  
   //Restante de codigo  
}

e crie tambem essa classe

import java.lang.reflect.ParameterizedType;

import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
import javax.persistence.EntityManager;

public class DAOFactory {

	@Inject
	private EntityManager em;

	public DAOFactory() {
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Produces @Dependent
	public DAO create(final InjectionPoint injectionPoint){
		ParameterizedType parameterizedType = (ParameterizedType) injectionPoint.getType();
		Class classe = (Class) parameterizedType.getActualTypeArguments()[0];
		return new DAO(classe, em);
	}
}
D

ivandasilva:
Posta o seu web.xml para ver se as configurações JNDI estão OK e dá uma olhada em como o Sergio Lopes exemplificou o ciclo de vida do CDI com JPA, ficou muito bom,
link http://blog.caelum.com.br/use-cdi-no-seu-proximo-projeto-java/ .

Pq você não injeta Cidade também ?

não vejo necessidade alguma em se injetar a Classe Cidade.

I

DaniloAndrade:
ivandasilva:
Posta o seu web.xml para ver se as configurações JNDI estão OK e dá uma olhada em como o Sergio Lopes exemplificou o ciclo de vida do CDI com JPA, ficou muito bom,
link http://blog.caelum.com.br/use-cdi-no-seu-proximo-projeto-java/ .

Pq você não injeta Cidade também ?

não vejo necessidade alguma em se injetar a Classe Cidade.

DaniloAndrade, porque você não vê ?

B

Fiz as Alterações de acordo com o DaniloAndrade e agora apareceu as seguintes exceções, pelo que pesquisei o DAOFactory era pra não aparecer essa exceção

I

Em qual pasta você colocou o beans.xml ?

Em um projeto web o correto é em WEB-INF, mas, comigo já ocorreu este mesmo erro em um projeto web, então eu coloquei dentro do META-INF e funcionou Ok.

B

Eu Coloquei no META-INF, mais coloquei no WEB-INF pra fazer um teste

D

tira o @RequestScoped do metodo dessa classe pra teste

public class JPAUtil {  
  
    private static EntityManagerFactory emf = Persistence  
            .createEntityManagerFactory("tributoProduto");  
  
    @Produces  
    //@RequestScoped  //tire o  requestscoped
    public EntityManager getEntityManager() {  
        return emf.createEntityManager();  
    }  
  
    public void close(@Disposes EntityManager em) {  
        em.close();  
    }  
  
}

e vê se muda a mensagem

B

tirei o @RequestScoped e nada…

vou colocar as libs, só pra desencargo

I

o seu EntityManagerFactory está static ainda ?

se estiver, põe um @Producer… e de quebra põe ele com o @ApplicationScoped para ser criado uma só vez

private EntityManagerFactory emf;

@Produces @ApplicationScoped
public void createEMF(EntityManagerFactory emf){
    this.emf = emf
}

e você pode também adicionar um @Dispose para fechar automágicamente a sua fábrica

public void createEMF(@Dispose EntityManagerFactory emf){
    emf.close();
}
D

velhinho faz o seguinte

vc disse que esta usando a versão 2.0 do weld

troca pra versão 1.1 final

a versão 2.0 é um beta ainda

B

Voltei pro Weld 1.1, mais voltou o erro inicial do nullPointer.

Era pra ser tão difícil assim?

D

não era não,

coloca o log do erro atual e o codigo das classes apos as alterações

B

ok, valeu Danilo, você está me ajudando muito.

public class JPAUtil {
	private static EntityManagerFactory emf = Persistence
			.createEntityManagerFactory("tributoProduto");

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

	public void close(@Disposes EntityManager em) {
		em.close();
	}
}
public class DAO<T> implements Serializable {

	private static final long serialVersionUID = 1L;

	private final Class<T> classe;

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

	@Inject
	private EntityManager em;

	public void adiciona(T t) {
		em.getTransaction().begin();
		em.persist(t);
		em.getTransaction().commit();
	}
}
public class DAOFactory {

	@Inject
	private EntityManager em;

	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Produces
	@Dependent
	public DAO create(final InjectionPoint injectionPoint) {
		ParameterizedType parameterizedType = (ParameterizedType) injectionPoint
				.getType();
		Class classe = (Class) parameterizedType.getActualTypeArguments()[0];
		return new DAO(classe);

	}

}

Acabei de notar que esse bean, no método getulista(), passa um DAO pra outra Classe;

@Named
@ViewScoped
public class CidadeBean implements Serializable {

	@Inject
	private Cidade cidade;

	@Inject
	private DAO<Cidade> dao;

	private LazyDataModel<Cidade> lista;

	public void grava() {
		if (this.cidade.getId() != null)
			dao.atualiza(this.cidade);
		else
			dao.adiciona(this.cidade);
		this.cidade = new Cidade();
	}

	public LazyDataModel<Cidade> getLista() {

		if (lista == null) {
			lista = new DataModel<Cidade>(dao);
		}
		return lista;
	}
public class DataModel<T> extends LazyDataModel<T> {

	private static final long serialVersionUID = 1L;
	private List<T> lista;	
	private DAO<T> dao;

	public DataModel(DAO<T> dao) {
		this.dao = dao;
	}

//Restante da Classe
}
D

cria um novo construtor aqui no DAO que vai receber a Classe e o EntityManager

public class DAO<T> implements Serializable {  
  
    private static final long serialVersionUID = 1L;  
  
    private final Class<T> classe;  
  
    public DAO(Class<T> classe, EntityManager em) {  // construtor com o entitymanager
        this.classe = classe;  
        this.em = em;
    }  
  
    @Inject  // pode tirar o inject daqui ele não sera mais necessario
    private EntityManager em;  
  
    public void adiciona(T t) {  
        em.getTransaction().begin();  
        em.persist(t);  
        em.getTransaction().commit();  
    }  
}

na fabrica usa o novo construtor

public class DAOFactory {  
  
    @Inject  
    private EntityManager em;  
  
    @SuppressWarnings({ "rawtypes", "unchecked" })  
    @Produces  
    @Dependent  
    public DAO create(final InjectionPoint injectionPoint) {  
        ParameterizedType parameterizedType = (ParameterizedType) injectionPoint  
                .getType();  
        Class classe = (Class) parameterizedType.getActualTypeArguments()[0];  
        return new DAO(classe, em);  
  
    }  
  
}

lembra o que eu falei antes, quando vc da new o conteiner não vai injetar as dependências que a classe venha precisar por isso vc deve passar pra classe essa dependência

se agente parar pra analisar vamos perceber que o cdi não tem como construir a classe DAO sozinha porque ele vai depender de onde vai ser injetada por isso criamos a fabrica

mas não adianta vc construir o dao passando a classe não passar o entitymanager tambem por que como estamos dando new no dao o cdi não vai injetar o entitymanager

B

Agora que eu entendi, funcionou Certinho…

Muito Obrigado pela ajuda de todos em especial o DaniloAndrade.

Abraços!

I

show, posta como resolvido o post.

E

blzzz

R

Olá Boa Tarde!

Prezados estou passando pelo problema só que já apliquei a solução aqui desenvolvida mais não tive sucesso alguem poderia me dar uma força segue o erro.

16:30:34,250 INFO  [org.jboss.weld.Version] - WELD-000900: 2.1.2 (Final)
16:30:34,389 INFO  [org.jboss.weld.Bootstrap] - WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
16:30:34,695 INFO  [org.jboss.weld.environment.tomcat7.Tomcat7Container] - Tomcat 7+ detected, CDI injection will be available in Servlets and Filters. Injection into Listeners is not supported
16:30:34,745 WARN  [org.jboss.weld.Interceptor] - WELD-001700: Interceptor annotation class javax.ejb.PostActivate not found, interception based on it is not enabled
16:30:34,746 WARN  [org.jboss.weld.Interceptor] - WELD-001700: Interceptor annotation class javax.ejb.PrePassivate not found, interception based on it is not enabled
Fev 06, 2014 4:30:34 PM org.apache.catalina.core.StandardContext listenerStart
Grave: Exception sending context initialized event to listener instance of class org.jboss.weld.environment.servlet.Listener
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type DAO<Ocupacao> with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private br.com.dominio.controller.OcupacaoController.dao
  at br.com.dominio.controller.OcupacaoController.dao(OcupacaoController.java:0)

Ocupacaocontroller

@Named 
@ViewScoped
public class OcupacaoController implements Serializable {
	
	private static final long serialVersionUID = 1229520061651250879L;

	private Ocupacao registroSelecionado;
	private List<Ocupacao> ocupacoes;
	private int totalRegistros;	

    @Inject
	private Ocupacao ocupacao;
	
	
	@Inject
	private DAO<Ocupacao> dao;
	

	public DAO<Ocupacao> getDao() {
		return dao;
	}

	public void setDao(DAO<Ocupacao> dao) {
		this.dao = dao;
	}

        ...

Notei que no log menciona algo a respeito de qualificadores, não fiz nada disto estou bem no começo do projeto e só queria ver a execução do mesmo mostrando a unica pagina que tenho e ver as tabelas no banco serem criadas pelo Hibernate mais num funfou mesmo seguindo aqui as explicações dadas pelo Sr. Danilo.

O Projeto usa JSF 2.2, JPA, Hibernate 4.3

M

PessoALL,

Fiz tudo como manda o figurino… mas estou com um problema aqui;

public class UsuarioService implements Serializable
{	
	private static final long serialVersionUID = 1L;
	
	@Inject
	private GenericDAO<Usuario> usuarioDAO; <= AQUI ESTÁ COM UM WARNING (No bean is eligible for injection to the injection point [JSR-299 §5.2.1])
	
	private static Logger logger = Logger.getLogger(Handler.class);
	
	public UsuarioService(){}
    
	@Log
        public Usuario login(String username, String password)

quando uso o GenericDAO para criar um DAO de um objeto. Como não tenho um construtor sem argumentos… meu único construtor na classe GenericDAO é esse (ver abaixo);

public class GenericDAO<T> implements Serializable
{
	private static final long serialVersionUID = 1L;
	
	private EntityManager em;

	private Class<T> entityClass;
	
	public GenericDAO(Class<T> entityClass, EntityManager em)
	{
		this.entityClass = entityClass;
		this.em = em;
	}
...

estou tomando o erro logo na inicialização do Tomcat (log de erro completo abaixo);

E agora? como fazer?

DAOFactory

public class DAOFactory
{
	@Inject
	private EntityManager em;
	
	@Produces
    @SuppressWarnings({ "unchecked", "rawtypes" })  
	public GenericDAO create(InjectionPoint injectionPoint)
	{
		ParameterizedType type = (ParameterizedType) injectionPoint.getType();
		
		Class classe = (Class) type.getActualTypeArguments()[0];
		
		return new GenericDAO(classe, em);
	}
}

JPAUtil

@ApplicationScoped
public class JPAUtil
{
	private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("portal");
	
	@Produces
	@RequestScoped
	public static EntityManager getEntityManager()
	{
		return emf.createEntityManager();
	}
	
    public void close(@Disposes EntityManager em)
    {
    	em.close();
    }
}

Log da console do TomCat

out 09, 2014 3:58:20 PM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre8\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files (x86)\Intel\Services\IPT\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\12.0\DLLShared\;C:\Program Files (x86)\Roxio\OEM\AudioCore\;%M2%;C:\Program Files\Java\jdk1.8.0_05\bin;C:\Program Files\SafeNet\Authentication\SAC\x32;C:\Program Files\SafeNet\Authentication\SAC\x64;C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files (x86)\OpenSSH\bin;%M2%;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\MySQL\MySQL Utilities 1.3.5\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\NetBeans 8.0\java\maven\bin;C:\Program Files (x86)\Git\bin;.
out 09, 2014 3:58:20 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:portal' did not find a matching property.
out 09, 2014 3:58:20 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-nio-8080"]
out 09, 2014 3:58:20 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMAÇÕES: Using a shared selector for servlet write/read
out 09, 2014 3:58:20 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-nio-8009"]
out 09, 2014 3:58:20 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMAÇÕES: Using a shared selector for servlet write/read
out 09, 2014 3:58:20 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 1013 ms
out 09, 2014 3:58:20 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
out 09, 2014 3:58:20 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/8.0.8
2014-10-09 15:58:25 INFO  EnhancedListener:59 - Initialize Weld using ServletContainerInitializer
2014-10-09 15:58:25 INFO  Version:151 - WELD-000900: 2.2.4 (Final)
2014-10-09 15:58:25 INFO  Bootstrap:204 - WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
2014-10-09 15:58:25 WARN  Interceptor:47 - WELD-001700: Interceptor annotation class javax.ejb.PostActivate not found, interception based on it is not enabled
2014-10-09 15:58:25 WARN  Interceptor:47 - WELD-001700: Interceptor annotation class javax.ejb.PrePassivate not found, interception based on it is not enabled
2014-10-09 15:58:26 INFO  TomcatContainer:41 - Tomcat 7+ detected, CDI injection will be available in Servlets, Filters and Listeners.
out 09, 2014 3:58:27 PM org.apache.catalina.core.ContainerBase startInternal
GRAVE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/portal]]
	at java.util.concurrent.FutureTask.report(Unknown Source)
	at java.util.concurrent.FutureTask.get(Unknown Source)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:851)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/portal]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	... 6 more
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type GenericDAO<Usuario> with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private br.com.snclavalinmarte.portal.service.UsuarioService.usuarioDAO
  at br.com.snclavalinmarte.portal.service.UsuarioService.usuarioDAO(UsuarioService.java:0)

	at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:370)
	at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:291)
	at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
	at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:165)
	at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:529)
	at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
	at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
	at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60)
	at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53)
	... 4 more

out 09, 2014 3:58:27 PM org.apache.catalina.core.ContainerBase startInternal
GRAVE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
	at java.util.concurrent.FutureTask.report(Unknown Source)
	at java.util.concurrent.FutureTask.get(Unknown Source)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:752)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:851)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 6 more

out 09, 2014 3:58:27 PM org.apache.catalina.startup.Catalina start
GRAVE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:752)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 11 more

out 09, 2014 3:58:27 PM org.apache.coyote.AbstractProtocol pause
INFORMAÇÕES: Pausing ProtocolHandler ["http-nio-8080"]
out 09, 2014 3:58:27 PM org.apache.coyote.AbstractProtocol pause
INFORMAÇÕES: Pausing ProtocolHandler ["ajp-nio-8009"]
out 09, 2014 3:58:27 PM org.apache.catalina.core.StandardService stopInternal
INFORMAÇÕES: Stopping service Catalina
out 09, 2014 3:58:27 PM org.apache.coyote.AbstractProtocol destroy
INFORMAÇÕES: Destroying ProtocolHandler ["http-nio-8080"]
out 09, 2014 3:58:27 PM org.apache.coyote.AbstractProtocol destroy
INFORMAÇÕES: Destroying ProtocolHandler ["ajp-nio-8009"]
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "Abandoned connection cleanup thread":
 java.lang.Object.wait(Native Method)
 java.lang.ref.ReferenceQueue.remove(Unknown Source)
 com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:40)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "Abandoned connection cleanup thread":
 java.lang.Object.wait(Native Method)
 java.lang.ref.ReferenceQueue.remove(Unknown Source)
 com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:40)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [weld-worker-1] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "weld-worker-1":
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
 java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [weld-worker-2] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "weld-worker-2":
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
 java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [weld-worker-3] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "weld-worker-3":
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
 java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [weld-worker-4] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "weld-worker-4":
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
 java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [weld-preloader-1] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "weld-preloader-1":
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
 java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [weld-preloader-2] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "weld-preloader-2":
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
 java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/portal] appears to have started a thread named [weld-preloader-3] but has failed to stop it. This is very likely to create a memory leak.
out 09, 2014 3:58:27 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: Stack trace of thread "weld-preloader-3":
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
 java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)
R

Olá Marcelo boa tarde.

Prezado eu tava com os meus estudo parado mesmo mais apos este período eu observei uma videos aulas e estou voltando ao meu projeto, estou refazendo ele agora usando o Maven e não esta dando nenhum problema ( do que vc esta relatando ) infelizmente eu não sou a pessoa ideal para tirar duvidas rsrsrsrs.

Com certeza alguém com maior experiencia deve dar um retorno, só aproveitei a deixa pra comentar uma vez que estou voltando ao projeto

M

Você está usando CDI 1.1? se sim, precisa trocar o código do seu produtor para algo assim:

public class DAOFactory  
{  
    @Inject  
    private EntityManager em;  
      
    @Produces  
    @SuppressWarnings({ "unchecked", "rawtypes" })    
    public <T> GenericDAO<T> create(InjectionPoint injectionPoint)  
    {  
        ParameterizedType type = (ParameterizedType) injectionPoint.getType();  
          
        Class classe = (Class) type.getActualTypeArguments()[0];  
          
        return new GenericDAO(classe, em);  
    }  
}

Faz a alteração e veja se resolve.

R

Olá Prezados bom dia.

Queria tirar uma duvida, quando se tem um projeto com CDI temos os Jar´s cdi-api.jar e weld-servlet.jar do Weld e que eu entendo que se trata de CDI pelo que eu estudei , agora estou iniciando um projeto que nas dependências do maven eu tenho o javax.inject que corresponde ao javax.inject-1.jar e faço nele eu utilizo as anotações @named e @inject e não tenho os jar´s mencionados anteriormente, isto esta me deixando confuso alguém poderia comentar sobre?

M

Qual a dependencia do maven? coloca o pom ae

R

Olá Mario bom dia!

Então é um projeto de estudo antigo que eu utilizava com Spring, com a introdução do CDI “Use CDI no seu próximo projeto” eu resolvi fazer isto sem o Spring com o Weld e me dei mal não consegui, passado-se muitos meses eu observei umas aulas na net e resolvi voltar a um novo projeto usando CDI mais com o Spring mais, o JSF 2.2 é o cara e não o Spring MVC, o que me intrigou foi que na video aula há a injeção mais não tem weld e isto me confundiu e queria tirar esta duvida se eu vou precisar do weld também ou não.

O projeto tá no inicio, tá funcionando o unico problema que vi é com a mensagem do faces o h:message acho que não tá existindo o contexto do faces., bem mais ai vai o pom ou melhor parte dele.

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-framework-bom</artifactId>
			<version>4.1.0.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

<dependencies>

	<!-- SLF4J -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>1.7.7</version>
	</dependency>

	<!-- COMMONS LANG3 -->
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.1</version>
	</dependency>

	<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>1.3.1</version>
	</dependency>

	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-io</artifactId>
		<version>1.3.2</version>
	</dependency>

	<dependency>
		<groupId>javax.inject</groupId>
		<artifactId>javax.inject</artifactId>
		<version>1</version>
	</dependency>

	<!-- SERVLET API -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
	</dependency>

	<!-- JAVAEE WEB API -->
	<dependency>
		<groupId>javax</groupId>
		<artifactId>javaee-web-api</artifactId>
		<version>7.0</version>
		<scope>provided</scope>
	</dependency>

	<dependency>
		<groupId>com.sun.faces</groupId>
		<artifactId>jsf-api</artifactId>
		<version>2.2.8</version>
	</dependency>

	<dependency>
		<groupId>com.sun.faces</groupId>
		<artifactId>jsf-impl</artifactId>
		<version>2.2.8</version>
	</dependency>

	<!-- JSTL -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>

	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.2</version>
	</dependency>

	<!-- PRIMEFACES -->
	<dependency>
		<groupId>org.primefaces</groupId>
		<artifactId>primefaces</artifactId>
		<version>5.0</version>
	</dependency>

	<dependency>
		<groupId>org.primefaces.themes</groupId>
		<artifactId>all-themes</artifactId>
		<version>1.0.10</version>
	</dependency>

	<!-- Spring dependencies -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
	</dependency>

	<!-- SPRING SECURITY WEB -->
	<dependency> <groupId>org.springframework.security</groupId> 
		<artifactId>spring-security-web
		</artifactId> <version>${spring.security.version}</version> 
	</dependency> 

	<!-- SPRING SECURITY -->
	<dependency> <groupId>org.springframework.security</groupId> 
		<artifactId>spring-security-config</artifactId>
		<version>${spring.security.version}</version> 
	</dependency> 

	<!-- Hibernate dependencies -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-entitymanager</artifactId>
		<version>4.3.4.Final</version>
	</dependency>

	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-validator</artifactId>
		<version>5.1.0.Final</version>
	</dependency>

	<!-- C2P0 dependencies -->
	<dependency>
		<groupId>c3p0</groupId>
		<artifactId>c3p0</artifactId>
		<version>0.9.1.2</version>
	</dependency>

	<!-- Database dependencies -->

	<!-- PostgresSQL dependencies -->
	<dependency>
		<groupId>commons-dbcp</groupId>
		<artifactId>commons-dbcp</artifactId>
		<version>1.3</version>
		<exclusions>
			<exclusion>
				<groupId>commons-logging</groupId>
				<artifactId>commons-logging</artifactId>
			</exclusion>
			<exclusion>
				<groupId>xml-apis</groupId>
				<artifactId>xml-apis</artifactId>
			</exclusion>
		</exclusions>
	</dependency>

	<dependency>
		<groupId>postgresql</groupId>
		<artifactId>postgresql</artifactId>
		<version>9.1-901.jdbc4</version>
	</dependency>

	<!-- Utilities -->
	<dependency>
		<groupId>commons-collections</groupId>
		<artifactId>commons-collections</artifactId>
		<version>3.2.1</version>
	</dependency>

</dependencies>
M

O javax.inject é de uma spec chamada DI (https://jcp.org/en/jsr/detail?id=330) que é diferente do CDI (https://jcp.org/en/jsr/detail?id=299 e https://jcp.org/en/jsr/detail?id=346).

Na spec de DI só é definida a annotations @Inject e algumas outras, mas não possui as annotations de escopo por exemplo. Essa spec DI o Spring suporta, por isso seu código funciona com ele. Pro Spring usar @Inject tem o mesmo efeito de usar @Autowired. Além do Spring o Guice também suporta esta spec.

R

Humm, realmente DI e CDI eu não tava alinhado com isto, bem sem querer abusar meu prezado o projeto tá rodando este fim de semana devo dar uma adiantada nele, então não sei se vale a pena mecher com weld o meu MB abaixo no metodo gravar chama displayInfoMessageToUser(“Registro criado com sucesso!”); que nada mais é do que

protected void displayInfoMessageToUser(String message) {
		FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, "", message);
		//FacesUtil messageUtil = new FacesUtil();
		//messageUtil.exibirMensagemAlerta(message);
		this.facesContext.addMessage(null, facesMessage);
	}

como utilizo o primefaces ele chama o p:growl porém a caixa vem vazia sem nenhuma informação vc teria alguma dica do que poderia ser?

MB

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.faces.view.ViewScoped;

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

import org.apache.log4j.Logger;
import org.primefaces.event.SelectEvent;

import br.com.dominio.modelo.Ocupacao;
import br.com.dominio.servicos.OcupacaoService;

@Named(value="ocupacaoC")
@ViewScoped
public class OcupacaoController extends AbstractMB implements Serializable {
	
	private static final long serialVersionUID = 201404221641L;
	private static final Logger logger = Logger.getLogger(OcupacaoController.class);

	private Ocupacao ocupacao;
	private Ocupacao registroSelecionado;
	private List<Ocupacao> ocupacoes;
	private int totalRegistros;

	@Inject		
	private OcupacaoService ocupacaoService;

	public OcupacaoController() {
	}

        public void gravar() {
		try {
			this.ocupacaoService.update(ocupacao);
			closeDialog();
			displayInfoMessageToUser("Registro criado com sucesso!");
			load();
			preparaInclusao();						
		} catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ocorreu um erro ao atualizar o registro");
            e.printStackTrace();
		}
	}
M

Sem analisar melhor não sei te dizer, mas posso sugerir vc usar o OmniFaces, eles tem alguns componentes utulitários pra ajudar no lado server-side, inclusive um pra mensagens, da uma olhada aqui: http://showcase.omnifaces.org/utils/Messages.

M

mario.fts:
Você está usando CDI 1.1? se sim, precisa trocar o código do seu produtor para algo assim:

public class DAOFactory  
{  
    @Inject  
    private EntityManager em;  
      
    @Produces  
    @SuppressWarnings({ "unchecked", "rawtypes" })    
    public <T> GenericDAO<T> create(InjectionPoint injectionPoint)  
    {  
        ParameterizedType type = (ParameterizedType) injectionPoint.getType();  
          
        Class classe = (Class) type.getActualTypeArguments()[0];  
          
        return new GenericDAO(classe, em);  
    }  
}

Faz a alteração e veja se resolve.

Como diria Anakin Skywalker… It´s working!!!

Mas…estou tomando o erro abaixo quando termina o acesso ao EM.

2014-10-10 13:20:26 ERROR Bean:192 - WELD-000019: Error destroying an instance org.hibernate.ejb.EntityManagerImpl@33c78ee3 of Producer Method [EntityManager] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @RequestScoped public static br.com.snclavalinmarte.portal.dao.JPAUtil.getEntityManager()]
M

deu erro pra fechar o EM,ve qual foi e exception que deu, provavelmente vc fechou o em em algum lugar do código.

M

Achei o problema!!! Na verdade os problemas. O primeiro foi que estavam sim fechado o EM dentro do meu GenericDAO quando fazia uma operação (CRUD). Ai removei e deixei o em.close() do produtor de EM, mas ai o problema aparecia no logout do usuário, pois eu invalidava a session. Agora está tudo bem. Vou criar um interceptador de transação no nível de serviço e este interceptador é que terá a responsabilidade de abrir a transação, “comitar” e depois fechar o EM. Mãos a obra!!!

Abraços!!!

T

Pessoal

vocês deram todos esses exemplos e até funcionou aqui, mas é obrigatório usar DAO genérico??
E se eu quiser um DAO específico que extende um generico?

M

tiagoemerick:
Pessoal

vocês deram todos esses exemplos e até funcionou aqui, mas é obrigatório usar DAO genérico??
E se eu quiser um DAO específico que extende um generico?

Tiago,

Pode sim com certeza. Eu acabei convertendo toda a aplicação para EJB, pois os ganhos com o servidor de aplicações valeram, controle de transação, log, open view in session, etc. Com isso acabei usando o DAOGeneric e cada entidade minha tem um DAO que estende este DAOGeneric e adiciona comportamentos específicos da entidade. A solução que descrevi acima me pareceu simples no primeiro momento, mas ai comecei a ter problemas com os comportamentos específicos de cada entidade, ai aliado a isso e mais outros pontos, resolvi converter tudo para EJB 3.1 "empacotado" em WAR.

Abraços.

J

Fala pessoal? eu queria saber como que faria para não utilizar a classe concreta no @inject

// assim tem mto acoplamento com a DAO neh não
@Inject
private DAO produtos;

Eu queria usar alguma interface IDAO, e fazer o DAO implementar essa interface, pra usar algo tipo

@Inject
private IDAO produtos;

mas ele num reconhece de jeito maneira? ele vê o IDAO mas não vai atrás do DAO. dá aquele erro de ?Unsatisfied dependencies for type?

Your comment is awaiting moderation.

Criado 15 de abril de 2013
Ultima resposta 27 de nov. de 2015
Respostas 37
Participantes 10