Null pointer no PersistenceContext

10 respostas
B

Caros,

Não estou conseguindo injetar o PersistenceContext no EntityManager, gerando um NullPointer ao tentar utilizá-lo. Vocês tem alguma ideia do que pode estar ocorrendo? Estou utilizando o JBoss AS 7. O Datasource está configurado corretamente.

persistence.xml

...
<persistence-unit name="TestPU" transaction-type="JTA">
        <jta-data-source>java:/TestsDS</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
        </properties>
    </persistence-unit>
...

UsuarioBean

@Stateless
public class UsuarioBean {
	@PersistenceContext
    private EntityManager em;

	public void salvar(Usuario user){
		em.persist(user); //Null Pointer aqui
	}
}

Erro:
javax.servlet.ServletException: java.lang.NullPointerException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)

Stack:

java.lang.NullPointerException

br.com.sample.UsuarioBean.salvar(UsuarioBean.java:22)

br.com.sample.mb.UsuarioMB.salvar(UsuarioMB.java:18 )

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

org.apache.el.parser.AstValue.invoke(AstValue.java:262)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278 )

com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88 )

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

javax.faces.component.UICommand.broadcast(UICommand.java:315)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)

com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118 )

javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

10 Respostas

R

Como voce configurou seu datasource ?

H

Você tem apenas um PersistenceUnit declarado no persistence.xml?

B
<datasource jndi-name="java:/TestsDS" pool-name="TestsDS"
	enabled="true" use-java-context="true">
	<connection-url>jdbc:mysql://localhost:3306/test_jsfjpa</connection-url>
	<driver>com.mysql</driver>
	<pool>
		<min-pool-size>10</min-pool-size>
		<max-pool-size>100</max-pool-size>
		<prefill>true</prefill>
	</pool>
	<security>
		<user-name>root</user-name>
		<password>senha</password>
	</security>
</datasource>
B

Sim Hebert Coelho, apenas 1 PersistenceUnit. Fiz o teste com @PersistenceContext(unitName = UNIT_NAME), e ocorre o mesmo erro.

H

brccosta:
Sim Hebert Coelho, apenas 1 PersistenceUnit. Fiz o teste com @PersistenceContext(unitName = UNIT_NAME), e ocorre o mesmo erro.
E como você está usando o UsuarioBean de dentro do seu ManagedBean?

B

@EJB
UsuarioBean userBean;

R

Provavelmente pode ser o erro na jndi, altera para a forma como vou passar, acrescentando o jboss/datasources e o jta=“false”

<datasource jta="false" jndi-name="java:jboss/datasources/TestsDS" pool-name="TestsDS"  
    enabled="true" use-java-context="true">  
    <connection-url>jdbc:mysql://localhost:3306/test_jsfjpa</connection-url>  
    <driver>com.mysql</driver>  
    <pool>  
        <min-pool-size>10</min-pool-size>  
        <max-pool-size>100</max-pool-size>  
        <prefill>true</prefill>  
    </pool>  
    <security>  
        <user-name>root</user-name>  
        <password>senha</password>  
    </security>  
</datasource>

E no seu persistence.xml altera a linha java:/TestsDS para isso:

<non-jta-data-source>java:jboss/datasources/TestsDS</non-jta-data-source>

Flw

B

Project > Clean all projects… and, done! it works!

Could you understand that???!

R

No! =D

B

Valeu pela atenção pessoal!

Criado 14 de fevereiro de 2013
Ultima resposta 14 de fev. de 2013
Respostas 10
Participantes 3