[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Mentalização de Projeto  XML
Forum Index -> Comentários Gerais
Author Message
Ironlynx



Joined: 28/10/2005 17:35:38
Messages: 328
Offline

Opa pessoal!!!Tô fazendo meu primeiro "Menta Projeto" para produção, e estou meio perdido em algumas coisas(excesso de features é fda...)...
Basicamente é um cadastro de sinistros(seguros) onde há uma página de entrada(home com o login), e depois só páginas visíveis aos logados.Meu pool é o C3P0 usando o MySQL de BD. Numa aplicação normal, eu usaria um Filter que fica verificando se o Usuario existe e está na sessão ou não e levaria para um controlador(com uma hashmap de ações a serem executados). Meu AppManager tah + ou - assim:

public class ApplicationManager extends org.mentawai.core.ApplicationManager {

private Component usuarioDAO;
private ConnectionHandler connHandler;

public void init(Context application){

this.usuarioDAO = new DefaultComponent(MySQLUsuarioDAO.class);
//ConnectionPool
this.connHandler = new C3P0ConnectionHandler("com.mysql.jdbc.Driver",
"jdbc:mysql://ageris?autoReconnect=true",
"root",
"");

C3P0ConnectionHandler c3p0 = (C3P0ConnectionHandler) connHandler;
ComboPooledDataSource pool = (ComboPooledDataSource) c3p0.getComboPooledDataSource();
pool.setMaxIdleTime(3600);

}

public void loadActions() {
//LoginAction
addGlobalFilter(new AuthenticationFilter());
addGlobalConsequence(AuthenticationFilter.LOGIN, new Redirect("/index.jsp"));

ActionConfig ac = new ActionConfig("Login", LoginAction.class);
ac.addConsequence(LoginAction.SUCCESS, new Redirect("/start.jsp"));
ac.addConsequence(LoginAction.ERROR, new Forward("/index.jsp"));
addActionConfig(ac);

}

E a minha pergunta é:
Toda a ação do meu sistema(Ex.: "cadastrar sinistro", "deletar sinistro","exibir sinistro" ) TEM que ser mapeada como ActionConfig que corresponderia ao meu "HashMap" de controle?

http://osereojava.blogspot.com/
[WWW]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Sim. Veja o exemplo do mybooks. http://www.mentaframework.org/mybooks.jsp

Sergio Oliveira

Ironlynx



Joined: 28/10/2005 17:35:38
Messages: 328
Offline

Sim. Veja o exemplo do mybooks. 

Opa!Baixei ele e estou vendo aqui... algumas coisas ficaram um pouco turvas aqui...(Lembre-se que eu não tenho muita experiência web, e o mundo Swing é beeem diferente desse!)Por exemplo esse comando de inserção normalmente eu faria + ou - assim(chamando ele de dentro do Controlador):
Code:
 public class ComandoInserirSinistro implements Comando {
 	private String proxima;
 	private MySQLSinistroDAO mssd=new MySQLSinistroDAO();
 	
 	public ComandoInserirSinistro(String inserir){
 		this.proxima=inserir;		
 	}
 
 	public String executar(HttpServletRequest req) throws ExcecaoComando {
 		
 		try{ 
 			Sinistro sb= new Sinistro();
 		    
 			sb.setId_empresa(Integer.parseInt(req.getParameter("empresa")));
 			sb.setId_tiposeg(Integer.parseInt(req.getParameter("tipoDeSeguro")));
 			sb.setData_inicio(req.getParameter("dataInicio"));
 			sb.setId_bem(Integer.parseInt(req.getParameter("id_bem")));
 			sb.setId_potencia(Integer.parseInt(req.getParameter("id_potencia")));
 			sb.setId_tensao(Integer.parseInt(req.getParameter("id_tensao")));
 			sb.setId_causa(Integer.parseInt(req.getParameter("id_causa")));
 			sb.setPrejuizo(new BigDecimal(req.getParameter("prejuizo")));
 			sb.setFranquia(new BigDecimal(req.getParameter("franquia")));
 			sb.setIndenizacao(new BigDecimal(req.getParameter("indenizacao")));
 			sb.setSegurado(Integer.parseInt(req.getParameter("segurado")));
 			 req.setAttribute("sinistro",sb);
 			
 			if(ComandoToken.isValido(req)){
 				 mssd.inserirSinistro(sb);
 				 req.setAttribute("sinistro.msg","Informações Cadastradas");
 			}
 			else
 			{ req.setAttribute("sinistro.msg","Informações Cadastradas: "
 				+ "(Envie o pedido de cadastramento do sinistro uma única vez)");				
 			}
 			return proxima;			 
 		  }
 		catch(Exception e){
 			throw new ExcecaoComando("ComandoInserirSinistro: "+ e.getMessage());
 			
 		}
 		
 	}
 
 }

"Mentalizando a coisa", como vc faria?Vc faria um InserirSinistroAction e dentro do execute pegava os parâmetros ou faria um Validador que a validasse e chamasse uma Action de para a inserção???

OBS.: acho que só botar uma simples tag:
<mtw:requiresAuthentication />
para bloquear os usuários indevidos simples e genial.Poupa aquele trabalho nojento de mexer no XML e fazer um filtro enjoado.

http://osereojava.blogspot.com/
[WWW]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Uma coisa é validação outra coisa é a action.

O jeito mais certinho é fazer um model que inseri isso no banco, usando ou não usando DAO.

A action é apenas uma ponte entre a requisição web e os seu modelo de negócios. Esse sim vai usar um DAO ou qualquer outra coisa para inserir no banco.

Nada te impede de meter a lógica na action, mas alguns mais puritanos vão falar que isso é feio.

Sergio Oliveira

Ironlynx



Joined: 28/10/2005 17:35:38
Messages: 328
Offline

A action é apenas uma ponte entre a requisição web e os seu modelo de negócios. 

Opa, isso eu saquei... foi mal eu me expressei mal mesmo(Vc entendeu como arquitetura!).O que eu quero saber se é mandatário eu ter que usar as input tags para mapear(jogar os dados e recuperar) para o banco, ou eu posso fazer as chamadas (pegar os params via getParameter()) na action e tacar para o model(hummm eu perderia o request não?).
Sérgio, os exemplos são show de bola, mas falta um que seja aquele CRUD clássico só de jdbc para quem tá começando(no mybooks vc já usa Ioc e Injeção de dependências, imagino o coitado que nem sabe o que é composição). Humm, se eu botar esse protótipo do projeto que eu tô fazendo no ar logo, eu posso fazer um!

http://osereojava.blogspot.com/
[WWW]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Tem razão !!!

No seu model vc não deve precisar do request ou do input. Seu model não tem que saber de mais nada. Ele apenas precisa dos dados e da lógica do negócio dentro dele.

Então há várias opções aqui:

- action pega os parametros do input e passar para o model

- action implementa model-driven e tudo que é injetado na action já vai direto para o model (mybooks)

Essa sua idéia de um crud básico não é ruim não !!!

Sergio Oliveira

 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team