Java EE 6 com NetBeans - Erros

Olá pessoal, sou iniciante em java. Estou fazendo um trabalho para a faculdade usando JavaEE 6 com o NetBeans, e no decorrer da implementação deste trabalho me deparei com alguns problemas que consegui resolver, porém estou com um agora que não consegui resolver, mesmo depois de um boa pesquisa na web.

O erro é disparado quando clico no botão para postar o formulário.

MENSAGEM DE ERRO / STACK TRACE:

[quote]javax.el.PropertyNotFoundException: /index.xhtml @32,87 value="#{ctrlLogin.usuario}": Target Unreachable, identifier ‘ctrlLogin’ resolved to null
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:93)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
[…][/quote]

ctrlLogin.java

@Model
public class CtrlLogin {

    @EJB
    private GerenciadorLogin gerenciadorLogin;
    private String usuario;
    private String senha;

    /**
     * @return the usuario
     */
    public String getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    public void login() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            gerenciadorLogin.login(usuario, senha);
        } catch(ExcecaoDadosDeAcessoIncorretos e) {
            context.addMessage("erro", new FacesMessage("Dados de acesso incorretos."));
        }
    }

    public String logout() {
        gerenciadorLogin.logout();
        return "/index.xhtml";
    }

}

index.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                template="./arquivos/masterpage/externo.xhtml">
    <ui:define name="titulo">Login</ui:define>
    <ui:define name="css"><!-- css --></ui:define>
    <ui:define name="jsTop"><!-- jsTop --></ui:define>
    <ui:define name="jsBottom"><!-- jsBottom --></ui:define>
    <ui:define name="conteudo">
    <!-- conteudo -->
    <h:form id="frm_login">

        <table>
            <tr>
                <td class="frm_titulo">LOGIN</td>
            </tr>
            <tr>
                <td class="frm_conteudo">
                    <table>
                        <tr> <!-- style="# { empty facesContext.getMessageList("erro") ? '' : 'visibility: hidden'}" -->
                            <td colspan="2"><h:messages for="erro" layout="table" /></td>
                        </tr>
                        <tr>
                            <td>Usuário:</td>
                            <td><h:inputText value="#{ctrlLogin.usuario}" size="15" /></td>
                        </tr>
                        <tr>
                            <td>Senha:</td>
                            <td><h:inputSecret value="#{ctrlLogin.senha}" size="15" /></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:commandButton action="#{ctrlLogin.login}" value="Entrar" /></td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>

    </h:form>
    <!-- conteudo -->
    </ui:define>
</ui:composition>

Será que alguém tem ideia de onde estou errando??

O EJB é seu bean ?
Como está a configuração do JSF ?

@aloisodsv: não tenho muita esperiencia com java, e ainda estou me acostumado com os termos usados.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <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>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

interface GerenciadorLogin.java

public interface GerenciadorLogin { public void login(String usuario, String senha) throws ExcecaoDadosDeAcessoIncorretos; public void logout(); }

GerenciadorLoginImpl.java

@Stateless
public class GerenciadorLoginImpl implements GerenciadorLogin, Serializable {

    @EJB
    private UsuarioModel usuarioModel;

    @Inject
    Sessao sessao;

    @Override
    public void login(String usuario, String senha) throws ExcecaoDadosDeAcessoIncorretos {
        Usuario u = usuarioModel.recuperarPorLogin(usuario);
        if (u == null) {
            throw new ExcecaoDadosDeAcessoIncorretos();
        } else {
            if (senha != null) {
                sessao.setUsuarioLogado(u);
            } else {
                throw new ExcecaoDadosDeAcessoIncorretos();
            }
        }
    }

    @Override
    public void logout() {
        sessao.limpar();
    }

}

Sessao.java

@SessionScoped
@Named
public class Sessao implements Serializable {

    private Usuario usuarioLogado;

    public Usuario getUsuarioLogado() {
        return usuarioLogado;
    }

    public void setUsuarioLogado(Usuario usuarioLogado) {
        this.usuarioLogado = usuarioLogado;
    }

    public int tipoUsuario() {
        int iRetorno = 0;

        if (usuarioLogado != null) {
            iRetorno = usuarioLogado.getTipo();
        }

        return iRetorno;
    }

    public void limpar() {
        usuarioLogado = null;
    }

}

Vc se lembrou de colocar um arquivo beans.xml no seu /WEB-INF?

Não tenho, é um requisito?

Aonde devo cria-lo??

Anotações como @Named e @Inject fazem parte da especificação CDI. P/ q vc possa usar CDI em suas aplicações um arquivos beans.xml deve existir dentro do diretório /WEB-INF do seu projeto. Como vc está usando o Netbeans isso fica muito mais fácil pois a IDE já possui um recurso p/ criar esse arquivo.

No seu projeto clique com o botão direito sobre o diretório /WEB-INF e vá em New>Other…>Context and Dependency Injection>beans.xml. Renomeie o arquivo p/ beans.xml e teste novamente. Isso tb pode ser feito quando vc está criar um novo aplicativo Web/EJB/JEE marcando o checkbox Enable Contexts and Dependency Injection no wizard de criação do projeto.

Feito, foi criado um arquivo .xml com a tag como root, devo adicionar algo a mais?

N!!! Isso deve bastar.

Adicionei o arquivo e me apareceram alguns erros.

Meu professor deu uma olhada no meu projeto e percebeu que eu tinha referenciado as anotações para os pacotes errados.

Os corretos eram:

import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped;

agora estou com o seguinte erro:

Na verdade as anotações estão corretas. As anotações @Named e @RequestScoped dos pacotes javax.inject e javax.enterprise.context fazem a mesma coisa q @ManagedBean e @RequestScoped do pacote javax.faces.bean porém as primeiras pertencem ao framework CDI e ñ ao JSF. Particularmente eu ñ vejo como uma boa prática vc desenvolver um aplicativo JSF sem usar CDI já q o CDI simplifica muito o modelo de desenvolvimento e ainda se integra perfeitamente com JSF.

Agora, quanto a exceção q vc está recebendo, provavelmente vc está com algum erro no construtor ou em algum método anotado com @PostConstruct no EJB em questão. De uma conferida!

Stack Trace

[color=blue]Será que ajuda?[/color]

Aparemente UsuarioModel é um EJB remoto e o servidor ñ está conseguindo resolver essa dependência. Como é a estrutura do seu aplicativo?

PS.: pare de usar @Inject. Isso ñ faz parte da API de EJB.

Olá Pessoal

Estou com um problema parecido com o apresentado pelo RogerGales, e precisava de um help urgente.

É uma aplicação corporativa usando JSF+EJB+Facade+JPA
Ao informar o usuario e senha pra lagar no sistema, apresenta o erro descrito abaixo…
Parece que é algo com transação no DB, mas não consegui resolver…

Alguém pode me ajudar por favor???
Agradecido.
Alan!

javax.faces.el.EvaluationException: javax.ejb.EJBException at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 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:312) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) at com.sun.grizzly.ContextTask.run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.java:619) Caused by: javax.ejb.EJBException at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5119) at com.sun.ejb.containers.BaseContainer.checkExceptionNoTx(BaseContainer.java:4948) at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4839) at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2004) at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1955) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:198) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84) at $Proxy186.getUsuarioLogin(Unknown Source) at logica.TrataUsuario.verificaLogin(TrataUsuario.java:26) at controle.PrincipalMB.efetuarLogin(PrincipalMB.java:37) 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 com.sun.el.parser.AstValue.invoke(AstValue.java:234) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43) at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:72) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) ... 32 more Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: org.postgresql.util.PSQLException: ERROR: relation "usuario" does not exist Error Code: 0 Call: SELECT IdUser, dtadmissaoUser, nivelacessoUser, funcaoUser, formaadmissaoUser, cargoUser, loginUser, senhaUser, IdPess FROM Usuario WHERE ((loginUser = ?) AND (senhaUser = ?)) bind => [teste, 123] Query: ReadAllQuery(referenceClass=Usuario sql="SELECT IdUser, dtadmissaoUser, nivelacessoUser, funcaoUser, formaadmissaoUser, cargoUser, loginUser, senhaUser, IdPess FROM Usuario WHERE ((loginUser = ?) AND (senhaUser = ?))") at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530) at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:262) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:618) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2537) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2496) at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:455) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:997) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:675) at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:958) at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:432) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1021) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2857) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:453) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:714) at com.sun.enterprise.container.common.impl.QueryWrapper.getSingleResult(QueryWrapper.java:206) at logica.UsuarioFacade.getUsuarioLogin(UsuarioFacade.java:44) 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.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1056) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1128) at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5292) at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139) 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 com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367) at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5264) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5252) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190) ... 46 more Caused by: org.postgresql.util.PSQLException: ERROR: relation "usuario" does not exist at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:892) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:602) ... 90 more