A resposta já foi dada, mas vou tentar esclarecer melhor.
O ideal é que sua classe que acessa o banco de dados não exporte ResultSet ou Statements, acho que você já quer fazer isso e não sabe como.
Você não deve exportar esses objetos porque você encapsulou seu acesso a banco na sua classe, então, só ela deveria ter acesso a recursos de banco, leia-se ResultSet, Statement, Connection, etc.
Então, uma idéia é exportar o seu “ResultSet” dentro de uma Collection de Map’s. Assim você pode liberar todos os recursos “de banco” após sua chamada ao banco.
Você pode fazer algo como:
import java.util.*;
...
public Collection listar() throws EJBException {
Collection usuarios = new LinkedList();
try
{
Map map;
Connection con = getConnection(datasourceName);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select id,nome,login,senha,dt_cadastro,apelido,descricao,email," +
"nascimento,site,assinatura,pergunta,email_publico,cadastro_publico,im_publico,icq,messenger " +
"from usuario");
while (rs.next()) {
map = new TreeMap();
map.put("id", new Long(rs.getLong("id")));
map.put("nome", rs.getString("nome"));
map.put("login", rs.getString("login"));
map.put("senha", rs.getString("senha"));
map.put("dt_cadastro", rs.getDate("dt_cadastro"));
map.put("apelido", rs.getString("apelido"));
map.put("descricao", rs.getString("descricao"));
map.put("email", rs.getString("email"));
map.put("nascimento", rs.getDate("nascimento"));
map.put("site", rs.getString("site"));
map.put("assinatura", rs.getString("assinatura"));
map.put("pergunta", rs.getString("pergunta"));
map.put("email_publico", (rs.getInt("email_publico") == 1 ? new Boolean(true) : new Boolean(false)));
map.put("cadastro_publico", (rs.getInt("cadastro_publico") == 1 ? new Boolean(true) : new Boolean(false)));
map.put("im_publico", (rs.getInt("im_publico") == 1 ? new Boolean(true) : new Boolean(false)));
map.put("icq", rs.getString("icq"));
map.put("messenger", rs.getString("messenger"));
usuarios.add(map);
}
// Liberando recursos "de banco"
rs.close();
st.close();
con.close();
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
//Seu ResultSet encapsulado em uma Collection
return usuarios;
}
Caso você não saiba, você tem que ler a respeito de Collections e Map’s, fazem parte das classes “fundamentais” Java. São cobradas inclusive nas provas de certificação.