Kleber, vc tem ai uma pilha de conexoes (Pool) com o banco de dados utilizando os patterns de concorrencia "producer-consumer" e "guarded-suspension". Em outras palavras, voce cria e armazena uma serie de conexoes em uma pilha (stack). Para utiliza-las voce utiliza o metodo "pop" que "suspende" o Thread corrente (wait) ate que uma conexao esteja disponivel. Por outro lado, o metodo push libera uma conexao e notifica esse fato a todos os Threads que disputam uma conexao atraves de invocacoes ao metodo "pop". Essa classe implementa um Pool de Conexoes com o BD e e util em ambientes multi-threadeds onde uma serie de Threads utilizam conexoes por periodo de tempo definido e as devolvem assim que nao precisarem mais delas. Isso economiza tempo de latencia na criacao e estabelecimento das conexoes com o BD atraves do reuso de estado de objetos. Muito cuidado, no entanto, com o travamento de Threads que mantem conexoes abertas com o BD (isso pode levar a estouro no numero de conexoes com o BD) e com o uso de conexoes invalidas no Pool que ja foram fechadas por motivos diversos (ociosidade, politicas de seguranca como firewalls,...). O proprio Pool e um pattern e pode ser utilizado em outros contextos como Pool de Threads, Pool de Descritores de Arquivos, Pool de Sockets, enfim qualquer tipo de objeto caro de se inicializar ou que consuma muitos recursos do SO. Lembro que o proprio JDBC oferece Pools de conexoes e que em www.javaworld.com voce tambem encontra bons artigos.
s. Marcilio. -----Mensagem original----- De: Kleber Rodrigo Carvalho [mailto:[EMAIL PROTECTED]] Enviada em: domingo, 10 de marco de 2002 18:40 Para: [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED] Assunto: [java-list] pop e push Pessoal, alguim poderia me ajudar a entender essa classe ? Obrigado Kleber Rodrigo de Carvalho import java.sql.*; import java.util.*; import java.io.*; class DBPool implements java.io.Serializable{ /** * Fields containing sensitive data should not be serialized; * doing so exposes their values to any party with access to the serialization stream. * There are several methods for preventing a field from being serialized: * Declare the field as private transient. */ private transient Stack cola = null; public DBPool(){ LogFile.log("creando el DB pool",4); cola = new Stack(); } public synchronized Connection popDBConnection(){ Connection conn = null; /** * Faz enquanto a pilha esta vazia */ while(cola.isEmpty()){ try{ wait(); } catch(InterruptedException i){ } } /** * Remove o objeto do top desta pilha e retorna este objeto para esta fungco. * Faz um casting deste objeto para conn */ conn = (Connection )cola.pop(); return conn; } /** * @param r : Nome da conexco */ public synchronized void pushDBConnection(Connection r){ /** * push(Object item) * Impulsiona um item para o topo desta pilha */ cola.push(r); this.notifyAll(); } } __________________________________________________ Do You Yahoo!? Try FREE Yahoo! Mail - the world's greatest free email! http://mail.yahoo.com/ ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP dzvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] ------------------------------------------------------------------------- ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------