[RESOLVIDO] JSP - Como tratar sessão e páginas variáveis?

10 respostas
A

Olá. Cá estou eu com mais uma pergunta :slight_smile:

Bom, o problema dessa vez é um que não estou imaginando como resolver. É o seguinte: Eu tenho um sistema web, que, sempre que utilizado, gravará em todos os registros que forem adicionados o valor “1”. É mais ou menos isso:

TABELA_PAI
PK ID_PAI

TABELA_FILHO
PK ID_FILHO
FK ID_PAI

Todos os registros criados através do site (no caso, os “filhos”) são criados com ID_PAI no valor de 1. Até aí, tudo certo, funcionando que é uma beleza.

O problema, no entanto, é quando eu quero colocar PCs em certos locais com outro valor de ID_PAI. Imagine que eu coloque um computador em cada escritório, e eu precise que cada ID seja diferente. No escritório X, ID_PAI seria 2, no Y seria 3, e assim por diante. Como fazer isso?

O modo que pensei fazer, mas imagino que não dê certo, seria criar uma query string forçando o ID_PAI a ser setado com o valor X, mas vejo alguns problemas aí. Como o computador ficaria ligado durante um tempo indeterminado, como garantir que a sessão não vá expirar? Ou, se alguém tiver um método mais decente, aceito!

Agradeço desde já,
Aroldo

10 Respostas

oddy.silva

Cara, eu não sei se entendi. Mas olha só, pensando em O.O, o lance seria assim.

  • Um Filho tem um pai

  • Um pai tem vários filhos

  • Um filho não pode ter mais que um pai (essa afirmação é engraçada, mas vamos lá)

Em código eu escreveria isso assim:

Classe Filho

public class Filho{
  private Long id; 
  
  //gets e sets
}

Classe pai:

public class Pai{
  
  private Long id;
  private List<Filho> filhos;
  
  //gets e sets
  
  public boolean addFilho(Filho filho){
     if(filhos == null){
       filhos = new ArrayList<Filho>();
     } 
    return filhos.add(filho);
  }
}

Mais ou menos assim.
O pai 1 teria seus filhos, o pai 2 teria seus filhos e o pai 3 tbm.

Se não me engano, com o Hibernate dá pra você mapear dos dois lados:

//classe filho
public class Filho{
  
  private Long id;
  
  @ManyToOne
  private Pai pai;
  
  //gets e sets
}

//classe pai
public class Pai{
  
   private Long id;
   
   @OneToMany
    private List<Filho> filhos;

    //gets e sets
}

Desta maneira, você daria o pai certo para o filho que desejasse. Quanto à sessão, dá pra você controlar o tempo no web.xml do TomGato :slight_smile:
Espero ter ajudado

A

Em termos de java, tá beleza isso, funcionando. O problema mesmo é a sessão. Vejamos se consigo explicar melhor.

Se o usuário A acessar pelo website, todos os dados que ele criar serão vinculados ao ID_PAI com o valor 1.
Se o usuário B acessar pelo terminal A, todos os dados que ele criar serão vinculados ao ID_PAI com o valor 2.

E assim sucessivamente. Cada terminal deve estar rodando uma versão da página com um ID próprio. A questão, é como fazer isso. As maneiras que eu pensei de resolver o problema são as seguintes:

  • Criar uma área “administrativa”, na qual o cara que for implantar o sistema no terminal A faça um login e, através de um link com uma query string, eu force o valor do ID_PAI a ser o referente ao escritório;
  • Ter uma versão do sistema para cada terminal. No caso, alterar o valor do ID_PAI para cada escritório. Daí eu teria diversos sistemas diferentes, e cada mudança que eu fizesse teria que alterar todas separadamente, mas dá pra resolver isso com aplicação básica de SVN;

Não sei se deu pra explicar direito…

oddy.silva

Legal, entendi.

Se o usuário acessar pelo website A, IDPAI = 1
Se o usuário acessar pelo terminal B, IDPAI = 2

Bom, eu faria assim:

  • O terminal roda em um contexto e a parte web em outra, até aí ok
  • Criaria um initParameter no DD de cada um
  • Criaria um filtro e a cada requisição verificaria qual é o pai (initParameter pelo DD) e pegaria o ID.

Será que assim ajuda?

A

Hmm… DD?

oddy.silva

Deployment Descriptor, vulgo web.xml

A

Creio que resolveria, mas qual é a diferença entre isso e possuir uma versão do .java onde apenas um número seria alterado?

oddy.silva

É que se você alterar o web.xml, o código Java pode continuar o mesmo. Em vez de ter duas classes idênticas em que só o valor do ID muda, é melhor ter um arquivo que passe a cada contexto o comportamento específico de cada container :slight_smile:

Você tem o mesmo projeto, só que comportamentos diferentes em cada server, além do que é bem mais fácil alterar só o web.xml

:slight_smile:

A

Certo… Você tem algum exemplo prático da aplicação disso? Pelo que diz, resolveria a dúvida perfeitamente! :slight_smile:

oddy.silva

Como criar um init parameter e como pegá-lo:

Artigo sobre os filtros:
http://www.guj.com.br/articles/11

Tá aí, só partir pro abraço.
Flw. :smiley:

A

Opa! Agradeço a ajuda :slight_smile:
Acredito que vá dar certo, mas caso não dê venho encher o saco novamente! :smiley:

Grato,
Aroldo

Criado 2 de março de 2011
Ultima resposta 2 de mar. de 2011
Respostas 10
Participantes 2