Olá!
Estou com um problema de performance numa aplicação que utiliza Floggy para persistência, e já gastei um bom tempo tentando utilizar o recurso de índice que foi incluída na versão 1.4.0 alpha mas sem sucesso. Será que terei que migrar para o Perst? rsrsrs
Tenho tabelas que vão de 30 a 4000 registros, e isto não está nem um pouco performático, problema já conhecido do RMS.
Ví no site do floggy (http://floggy.sourceforge.net/core-package.html#Using_the_index_feature_only_available_on_package_1.4.0-alpha) que a versão 1.4.0 alpha trabalha com o recurso de índice. Baixei o exemplo más abriu no Netbeans 6.8 com erros de dependência. Então resolvi criar um programa para teste que tem o objetivo de filtrar uma ‘tabela’ por um campo específico.
O problema é que recebo um erro de FloggyException na linha ObjectSet os = pm.find(TableOneDAO.class, fil, true) e quando tento visualizar o backtrace da erro de runMidlet no Netbeans. Estou usando o emulador LG KP500.
Já verifiquei o build.xml e o floggy.xml e aparentemente tudo esta certo.
método de filtro de registro (TableOneDAO), deve retornar uma ‘coleção’ de registros que condizem com o critério do filtro.
Segue abaixo o arquivo floggy.xml
<?xml version="1.0" encoding="UTF-8"?>
TableOneDAO
filtroUm
Ajuda e palpites são bem-vindos!
Obrigado.
apenas para facilitar a leitura estou postando aqui os arquivos:
Este método filtra os registros que correspondem ao critério do IndexFilter.
public Vector findFilter(String filterKey, String filterValue) throws Exception {
Vector vctLista = new Vector();
PersistableManager pm;
pm = PersistableManager.getInstance();
try {
IndexFilter fil = new IndexFilter(filterKey, filterValue); // <- ERRO. Valores: filterKey = "filtroUM" e filterValue = "01"
if (fil!=null) {
ObjectSet os = pm.find(TableOneDAO.class, fil, true);
if (os !=null){
TableOneDAO dao;
for(int i=0;i<os.size();i++) {
dao = (TableOneDAO)os.get(i);
dao.setID(os.getId(i));
vctLista.addElement(dao);
}
}
}
}
catch (FloggyException flgex) {
throw new ExceptionSet(flgex, "TestePerformanceDOM|FloggyException.");
}
catch (Exception ex) {
throw new ExceptionSet(ex, "TestePerformanceDOM|Exception.");
}
return vctLista;
}
Estrutura do registro
public class TableOneDAO implements Persistable {
public String codigo = “”;
public String descricao = “”;
public String descricaoReduzida = “”;
public String filtroUm = “”;
public String filtroDois = “”;
public String filtroTres = “”;
public transient int ID;
public String getRecordStoreName(){
return "TableOneDAO";
}
Arquivo build.xml:
<!--
IMPORTANT: You must change the value of this property pointing it to the directory
where you have installed Floggy.
Some examples:
Linux: /opt/floggy
Windows: c:\floggy
-->
<property name="floggy.path" value="C:\Desenvolvimento\JME\LIBS\Floggy_1.4.0"/>
<path id="floggy.classpath">
<fileset dir="${floggy.path}\lib" includes="*.jar"/>
</path>
<target name="post-compile">
<taskdef
name="floggy-persistence-weaver"
classname="net.sourceforge.floggy.persistence.WeaverTask"
classpathref="floggy.classpath"/>
<floggy-persistence-weaver
bootclasspath="${platform.bootclasspath}"
classpath="${libs.classpath}"
input="${build.classes.dir}"
output="${build.classes.dir}"/>
</target>
É isto ai.
Boa noite Marcelo,
Você poderia nos fornecer o stack trace da exception? Sem ela não posso te dizer o que pode ou não estar acontecendo.
Aqui está um exemplo de aplicação que usa a nova funcionalidade: http://floggy.sourceforge.net/1.4.0-alpha/floggy-persistence-demo-1.4.0-SNAPSHOT.zip
No aguardo
Um abraço
Thiago, obrigado pela resposta.
Então, o erro na verdade ocorre no método findFilter, linha:
ObjectSet os = pm.find(TableOneDAO.class, fil, true);
Ao ser executada, me retorna um erro de FloggyException (“net.sourceforge.floggy.persistence.FloggyException: 0”)
org.netbeans.modules.viewmodel.TreeModelNode@11e1fb3[Name=, displayName=flgex] FloggyException #204
…displayName=rootCause] NullPointerException #211
…displayName=Herdado]
…displayName=detailMessage] String " 0"
…displayName=offset] int 0
…displayName=count] int 3
…displayName=value] char[] #219(length=3)
…displayName=[0]] char ’ ’
…displayName=[1]] char ’ ’
…displayName=[2]] char ‘0’
…displayName=backtrace] Object[] #214(length=2)
…displayName=[1]] int[] #217(length=13)
…displayName=[0]] Object[] #216(length=13)
Ao examinar o observador da FloggyExceptio gerada, se tento abrir o ‘backtrace’, índice [0] da ‘rootCause’, o Netbeans retorna erro de runMidlet e aborta a execução.
Verifiquei e o objeto IndexFilter “fil” esta devidamente valorado. Inclusive testei com valores literais na passagem do construtor:
IndexFilter fil = new IndexFilter(“filtroUm”, “1”);
Mas o erro persistiu.
Não sei se isto ajuda, se precisar de mais informações por favor me informe.
Marcelo, tu poderia anexar aqui uma aplicação mínima que reproduzisse o problema? Pode ser pré connfigurada para Netbeans mesmo.
No aguardo