<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "29) Como usar HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos."]]></title>
		<link>http://forum.mentaframework.org/posts/list/19.page</link>
		<description><![CDATA[Latest messages posted in the topic "29) Como usar HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos."]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>29) Como usar HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos.</title>
				<description><![CDATA[ Olá pessoal, ao ver muitos tópicos referentes ao uso do Hibernate com
 Annotations via o filtro HibernateFilter, DAO genéricos, IoC e DI, 
darei um exemplo simples ilustrando tal cenário.
Obs: Usarei um dao genérico simples apenas como exemplo.

Cenário, um simples cadastro de Países e Estados onde é cadastrado um
País e logo após um Estado relacionado ao País. ( Relacionamento 1x n ).


Primeiramente criaremos uma interface que será a nossa interface Base.

Interface BaseDao

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public interface BaseDao&lt;T&gt; {
    
    void delete&#40;final T obj&#41; throws Exception ;
    
    List&lt;T&gt; findByExample&#40;final T example&#41; throws Exception ;
    
    Serializable insert&#40;T obj&#41; throws Exception ;
    
    List&lt;T&gt; listAll&#40;String orderBy&#41; throws Exception ;
    
    T loadById&#40;Serializable id &#41; throws Exception ;
    
    void update&#40;final T obj&#41; throws Exception ;
    
    public List&lt;T&gt; findByFieldLike&#40;String field, String expression&#41; throws Exception ;
    
}
</pre>
		</div>

Agora uma classe genérica que implementará a nossa interface.

Classe HGenericDao

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class HGenericDao&lt;T&gt; implements BaseDao&lt;T&gt; {
    
    protected Class&lt;T&gt; objClass = null;
    protected Session session = null;
    
    public HGenericDao&#40;&#41;{
    }
    
    public HGenericDao&#40;Class&lt;T&gt; objKlass&#41; {
        this.setObjectClass&#40;objKlass&#41;;
    }
    
    public void setObjectClass&#40;Class&lt;T&gt; objectKlass&#41; {
        this.objClass = objectKlass;
    }

    public void setSession&#40;Session session&#41; {
        this.session = session;
    }
    
    public Serializable insert&#40;T obj&#41; throws Exception {
        Serializable idGerado = session.save&#40;obj&#41;;
        return idGerado;
    }
    
    public T loadById&#40;Serializable id&#41; throws Exception {
        return &#40;T&#41; session.load&#40;this.objClass, id&#41;;
    }
    
    public void delete&#40;final T obj &#41; throws Exception {
        session.delete&#40;obj&#41;;
    }
    
    public void update&#40;final T obj&#41; throws Exception {
        session.update&#40;obj&#41;;
    }
    
    public List&lt;T&gt; findByExample&#40;final T example&#41; throws Exception {
        Criteria criteria = session.createCriteria&#40;this.objClass&#41;;
        criteria.add&#40;Example.create&#40;example&#41;.enableLike&#40;MatchMode.ANYWHERE&#41;.ignoreCase&#40;&#41;&#41;;
        final List&lt;T&gt; result = criteria.list&#40;&#41;;
        return result;
    }
    
    public List&lt;T&gt; findByFieldLike&#40;String fieldOnTable, String expression&#41; throws Exception {
        Criteria c = session.createCriteria&#40;this.objClass&#41;.add&#40;
                Restrictions.like&#40;fieldOnTable , expression , MatchMode.ANYWHERE &#41;.ignoreCase&#40;&#41;&#41;;
        return c.list&#40;&#41;;
    }
    
    public List&lt;T&gt; listAll&#40;String orderBy&#41; throws Exception {
        Criteria criteria = session.createCriteria&#40;this.objClass&#41;;
        criteria.addOrder&#40;Order.asc&#40;orderBy&#41;&#41;;
        final List&lt;T&gt; result = criteria.list&#40;&#41;;
        return result;
    }
    
}
</pre>
		</div>

De posse dessa interface e dessa classe podemos manipular qualquer
 Bean Com os métodos mais utilizados acima.
Vamos agora criar nossos beans de exemplo.

Classe anotada Pais
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
@Entity
@Table&#40;name = "pais"&#41;
public class Pais implements Serializable {
    
    @Id
    @Column&#40;name = "idPais", nullable = false&#41;
    @GeneratedValue
    private Integer idPais;
    
    @Column&#40;name = "nomePais"&#41;
    private String nomePais;
    
    @OneToMany&#40;cascade = CascadeType.ALL, mappedBy = "paisidPais"&#41;
    private Collection&lt;Estado&gt; estadoCollection;

// Métodos setters e getters omitidos.
</pre>
		</div>

Classe anotada Estado
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
@Entity
@Table&#40;name = "estado"&#41;
public class Estado implements Serializable {

    @Id
    @Column&#40;name = "idEstado", nullable = false&#41;
    @GeneratedValue
    private Integer idEstado;

    @Column&#40;name = "nomeEstado", nullable = false&#41;
    private String nomeEstado;

    @Column&#40;name = "siglaEstado"&#41;
    private String siglaEstado;

    @OneToMany&#40;cascade = CascadeType.ALL, mappedBy = "estadoidEstado"&#41;
    private Collection&lt;Cidade&gt; cidadeCollection;

    @JoinColumn&#40;name = "Pais_idPais", referencedColumnName = "idPais"&#41;
    @ManyToOne
    private Pais paisidPais;

// Métodos setters e getters omitidos.
</pre>
		</div>

Ok, agora já poderíamos instanciar o HGenericDao e manupular os
 dois beans, porém não é um boa pratica, pois e se quizermos um
 método especifico para Estado , teríamos que escreve-lo no HGenericDao.
 Então a solução mais indicada é criar um interface para cada Bean
 e uma classe concreta para tal.

Interface PaisDao
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public interface PaisDao extends BaseDao&lt;Pais&gt; {
    
    public List&lt;Pais&gt; findByName&#40;String name&#41; throws Exception ;
    
}
</pre>
		</div>

Interface EstadoDao
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public interface EstadoDao extends BaseDao&lt;Estado&gt; {
    
}
</pre>
		</div>

Com esses interface criaremos agora nossas classes concretas
 Que Implementara nossa interfaces. Note que as interfaces
 Filhas Estendem a interface BaseDao especificando já o tipo
De objeto manipulado.

Classe PaisImpDao
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class PaisImpDao extends HGenericDao&lt;Pais&gt; implements PaisDao {
    
    public PaisImpDao&#40;&#41; {
        super&#40;Pais.class&#41;;
    }
    
    public List&lt;Pais&gt; findByName&#40;String nomePais&#41; throws Exception {
        Criteria c = super.session.createCriteria&#40;super.objClass&#41;.add&#40;
                Restrictions.like&#40;"nomePais", nomePais , MatchMode.START &#41;.ignoreCase&#40;&#41;&#41;;
        return c.list&#40;&#41;;
    }
    
}
</pre>
		</div>

Classe EstadoImpDao
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class EstadoImpDao extends HGenericDao&lt;Estado&gt; implements EstadoDao {
    
      public EstadoImpDao&#40;&#41; {
        super&#40;Estado.class&#41;;
    }
    
}
</pre>
		</div>

Notem agora que nossa classe especifica estende a classe genérica HGenericDao
Já sendo especificado o tipo de objeto que será manipulado.

E agora, precisamos do hibernate.cfg.xml. aqui vou dar um exemplo:
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

&lt;hibernate-configuration&gt;
    
    &lt;session-factory&gt;
        
        &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;
        &lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost:3306/jdhcp?autoReconnect=true&lt;/property&gt;
        &lt;property name="hibernate.connection.username"&gt;root&lt;/property&gt;
        &lt;property name="hibernate.connection.password"&gt;1048576&lt;/property&gt;
        &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLInnoDBDialect&lt;/property&gt;
        &lt;!-- configuration pool via c3p0--&gt; 
        &lt;property name="c3p0.acquire_increment"&gt;1&lt;/property&gt; 
        &lt;property name="c3p0.idle_test_period"&gt;100&lt;/property&gt; &lt;!-- seconds --&gt; 
        &lt;property name="c3p0.max_size"&gt;10&lt;/property&gt; 
        &lt;property name="c3p0.max_statements"&gt;0&lt;/property&gt; 
        &lt;property name="c3p0.min_size"&gt;5&lt;/property&gt; 
        &lt;property name="c3p0.timeout"&gt;100&lt;/property&gt; &lt;!-- seconds --&gt; 
        &lt;property name="show_sql"&gt;true&lt;/property&gt;
        
    &lt;/session-factory&gt;
    
&lt;/hibernate-configuration&gt;
</pre>
		</div>

Tudo certo, agora é só usar o menta para injetar as classes concretas e utilizar nosso Dao.

Agora nosso ApplicationManager.

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class ApplicationManager  extends org.mentawai.core.ApplicationManager {
    
    SessionFactory sessionFactory;
    
    private ActionConfig ac;
    
     public ApplicationManager&#40;&#41; {
    }
    
    public void init&#40;Context application&#41; {
        
// VAMOS agora crier nossa sessionFactory para passar
// para o hibernateFilter.

        sessionFactory = new AnnotationConfiguration&#40;&#41;
         .addAnnotatedClass&#40;Estado.class&#41;
        .addAnnotatedClass&#40;Pais.class&#41;
        .configure&#40;&#41;
        .buildSessionFactory&#40;&#41;;
        
//IoC para criar as instancias de nossa classes concretas que
// será injetada nas nossas actions.

        ioc&#40;"paisDao", PaisImpDao.class&#41;; 
        ioc&#40;"estadoDao", EstadoImpDao.class&#41;;
         
    }
    
    public void loadActions&#40;&#41; {
        
        //   setDebugMode&#40;true&#41;;
        
        List&lt;Filter&gt; commons = new ArrayList&lt;Filter&gt;&#40;&#41;;

// FILTRO IoC que ira instanciar as classes indicadas acima
// atribuindo as chaves passasdas.
        commons.add&#40;new IoCFilter&#40;&#41;&#41;;

// FILTRO que tentara injetar as instancias criadas pelo IoC
// dentro de nossas action sem a necessidade de um método set
        commons.add&#40;new InjectionFilter&#40;&#41;&#41;;

// Note que passamos a sessionFactory pronta para nosso HibernateFilter.
        commons.add&#40;new HibernateFilter&#40;true, sessionFactory&#41;&#41;;

// FILTRO que satisfará qualquer dependencia configurada.
        commons.add&#40;new DIFilter&#40;&#41;&#41;;

// Filtro para validação
        commons.add&#40;new ValidatorFilter&#40;&#41;&#41;;
        addGlobalFilter&#40;commons&#41;;
        
// Nosso DI que injetara uma session para quem precisar.
        di&#40;"session", Session.class&#41;;
        
// Aqui simples configurações de exemplo
        ac = action&#40;PaisAction.class&#41;
        .fwdOk&#40;"/jsp/localidades/pais.page"&#41;;
        .fwdError&#40;"/jsp/localidades/paisError.page"&#41;
        
        action&#40;PaisAction.class, "add"&#41;
        .fwdOk&#40;"/jsp/localidades/pais.page"&#41;
        .on&#40;ERROR, new Chain&#40;ac&#41;&#41;;
        
        ac = action&#40;EstadoAction.class&#41;
        .fwdOk&#40;"/jsp/localidades/estado.page"&#41;;
        
        action&#40;EstadoAction.class , "add"&#41;
        .fwdOk&#40;"/jsp/localidades/estado.page"&#41;
        .on&#40;ERROR, new Chain&#40;ac&#41;&#41;;
        
    }
    
    public void loadLists&#40;&#41; throws IOException {
    }
    
    public void loadLocales&#40;&#41; {
        LocaleManager.add&#40;new Locale&#40;"pt", "BR"&#41;&#41;;
    }
    
}
</pre>
		</div>

Tudo pronto. Agora é so usar nossos Daos nas actions criando as 
Variáveis de instancias com o mesmo nome da chave atribuída no
IoC.
Exemplo de uma action PaisAction.
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class PaisAction extends BaseAction implements Validatable {

// REPARE que usamos a interface PaisDao como tipo de variavel 
// e o nome paisDao é a chave colocada no IoC no ApplicationManager
//     ioc&#40;"paisDao", PaisImpDao.class&#41;
// e o InjectionFilter injetará automaticamente.

    PaisDao paisDao = null;
    
    private static final String CAMPO_REQUERIDO = "Campo Requerido!";
    private static final String INVALID_LENGHT = "Minimo 3 caracteres";
    
    private List&lt;Pais&gt; list;
    
    public PaisAction&#40;&#41; {
    }

    public String execute&#40;&#41; throws Exception {
        output.setValue&#40;"paises", buildListForDisplayTag&#40;&#41;&#41;;
        return SUCCESS;
    }
    
    public String add&#40;&#41; throws Exception {
        String nome = input.getStringValue&#40;"nomePais"&#41;;
        Pais pais = new Pais&#40;&#41;;
        pais.setNomePais&#40;nome&#41;;
  
        paisDao.insert&#40;pais&#41;;
        return execute&#40;&#41;;
    }
    
    public List&lt;Pais&gt; buildListForDisplayTag&#40;&#41; throws Exception {
        list = paisDao.listAll&#40;"nomePais"&#41;;
        if&#40;list.isEmpty&#40;&#41;&#41;{
            list.add&#40;new Pais&#40;new Integer&#40;0&#41;, "Não há paises cadastrados" &#41;&#41;;
        }
        return list;
    }
    
    public void initValidator&#40;Validator val, String innerAction&#41; {
        if&#40;innerAction != null && innerAction.equals&#40;"add"&#41;&#41; {
            val.add&#40;"nomePais", new RequiredFieldRule&#40;&#41; , CAMPO_REQUERIDO&#41;;
            val.add&#40;"nomePais", new StringRule&#40;3&#41;, INVALID_LENGHT&#41;;
        }
    }
    
}
</pre>
		</div>

Exemplo de uma Action EstadoAction
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class EstadoAction extends BaseAction implements Validatable {
    PaisDao paisDao = null;
    EstadoDao estadoDao = null;
    
    private static final String CAMPO_REQUERIDO = "Campo Requerido!";
    private static final String INVALID_LENGHT_SIGLA = "Mínimo 2 caracteres";
    private static final String INVALID_LENGHT = "Minimo 3 caracteres";
    /** Creates a new instance of EstadoAction */
    public EstadoAction&#40;&#41; {
    }

    public String execute&#40;&#41; throws Exception {
        Iterator paisList = paisDao.listAll&#40;"nomePais"&#41;.iterator&#40;&#41;;
        SimpleListData paisesList = new SimpleListData&#40;"paises"&#41;;
        while &#40;paisList.hasNext&#40;&#41;&#41; {
            Pais obj = &#40;Pais&#41; paisList.next&#40;&#41;;
            paisesList.add&#40;obj.getIdPais&#40;&#41;,obj.getNomePais&#40;&#41;&#41;;
        }
        output.setValue&#40;"paises", paisesList&#41;;
        output.setValue&#40;"estados", estadoDao.listAll&#40;"nomeEstado"&#41;&#41;;
        return SUCCESS;
    }
    
    public String add&#40;&#41; throws Exception{
        String nomeEstado = input.getStringValue&#40;"nomeEstado"&#41;;
        String sigla = input.getStringValue&#40;"sigla"&#41;;
        Integer paisId = input.getIntValue&#40;"pais"&#41;;
        
        Estado estado = new Estado&#40;&#41;;
        estado.setNomeEstado&#40;nomeEstado&#41;;
        estado.setSiglaEstado&#40;sigla&#41;;
        estado.setPaisidPais&#40;new Pais&#40;paisId&#41;&#41;;
       
        estadoDao.insert&#40;estado&#41;;
      
        output.setValue&#40;"nome", null&#41;;
        output.setValue&#40;"sigla", null&#41;;
        return execute&#40;&#41;;
    }

    public void initValidator&#40;Validator val, String innerAction&#41; {
        if&#40;innerAction != null && innerAction.equals&#40;"add"&#41;&#41;{
            val.add&#40;"nomeEstado", new RequiredFieldRule&#40;&#41;, CAMPO_REQUERIDO&#41;;
            val.add&#40;"sigla", new RequiredFieldRule&#40;&#41;, CAMPO_REQUERIDO&#41;;
            val.add&#40;"sigla", new StringRule&#40;2,2&#41; , INVALID_LENGHT_SIGLA&#41;;
            val.add&#40;"nomeEstado", new StringRule&#40;3&#41; , INVALID_LENGHT&#41;;
        }
    }
    
}
</pre>
		</div>

Muitos novatos devem estar se perguntando:
Para que criar interfaces e classes concretas que não contem nada?

È simples digamos que eu queira criar um novo método
Específico para a Dao EstadoDao, sem as nossas interfaces
E classes separadas, teríamos que criar na nossa HGenericDao, mas
Sem necessidad pois é um método que diz respeito apenas para Estado,
Então, criaremos tal método na classe EstadoImpDao e assinaremos o 
Método na interface EstadoDao e pronto, teremos disponível em nossa
Actions o nosso novo método.

Bom é isso pessoal.
]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1240.page#10173</guid>
				<link>http://forum.mentaframework.org/posts/list/1240.page#10173</link>
				<pubDate><![CDATA[Sat, 12 May 2007 12:12:31]]> GMT</pubDate>
				<author><![CDATA[ robertwgil]]></author>
			</item>
			<item>
				<title>Re:FAQ de como usar, HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos.</title>
				<description><![CDATA[ Parabéns pela iniciativa Robert]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1240.page#10195</guid>
				<link>http://forum.mentaframework.org/posts/list/1240.page#10195</link>
				<pubDate><![CDATA[Mon, 14 May 2007 07:31:26]]> GMT</pubDate>
				<author><![CDATA[ IceW0lf]]></author>
			</item>
			<item>
				<title>Re:FAQ de como usar, HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos.</title>
				<description><![CDATA[ 
Valeu! Depois quando sobrar um tempo colocamos no FAQ do menta!

Parabéns! Ficou bem legal!]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1240.page#10196</guid>
				<link>http://forum.mentaframework.org/posts/list/1240.page#10196</link>
				<pubDate><![CDATA[Mon, 14 May 2007 08:19:47]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Re:FAQ de como usar, HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos.</title>
				<description><![CDATA[ Lembrando que esses codigos sao apenas para ilustrar o anunciado do
topico..

agora respondendo a pergunta..

é uma session do hibernate sim

e retorno um Serializable porque no hibernate
quando voce usa o insert para gravar no banco, ele
retorna a id gerado, hj em dia usam-se mais o persist,
ou o saveOrUpdate, porem ambos não voltam o id que
foi gerado.

e outra coisa. na interface nem seria necessario ter esse
metodo setSession() , pois o menta injeta as session via
DI, direto nas actions, tirando esse metodo setSession sua
interface fica dasacoplada de qualquer tipo de persistencia de
dados, voce poderia pro exemplo passar uma session no 
MentaBean, JDBC etc...]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1240.page#11507</guid>
				<link>http://forum.mentaframework.org/posts/list/1240.page#11507</link>
				<pubDate><![CDATA[Fri, 10 Aug 2007 14:01:05]]> GMT</pubDate>
				<author><![CDATA[ robertwgil]]></author>
			</item>
			<item>
				<title>Re:FAQ de como usar, HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos.</title>
				<description><![CDATA[ Olá a todos.

Post muito interessante, está me ajudando muito. Mas, gostaria de solicitar auxilio a vocês.

Construi uma aplicação seguindo o exemplo (apenas utilizei templates para construir as páginas, o que está funcionando corretamente). Porém, quando faço qualquer acesso à base de dados, caio na seguinte exceção:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>com.sun.jdi.InvocationException occurred invoking method</pre>
		</div>

Não aparece no console nem nada, só vejo quando estou debugando, e tento ver o conteúdo da variável. Tentei ver no google o que causa o problema, mas, não fui bem sucedido (não entendi muito bem o que gera essa exceção).

Alguém já passou por esse mesmo problema? Utilizo Eclipse Europa, e normalmente o WTP para construir projetos dinâmicos. Nesse projeto, estou utilizando o Jboss 4.0.2.

Obrigado.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1240.page#12229</guid>
				<link>http://forum.mentaframework.org/posts/list/1240.page#12229</link>
				<pubDate><![CDATA[Sat, 15 Sep 2007 19:47:02]]> GMT</pubDate>
				<author><![CDATA[ MentaBeginer]]></author>
			</item>
			<item>
				<title>Re:29) Como usar HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos.</title>
				<description><![CDATA[ robertwgil e se eu tenho a service(Não quero lidar com DAOS nas Actions) como seria o meu ApplicationManager]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1240.page#15525</guid>
				<link>http://forum.mentaframework.org/posts/list/1240.page#15525</link>
				<pubDate><![CDATA[Wed, 4 Jun 2008 13:39:52]]> GMT</pubDate>
				<author><![CDATA[ edurezende]]></author>
			</item>
			<item>
				<title>Re:29) Como usar HibernateFilter com Annotations, IoC, DIFilter e Daos Genéricos.</title>
				<description><![CDATA[ Basta vc criar os IoC e DIs necessários no seu AplicationManager.

Exemplo:

ioc("pessoaDAO", pessoaDAO);
ioc("pessoaService", PessoaServiceImpl.class);

di("pesosaDAO", pessoaDAOImpl.class);

E na sua action chamar seu service.

ActionQualquer
private PessoaService pessoaService;

Pessoa pessoa = pessoaService.getAll();

Etc. etc. e etc.

Qualquer coisa tamos ai.

Tem segredo isso no menta nao.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1240.page#15527</guid>
				<link>http://forum.mentaframework.org/posts/list/1240.page#15527</link>
				<pubDate><![CDATA[Wed, 4 Jun 2008 15:22:12]]> GMT</pubDate>
				<author><![CDATA[ IceW0lf]]></author>
			</item>
	</channel>
</rss>
