Mensagem de atenção estranha (use of deprecated API)

12 respostas
pauloperes

Olá Pessoal,

Estou aprendendo a trabalhar com o struts, resolvi usar tbm o hibernate, só para brincar mesmo, desta forma criei uma classe chama Aluno com as anotações para a geração da base de dados, porém quando mando compilar aparece sempre esta mensagem em vermelho:

Note: D:\MVC_Struts\Tutorial\src\Aluno.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

E agora vejam a minha classe Aluno.java

package strutsTutorial;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionMessage;

import javax.ejb.*;

@Entity(access=AccessType.FIELD)
@Table(name="aluno")
public class Aluno extends ActionForm {
    /**
     * Atributos da classe, juntamente com seus annotations 
     **/
    
    @Id(generate=GeneratorType.NONE)
    private int id;
    
    @Column(name="nome", nullable=false, length=50)
    private String nome;
    
    @Column(name="email", nullable=false, length=40)
    private String email;
    
    
    public void setId(int id){
        this.id = id;
    }
    
    public int getId(){
        return this.id;
    }
    
    public void setNome(String nome){
        this.nome = nome;
    }
    
    public String getNome(){
        return this.nome;
    }
    
    public void setEmail(String email){
        this.email = email;
    }
    
    public String getEmail(){
        return this.email;
    }
    
    public void reset (ActionMapping map, HttpServletRequest req){
        this.id = 0;
        this.nome = null;
        this.email = null;
    }
    
    public ActionErrors validate(ActionMapping map, HttpServletRequest req){
        
        ActionErrors erros = new ActionErrors();
        
        // Testando o ID
        if (this.id == 0){
            erros.add("id", new ActionMessage(
                    "aluno.ID"));
        }
        
        if (this.nome == null || this.nome.trim().equals("")){
            erros.add("nome", new ActionMessage(
                    "aluno.NOME"));            
        }
        
        if (this.email == null || this.email.trim().equals("")){
            erros.add("email", new ActionMessage(
                    "aluno.EMAIL"));
        }        
        return erros;        
    }    
}

Mais uma dúvida, as validações do form se fazem nesta classe mesmo, ou seja, em um ActionForm, ou devo criar outra?

Muito Atenciosamente,

Paulo

12 Respostas

rmarin

Com relação ao Hibernate não posso te ajudar.

Agora com o Struts:

Por que você não utiliza o validation.xml para fazer essas validações mais simples?

Você pode fazer as validações na classe form, não acho que esteja errado, só um detalhe, não seria melhor criar um Objeto de Negócio ON “Aluno” e uma classe “AlunoForm” e esta classe “AlunoForm” teria um método tipo “getAluno()” e então vc estaria com o objeto “Aluno” em mãos?

ps: crie objetos de negocio pois os forms que serão preenchidos a partir das páginas, até onde eu sei, trabalham com Strings.

[]´s

_fs

Bom o erro quer dizer exatamente o que está escrito. Os métodos reset ou validate estão deprecated, use os substitutos mais atuais.

[chato]
E cara … que medo de struts :expressionless: seu objeto de negócio estende uma classe que não tem nada a ver com o negócio e ainda recebe um objeto HttpServletRequest @.@
[/chato]

Mauricio_Linhares

Nops, a validação não deveria estar dentro dessa classe, você deveria criar outra classe ou usar DynaBeans pra fazer isso.

ActionError está deprecated, mas ActionErrors não, use os flags que ele deu de erro aí e veja qual a classe que ele está reclamando.

Mauricio_Linhares

LIPE:
[chato] E cara … que medo de struts :expressionless: seu objeto de negócio estende uma classe que não tem nada a ver com o negócio e ainda recebe um objeto HttpServletRequest @.@
[/chato]

Um ActionForm é um formulário, não um objeto de negócio, foi o companheiro que inverteu as bolas.

pauloperes

Lipe, Mauricio e Rmarin,

Bom primeiro, devo informar a vc que não entendo muito de padrões de projeto, mesmo porque nunca cheguei a modelar um sistema, este ano vou ter que começar para a minha monografia do ano que vem. No momento só estou estudando o struts e o hibernate, mas se eu entendi bem o que vcs querem dizer seria isto:

Objeto de Negócio

public class Aluno1 {
        private int id;
        private String nome;
        private String email;
        
        // sets e getters    
}

E o Form

public class AlunoForm extends ActionForm {
     
    
    
}

Seria isto?

E aproveitando, algum de vcs sabem onde eu posso achar alguma material de apoio sobre padrões?

Muito Atenciosamente,

Paulo

rmarin

Por aí…

No validation.xml:

<form-validation>
	<formset> 		
		<form name="AlunoForm">
			<field property="alunoEmail" depends="required">
				<arg0 key="aluno.EMAIL"/>
			</field>
		</form>
	</formset>
</form-validation>

Existe uma pancada de validações existentes que você pode colocar no “depends”, e você pode também criar as suas validações. neste caso estou utilizando o required que significa que o campo é de preenchimento obrigatório.

:wink:

_fs

Aaaaaah você está usando Struts por opção? Usa WebWork! Olha que facinho:

MyAction.java
public class MyAction extends ActionSupport {
    // objeto de negocio, não estende porcaria nenhuma, não tem nenhum 
    //método obrigatorio, nada, nada
    private Aluno aluno;

    public String execute() {
        dao.save( aluno );
    }
    public Aluno getAluno() {
        return aluno;
    }
    public void setAluno( Aluno a ) {
        aluno = a;
    }
}

mypage.htm
<form action="myAction.action">
    <input name="aluno.nome" value="lipe"/>
    <input name="aluno.email" value="[email removido]"/>
</form>

Pronto :smiley: Ao enviar o form o objeto Aluno na Action é automagicamente populado, sem precisar mapear absolutamente nada das propriedades.

pauloperes

Lipe,

Legal o que vc enviou. Uma coisa o Webwork faz o mesmo que o struts? E tipo ele para que tipo de aplicações, pequeno, médio ou grande porte.

è que tenho que implemetar um sistema para web que é um flog, na realidade estou reestruturando ele, ele estava em php, mas muito bagunçado, como não gosto de php, resolvi fazer em java, e que implementa-lo utilizando o padrão mvc.

Valeu,

Paulo

plentz

Faz praticamente tudo(pra não dizer que faz tudo e acabar escapando algo), com uma carinha muito mais bonitinha, poupando foquinhas e aumentando a espectativa de vida dos seus cabelos.

pauloperes

Galera,

Bom primeiro valeu ai pelas dicas, mas vejam se eu entendi bem:

Objeto de Negócio:

package lagg.beans;
import java.util.Set;
import javax.ejb.*;


@Entity(access=AccessType.FIELD)
@Table(name="aluno")
public class Aluno {
    @Id(generate=GeneratorType.NONE)
    private Long matricula;
    
    @Column(name="nome", nullable=false, length=50)
    private String nome;
    
    @Column(name="email", nullable=false, length=40)
    private String email;
    
    @Column(name="telefone", nullable=true, length=11)
    private String telefone;
    
    @Column(name="celular", nullable=true, length=11)
    private String celular;
    
    @Column(name="curso", nullable=false, length=200)
    private String curso;
    
    
    @OneToMany(targetEntity="aluno")
    private Set<Frequencia> frequencias;
    
    public void setMatricula(Long matricula){
        this.matricula = matricula;
    }
    
    public Long getMatricula(){
        return this.matricula;
    }
    
    public void setNome(String nome){
        this.nome = nome;
    }
    
    public String getNome(){
        return this.nome;
    }
    
    public void setEmail(String email){
        this.email = email;
    }
    
    public String getEmail(){
        return this.email;
    }
    
    public void setTelefone(String telefone){
        this.telefone = telefone;
    }
    
    public String getTelefone(){
        return this.telefone;
    }
    
    public void setCelular(String celular){
        this.celular = celular;
    }
    
    public String getCelular(){
        return this.celular;
    }
    
    public void setCurso(String Curso){
        this.curso = curso;
    }
    
    public String getCurso(){
        return this.curso;
    }
    
    
}

AlunoDAO para fazer as operações na base de dados

package lagg.dao;

import java.util.List;
import lagg.beans.Aluno;
import org.hibernate.Query;

public class AlunoDAO extends Dao {

    public AlunoDAO(){        
        cfg.addAnnotatedClass(Aluno.class);        
        factory = cfg.buildSessionFactory();
    }
    
    public void Insert(Aluno aluno){        
        sessao = factory.openSession();
        sessao.save(aluno);        
        sessao.close();
    }
    
    public void Delete(Aluno aluno){
        sessao = factory.openSession();
        Aluno encontrado = this.Select(aluno);
        sessao.delete(encontrado);  
        sessao.close();
    }
    
    public void Update(Aluno aluno){
        sessao = factory.openSession();
        sessao.update(aluno);
        sessao.close();
    }
        
    public List Select(){        
        sessao = factory.openSession();        
        List<Aluno> alunos = sessao.createQuery("from Aluno").list();        
        sessao.close();
        return alunos;        
    }
    
    public Aluno Select(Aluno aluno){
        sessao = factory.openSession();
        Aluno encontrado = (Aluno) sessao.load(Aluno.class, new Long(aluno.getMatricula()));
        sessao.close();
        return encontrado;         
    }
}

AlunoForm

package lagg.form;

import lagg.beans.Aluno;
import org.apache.struts.action.ActionForm;

public class AlunoForm extends ActionForm {
    private Aluno aluno = new Aluno();
    
    public void setAluno(Aluno aluno){
        this.aluno = aluno;
    }
    
    public Aluno getAluno(){
        return this.aluno;
    }
}

E a ação para o cadastro de um aluno

package lagg.action;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import lagg.form.AlunoForm;
import lagg.beans.Aluno;
import lagg.dao.AlunoDAO;

public class CadastraAluno {
    
    public ActionForward execute (
            ActionMapping map,
            ActionForm form) throws Exception {
        
        AlunoForm alunoForm = (AlunoForm) form;
        Aluno aluno = alunoForm.getAluno();
        AlunoDAO dao = new AlunoDAO();
        
        dao.Insert(aluno);
        
        return map.findForward("sucesso");
    }
}

Obs.: Até ai não quis fazer nenhuma validação, só gostaria de saber se seria esta a melhor forma de se estruturar as minhas classes.

Muito Atenciosamente,

Paulo Henrique Peres

L

DEPRECATED: É que vc está usando um método antigo, que já não é mais utilizado ou foi substituído por um outro mais funcional. Geralmente no código fonte ele aparece riscado. Pro exemplo: os métodos da classe java.util.Date foram substituídos por outros melhres, como java.util.Calendar

Para saber mais, compile dessa forma: javac -deprecation arquivofonte.java

davidbuzatto

lunghin, antes de postar, verifique a última mensagem do tópico.
A última mensagem deste é de 6 anos atrás.
Evite ressuscitar tópicos, ainda mais se for para responder a mensagens tão antigas.

[]'s

Criado 20 de julho de 2005
Ultima resposta 7 de nov. de 2011
Respostas 12
Participantes 7