Erro jboss seam (entity manager null)

galera

eu to fazendo uma aplicação usando jboss seam, e to começando a estudar ele agora.

Dai eu to fazendo um login, e na hora de chamar o entity manager…ta vindo nulo.
Segue o erro dado:

23:32:37,453 INFO [org.jboss.bootstrap.impl.base.server.AbstractServer] JBossAS [6.0.0.Final "Neo"] Started in 43s:959ms 23:33:09,064 WARN [org.jboss.seam.security.jaas.SeamLoginModule] Error invoking login method: javax.el.ELException: org.jboss.seam.RequiredException: @In attribute requires non-null value: authenticator.em at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:339) [:1.0_02.CR5] at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:348) [:1.0_02.CR5] at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58) [:1.0_02.CR5] at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) [:1.0_02.CR5] at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) [:1.0_02.CR5] at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:175) [:2.2.1.Final] at org.jboss.seam.security.jaas.SeamLoginModule.login(SeamLoginModule.java:109) [:2.2.1.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_22] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [:1.6.0_22] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [:1.6.0_22] at java.lang.reflect.Method.invoke(Unknown Source) [:1.6.0_22] at javax.security.auth.login.LoginContext.invoke(Unknown Source) [:1.6.0_22] at javax.security.auth.login.LoginContext.access$000(Unknown Source) [:1.6.0_22] at javax.security.auth.login.LoginContext$5.run(Unknown Source) [:1.6.0_22] at java.security.AccessController.doPrivileged(Native Method) [:1.6.0_22] Caused by: org.jboss.seam.RequiredException: @In attribute requires non-null value: authenticator.em at org.jboss.seam.Component.getValueToInject(Component.java:2361) [:2.2.1.Final] at org.jboss.seam.Component.injectAttributes(Component.java:1739) [:2.2.1.Final] at org.jboss.seam.Component.inject(Component.java:1557) [:2.2.1.Final] at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:61) [:2.2.1.Final] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [:2.2.1.Final] at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) [:2.2.1.Final]

meu components.xml

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:drools="http://jboss.com/products/seam/drools"
xmlns:bpm="http://jboss.com/products/seam/bpm"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:web="http://jboss.com/products/seam/web"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.2.xsd
http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.2.xsd
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.2.xsd
http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd”>

<core:init debug=“true” jndi-pattern="@jndiPattern@"/>

<core:manager concurrent-request-timeout="500"
conversation-timeout="120000"
conversation-id-parameter="cid"
parent-conversation-id-parameter=“pid”/>

<!-- Make sure this URL pattern is the same as that used by the Faces Servlet -->
<web:hot-deploy-filter url-pattern="*.seam"/>

<persistence:managed-persistence-context name=“entityManager” auto-create="true"
persistence-unit-jndi-name=“java:/CondominioEntityManagerFactory”/>

<drools:rule-base name=“securityRules”>
<drools:rule-files>
<value>/security.drl</value>
</drools:rule-files>
</drools:rule-base>

<security:rule-based-permission-resolver security-rules="#{securityRules}"/>

<security:identity authenticate-method="#{authenticator.authenticate}" remember-me=“true”/>

<event type=“org.jboss.seam.security.notLoggedIn”>
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type=“org.jboss.seam.security.loginSuccessful”>
<action execute="#{redirect.returnToCapturedView}"/>
</event>

<mail:mail-session host=“localhost” port=“25”/>

<!-- For use with jBPM pageflow or process management -->
<!–
<bpm:jbpm>
<bpm:process-definitions></bpm:process-definitions>
<bpm:pageflow-definitions></bpm:pageflow-definitions>
</bpm:jbpm>
–>

</components>
[/code]

meu persistence.xml

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version=“1.0”>

<persistence-unit name=“Condominio”>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/CondominioDatasource</jta-data-source>
<class>br.com.cond.entidade.Usuario</class>
<!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
<!–
<jar-file>…/…/vehicles.jar</jar-file>
–>
<properties>
<property name=“hibernate.dialect” value=“org.hibernate.dialect.PostgreSQLDialect”/>
<property name=“hibernate.hbm2ddl.auto” value=“update”/>
<property name=“hibernate.show_sql” value=“true”/>
<property name=“hibernate.format_sql” value=“true”/>
<property name=“jboss.entity.manager.factory.jndi.name” value=“java:/CondominioEntityManagerFactory”/>
</properties>
</persistence-unit>

</persistence>
[/code]

minha entidade:

[code]package br.com.cond.entidade;

@Entity
@Name(“usuario”)
@Scope(ScopeType.SESSION)
@Table(name=“usuario”)
@SequenceGenerator(name=“usuario_seqc”, sequenceName=“usuario_codigo_seq”)
public class Usuario implements Serializable
{

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="usuario_seqc")
private long codigo;
private String login;
private String password;
private String nome;
private String email;

public long getCodigo() {
	return codigo;
}
public void setCodigo(long codigo) {
	this.codigo = codigo;
}
public String getLogin() {
	return login;
}
public void setLogin(String login) {
	this.login = login;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}

}
[/code]

Meu autenticator:

[code]@Name(“authenticator”)
public class Authenticator
{
@Logger private Log log;

@In Identity identity;
@In Credentials credentials;
@In (required=false )private Usuario usuario;

@In(create=true, required=true)
@Out(required=true)
private EntityManager em;

public boolean authenticate()
{
    log.info("authenticating {0}", credentials.getUsername());
    boolean result = false;
    if(getUsuario() == null)
    {
    	try
    	{
    		Identity identity = Identity.instance();
            
            Query q = em.createQuery(" from usuario where login = :userName and password= :password")
            	.setParameter("username", identity.getUsername())
            	.setParameter("password", identity.getPassword());
            setUsuario((Usuario)q.getSingleResult());
    	}
    	catch(NoResultException nre)
    	{
    		FacesMessages.instance().add("Usuario/senha não localizado");
    	}
    }
    result = (getUsuario() == null)?false:true;
    return result;
}

@Destroy @Remove
public void destroy()
{
	
}

public Usuario getUsuario() {
	return usuario;
}

public void setUsuario(Usuario usuario) {
	this.usuario = usuario;
}

[/code]

alguem tem ideia do que pode ser o erro? :?

[b]Já passei por esse problema e ainda não consegui resolver.

Utiliso o Session do hibernate para fazer a consulta na autenticação.

Se conseguir resolver, posta ai.

Abraço.[/b]

poutz, vc ta brincando que só assim é possivel fazer isso?

pior que ja tentei de varias formas, e sempre vem null esse entity manager

alberthy

vc pode postar seu components.xml pra eu ver como ficou…vou apelar pro session do hibernate mesmo rs

caraaaa, resolvi usando hibernate. Segue abaixo a solução:

[code]<persistence:hibernate-session-factory name=“hibernateSessionFactory”/>

<persistence:managed-hibernate-session name="emDataBase" auto-create="true" session-factory-jndi-name="java:/EmSessionFactory"/>

[/code]

[code]
true
after_statement
org.hibernate.transaction.JBossTransactionManagerLookup
org.hibernate.transaction.JTATransactionFactory
java:/SeuDatasource

org.hibernate.dialect.PostgreSQLDialect
jdbc:postgresql://localhost:5432/postgres
org.hibernate.dialect.PostgreSQLDialect
postgres
admin
false
update
org.hibernate.cache.HashtableCacheProvider
[/code]

e nas suas classes, vc pode chamar:

prontinho, agora não vem mais nulo. :smiley:

falow

Dá uma olhada também nos exemplos que vem junto com o Seam… Eles ajudam bastante para se aprender como faz, e ainda tem algumas explicações sobre alguns exemplos na documentação oficial.

Abraços.

EDIT: coloca [RESOLVIDO] no tópico pra ajudar quem procura! :smiley: