Querendo entender o JAAS

Estou quase conseguindo entender o JAAS estou a 3 dias direto e quase consigo entender mas
minha duvida é nesse trecho do código que esta no artigo http://www.guj.com.br/articles/184:

 private void validaUsuario(Connection conn) throws LoginException {
        String senhaBanco = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            statement = conn.prepareStatement(sqlUser);
            statement.setString(1, loginInformado);
            rs = statement.executeQuery();
            if (rs.next()) {
                senhaBanco = rs.getString(1);
            } else {
                succeeded = false;
                throw new LoginException("Usuário não localizado.");
            }
        } catch (SQLException e) {
            succeeded = false;
            throw new LoginException("Erro ao abrir sessão: "
                    + e.getClass().getName() + ": " + e.getMessage());
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (statement != null) {
                    statement.close();
                }
            } catch (Exception e) {
            }
        }
    
    if (senhaInformado.equals(senhaBanco)) {  
            user = new User(login);  
            recuperaRoles(conn);  
            user.setRoles(roles);  
            return;  
        } else {  
            throw new LoginException("Senha Inválida.");  
        }  
    }

Na linha 32 o NetBeans acusa erro pedindo para criar ou variável, ou campo, ou parâmetro login,
acho que ou a classe está incompleta ou devo criar uma classe o que vocês acham,
enfim o que esse parâmetro representa ou ele é usado mais adiante, criado antes ou que?

JAAS com você fazendo a pesquisa no banco? O.o

Até onde eu vi, quem faz a consulta é o proprio containner… O.o

fala dessa pesquisa?

public Usuario login(String nome, String senha) {
       Usuario retorno;
        String sql = "from Usuario u WHERE u.nome = :nome and senha = :senha";

        Query q = this.session.createQuery(sql);
        q.setString("nome", nome);
        q.setString("senha", senha);
        retorno = (Usuario) q.uniqueResult();

        return retorno;

    }

esse trecho eu coloquei la junto com todos os dados do usuário
afinal eu quero que outros possam adicionar alterar usuários,
faz parte da minha aplicação
dai fica assim a classe Usuário:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Query;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author ifrs
 */
@Entity
@Table(name = "usuario")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByCodigo", query = "SELECT u FROM Usuario u WHERE u.codigo = :codigo"),
    @NamedQuery(name = "Usuario.findByNome", query = "SELECT u FROM Usuario u WHERE u.nome = :nome"),
    @NamedQuery(name = "Usuario.findByEmail", query = "SELECT u FROM Usuario u WHERE u.email = :email"),
    @NamedQuery(name = "Usuario.findBySenha", query = "SELECT u FROM Usuario u WHERE u.senha = :senha")})
public class Usuario implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "codigo")
    private Integer codigo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 15)
    @Column(name = "nome")
    private String nome;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="E-mail inválido")//if the field contains email address consider using this annotation to enforce field validation
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 40)
    @Column(name = "email")
    private String email;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "senha")
    private String senha;

    public Usuario() {
    }

    public Usuario(Integer codigo) {
        this.codigo = codigo;
    }

    public Usuario(Integer codigo, String nome, String email, String senha) {
        this.codigo = codigo;
        this.nome = nome;
        this.email = email;
        this.senha = senha;
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    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;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codigo != null ? codigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.codigo == null && other.codigo != null) || (this.codigo != null && !this.codigo.equals(other.codigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return nome;
    }

    public Usuario login(String nome, String senha) {
       Usuario retorno;

        String sql = "from Usuario u WHERE u.nome = :nome and senha = :senha";
        Query q = this.session.createQuery(sql);
        q.setString("nome", nome);
        q.setString("senha", senha);
        retorno = (Usuario) q.uniqueResult();

        return retorno;

    }

eu acho que esta errado
mas no que

pelo que eu vi, no lugar de “login” na linha 32, você tem que colocar “loginInformado”.

Como foi que tu viu isso
valeu funcionou