[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

Help me DaoFactory  XML
Forum Index -> Comentários Gerais
Author Message
gulira


[Avatar]

Joined: 14/07/2005 20:51:46
Messages: 14
Offline

Galera é o seguinte.

Eu estou desenvolvendo uma aplicacao com o mentawai e a principio estou fazendo persistencia em collections sem fazer persistencia em disco, quero trabalhar encima disto num segundo momento.

Então para aproveitar a estrutura de DAOCollection resolvi implementar o Pattern Abstract Factory para gerenciar a minha persistência momentaneamente via Collections e num futuro proximo via hibernate, assim fica mais facil, pois dai e só criar meus Dao(Bens) para hibernate e boa, e depois só alterar o meu DaoFactory.

Entao a pergunta é: Qual o local apropiado para estar instanciando o DaoFactory no Mentawai. Seria Interessante fazer um Extends da BaseAction e Adicionar este DaoFactory como um atributo static final???? Deste modo nao vai dar algum problema, pois nao sei se a BaseAction é criada uma nova instancia a cada requisição, (ainda não olhei o fontes )

Existe um forma melhor de se trabalhar com o Pattern Abstract Factory dentro do mentawai. (Sera q o ioCFilter me ajudaria em alguma coisa???)

Descupe se falei alguma besteira.

Rodrigo Guedes de Souza
Programador
Tecnólogo em Processamento de Dados
Especialista em Ambientes de Desenvolvimento para Internet
JGuarani Components http://jguarani.tigris.org

"Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância."(John Kennedy)

Eu uso Mentawai"Menta". E Você???
gulira


[Avatar]

Joined: 14/07/2005 20:51:46
Messages: 14
Offline

Blz Sergio....

Vou implementar com ioC então.

Muito obrigado.

Rodrigo Guedes de Souza
Programador
Tecnólogo em Processamento de Dados
Especialista em Ambientes de Desenvolvimento para Internet
JGuarani Components http://jguarani.tigris.org

"Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância."(John Kennedy)

Eu uso Mentawai"Menta". E Você???
saoj



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

gulira wrote:

Deste modo nao vai dar algum problema, pois nao sei se a BaseAction é criada uma nova instancia a cada requisição, (ainda não olhei o fontes ). 


Apenas para sua informação o Mentawai por default cria uma nova action para cada requisição. Isso é bom pois evita problemas de sincronização entre threads acessando a mesma instância, isto é, as actions do mentawai por definição são thread-safe.

Entretanto, para aqueles que estão atrás da última gota de performance, existe o SingleInstanceActionConfig e o SingleInstanceBaseAction, que te permite reaproveitar a mesma instancia de action em várias requisições. Essas classes sairão na versão 1.2 mas já estão no CVS prontas para serem usadas.




Sergio Oliveira

gulira


[Avatar]

Joined: 14/07/2005 20:51:46
Messages: 14
Offline

estou batendo cabeça aqui:

Olha so meu ApplicationManager:

Code:
 package jtest.mentawai.actions;
 
 imports........
 
 public class ActionManager extends ApplicationManager {
     private Component c1;
     
     public void init(){
         DefaultComponent c1 = new DefaultComponent(UserDaoCollection.class);
         this.c1 = c1;
     }
     
     public void loadActions() {
         ActionConfig ac;
         
         
         /* ----------------------------------------------------------------------- */
         
         /* CONTROLLER REGISTERS */
         /* User */
         ac = new ActionConfig("/registerUser",ActionRegisterUser.class);
         ac.addConsequence(ActionRegisterUser.SUCCESS, new Forward("/jsp/reg/viewUser.jsp"));
         ac.addConsequence(ActionRegisterUser.ERROR, new Forward("/jsp/reg/regUser.jsp"));
         addActionConfig(ac);
         
         ac.addFilter(new VOFilter(User.class));
         //ac.addFilter(new UserValidation());
         ac.addFilter(new IoCFilter(c1,"users", IoCFilter.APPLICATION));
         
         ac.addFilter(new InjectionFilter(true));
                   
     public void loadLocales() {
         LocaleManager .add(new Locale("pt", "BR"));
         LocaleManager .add(new Locale("en", "US"));
     }
 }
 


ac.addFilter(new IoCFilter(c1,"users", IoCFilter.APPLICATION)); onde "users" é o nome no atributo (Interface UserDao) na Action

Code:
 
 package jtest.pojo;
 
 import java.util.*;
 
 public class User {  
     private String firstname;
     private String lastname;    
     private String country;    
     private String state;    
     private String city;    
     private String login;    
     private String password;    
     private String email;    
     private boolean active;      
     public User(){ 
     }
     
    geters and seters
 }
 


Code:
 package jtest.dao;
 
 public interface DaoPattern {
     public void save(Object object);
     public void delete(String key);
     public Object getObject(String key);
     public java.util.List ListObjects();        
 }
 


Code:
 package jtest.dao;
 
 import jtest.pojo.User;
 
 public interface UserDao extends DaoPattern{
 }
 


Code:
 UserDaoCollection
 
 package jtest.dao.collection;
 
 import....
 
 public class UserDaoCollection implements UserDao{
     private static TreeMap users = new TreeMap();
     
     /** Creates a new instance of UserDaoCollection */
     public UserDaoCollection() {
         User usertest = new User();
         usertest.setFirstname("RODRIGO");
         usertest.setLastname("GUEDES DE SOUZA");
         usertest.setLogin("gulira");
         usertest.setPassword("123456");
         this.save(usertest);
     }
 
     public jtest.pojo.User getObject(String login) {
         return (jtest.pojo.User)users.get(login);
     }
 
     public void delete(String login) {
         users.remove(login);
     }
 
     public void save(Object object) {        
         users.put(((User)object).getLogin(), (User)object);
     }
 
     public java.util.List ListObjects() {
         return new ArrayList(users.values());
     }    
 }
 


Code:
 package jtest.mentawai.actions.registers;
 
 imports.....
 public class ActionRegisterUser extends BaseAction implements AuthenticationFree{
     private static final int MSG_CONGRATULATION_REGISTER = 1;
     private static final int MSG_CONGRATULATION_UPDATE = 2;
     private static final int ERROR_EXIST_LOGIN = 3;
     
     private UserDao users = null;  Este Aqui é a Interface
     
     public String execute() throws org.mentawai.core.ActionException {
         User user = (User) input.getValue("jtest.pojo.User");
         
         /* UpperCase Fields */
         user.setFirstname(user.getFirstname().toUpperCase());
         user.setLastname(user.getLastname().toUpperCase());
         user.setCountry(user.getCountry().toUpperCase());
         user.setState(user.getState().toUpperCase());
         user.setCity(user.getCity().toUpperCase());
         user.setEmail(user.getEmail().toUpperCase());        
         
         /* Not active Default */
         user.setActive(false);
                        
         if (users.getObject(user.getLogin()) == null){
             users.save(user);
             output.setValue("user",user);
             addMessage(MSG_CONGRATULATION_REGISTER);
             return SUCCESS;
         }else{
             //Update or Error (Incomplete)
             //addMessage(MSG_CONGRATULATION_UPDATE);
            // addError(ERROR_EXIST_LOGIN);
             return ERROR;
         }
         
         //UserDao users = new UserDaoCollection();
         
         //Insert
         /*if (users.getUser(user.getLogin()) == null){
             users.save(user);
             output.setValue("user", user);
             addMessage(MSG_CONGRATULATION_REGISTER);
             return SUCCESS;
         }else{
             //Update or Error (Incomplete)
             //addMessage(MSG_CONGRATULATION_UPDATE);
             //addError(ERROR_EXIST_LOGIN);
             return ERROR;
         } */                                      
     }    
 }
 


Onde estou pecando ai?????

O objetivo deste codigo e gravar os dados em um TreeMap() mas usando Dao.

Rodrigo Guedes de Souza
Programador
Tecnólogo em Processamento de Dados
Especialista em Ambientes de Desenvolvimento para Internet
JGuarani Components http://jguarani.tigris.org

"Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância."(John Kennedy)

Eu uso Mentawai"Menta". E Você???
saoj



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

Eu não vi problema algum... Parece tudo certo...

Vc está criando um componente no escopo da aplicação (ou seja, um instância para toda a aplicação) que será injetado na sua action.

Parece perfeito. Qual o problema?


Sergio Oliveira

gulira


[Avatar]

Joined: 14/07/2005 20:51:46
Messages: 14
Offline

olhe o q ele esta me retornando
Code:
 HTTP Status 500 -
 
 type Exception report
 
 message
 
 description The server encountered an internal error () that prevented it from fulfilling this request.
 
 exception
 
 javax.servlet.ServletException
 	org.mentawai.core.Controller.service(Controller.java:193)
 	javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
 	sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 	java.lang.reflect.Method.invoke(Method.java:585)
 	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
 	java.security.AccessController.doPrivileged(Native Method)
 	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
 	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
 	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
 
 root cause
 
 java.lang.NullPointerException
 	jtest.mentawai.actions.registers.ActionRegisterUser.execute(ActionRegisterUser.java:30)
 	org.mentawai.core.InvocationChain.invoke(InvocationChain.java:87)
 	org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:172)
 	org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
 	org.mentawai.filter.IoCFilter.filter(IoCFilter.java:94)
 	org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
 	org.mentawai.core.Controller.invokeAction(Controller.java:221)
 	org.mentawai.core.Controller.service(Controller.java:188)
 	javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
 	sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 	java.lang.reflect.Method.invoke(Method.java:585)
 	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
 	java.security.AccessController.doPrivileged(Native Method)
 	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
 	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
 	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
 
 note The full stack trace of the root cause is available in the Sun-Java-System/Application-Server logs.
 


Ele faz o InjectionFilter normal.
Só este problema acontece quando vou tentar acessar o atributo users (minha infrface Dao) la na action: ActionRegisterUser.java:

fiz isto para testar e ver se o ioc esta funcionando e apareceu o erro
User user = (User)users.getObject("gulira");

Rodrigo Guedes de Souza
Programador
Tecnólogo em Processamento de Dados
Especialista em Ambientes de Desenvolvimento para Internet
JGuarani Components http://jguarani.tigris.org

"Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância."(John Kennedy)

Eu uso Mentawai"Menta". E Você???
saoj



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

Não entendi.

O que está nulo ???

O users que deveria ter o DAO ???

Coloque o seu código aqui indicando em que linha está acontecendo o NullPointerException.


Sergio Oliveira

gulira


[Avatar]

Joined: 14/07/2005 20:51:46
Messages: 14
Offline

Sergio vai aqui o codigo limpo...
Esta action nao faz nada so estou testando se esta ok. blz

E o objeto "gulira" ja existe la na minha Collection. se vc ver la me UserDaoCollection.java eu ja instancio um objeto só de teste ok.

lá vai o codigo

Code:
 package jtest.mentawai.actions.registers;
 
 import jtest.dao.UserDao;
 import jtest.dao.collection.UserDaoCollection;
 import org.mentawai.core.BaseAction;
 
 import jtest.pojo.User;
 import org.mentawai.filter.AuthenticationFree;
 
 public class ActionRegisterUser extends BaseAction implements AuthenticationFree{
     private static final int MSG_CONGRATULATION_REGISTER = 1;
     private static final int MSG_CONGRATULATION_UPDATE = 2;
     private static final int ERROR_EXIST_LOGIN = 3;
     
     private UserDao users = null;
     
     public String execute() throws org.mentawai.core.ActionException {        
        
        User user = (User)users.getObject("gulira");
         
        return SUCCESS;                
     }    
 }
 


erro
Code:
 java.lang.NullPointerException
 	jtest.mentawai.actions.registers.ActionRegisterUser.execute(ActionRegisterUser.java:19)
 	org.mentawai.core.InvocationChain.invoke(InvocationChain.java:87)
 	org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:172)
 	org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
 	org.mentawai.filter.IoCFilter.filter(IoCFilter.java:94)
 	org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
 	org.mentawai.core.Controller.invokeAction(Controller.java:221)
 	org.mentawai.core.Controller.service(Controller.java:188)
 	javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
 	sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 	java.lang.reflect.Method.invoke(Method.java:585)
 	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
 	java.security.AccessController.doPrivileged(Native Method)
 	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
 	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
 	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
 

Rodrigo Guedes de Souza
Programador
Tecnólogo em Processamento de Dados
Especialista em Ambientes de Desenvolvimento para Internet
JGuarani Components http://jguarani.tigris.org

"Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância."(John Kennedy)

Eu uso Mentawai"Menta". E Você???
saoj



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

Tá esquisito. Parece tudo certo.

O problema é que o Dao não está sendo injetado.

Faz o seguinte:

1) Veja o log de erro (stdout e stderr). Veja se o IoCFilter está gerando alguma exception.

2) Veja se o seu ApplicationManager está certinho.

Vc vai ter que debugar isso. Está esquisito... Acho que o log de erro vai solucionar o mistério.

Sergio Oliveira

saoj



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

Dá uma olhada no exemplo de IoC também, para vc ver se está esquecendo alguma coisa.

http://mentawai.lohis.com.br/examples/HelloIoC.war


Sergio Oliveira

gulira


[Avatar]

Joined: 14/07/2005 20:51:46
Messages: 14
Offline

Sergio consegui.

Na verdade fiz o seguinte.

Eu estava rodando minha aplicação Mentawai em cima do Application Server Sun 8 no Suse linux. Então simplesmente fui para o windows rodei em cima do tomcat 5.5.7 e funcionou perfeitamente como uma joia.

testei tambem o http://mentawai.lohis.com.br/examples/HelloIoC.war no Application Server da Sun e nao funcionou dai eu coloquei no tomcat e boa, funcionou.

pelo q eu percebi nao esta fazendo a Injection nas interface da action.

Más blz. So fiz uma alteração no meu applicationManager, em vez de adicionar o filtro de ioc para cada Action resolvi colocar como globalFilter

addGlobalFilter(new IoCFilter(c1,"users", IoCFilter.APPLICATION));
addGlobalFilter(new InjectionFilter(true));

para nao ficar fazendo sempre e ficar redundante......

Será q assim da alguma perda de performace?????

Rodrigo Guedes de Souza
Programador
Tecnólogo em Processamento de Dados
Especialista em Ambientes de Desenvolvimento para Internet
JGuarani Components http://jguarani.tigris.org

"Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância."(John Kennedy)

Eu uso Mentawai"Menta". E Você???
saoj



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

Acho que a perca de performance não será um problema pra vc nessa situação.

Só que agora vc me deixou curioso: Por que o IoC não funciona no application server da Sun ????????????

Olha o log de erro para descobrir e coloca aqui por favor. Outras pessoas podem ter o mesmo problema !!!!


Sergio Oliveira

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