| Autor |
Mensagem |
|
|
Rafael Steil wrote:Sao configuracoes do forum, que os usuarios ganham a medida que contribuem!
Rafael
Eu posso parecer meio "lesa" mas ISSO eu já tinha entendido...
Eu queria saber se tem algum lugar (página) onde eu vejo as minhas possibilidades de deixar de ser Thread.start...
|
 |
|
|
Rafael Steil wrote:Boa menina  . Correu atras e achou a informacao!!
Rafael
Um dia eu chego a "forum spammer"...
Curiosidade, de onde saem essas "classificações"???
|
 |
|
|
Como ninguém respondeu, eu busquei e encontrei a resposta na lista do próprio log4j. Para os que vem olhar, é o seguinte: um cidadão lá afirma que apesar de não haver métodos "synchronized" na api, dentro do código há blocos fazendo a sincronização o mais pertinho possível da operação 'perigosa', para não comprometer a performance.
Ou seja, a resposta é sim, log4j é thread-safe!
|
 |
|
|
Resolvi postar na lista do próprio log4j e alguém me deu uma sugestão tão óbvia....
Colocar o remove() no final do doGet/doPost, que são executados em cada thread separadamente....
Como nunca vi o remove em nenhum exemplo, essa solução não me veio a cabeça.
De qualquer forma essa "obrigação" de lembrar de chamar o remove está me soando a alocação de memória em C++... arghhhh....
|
 |
|
|
danieldestro wrote:Bom, certamente se há algum problema desse tipo os desenvolvedores já se preocuparam com isso.
Muito confiante...
O tomcat talvez até faça, por ser o log4j um projeto jakarta. Mas suponha que eu use um outro container, e use o log4j incorporado na minha app. Será que o mais provável não é o log4j acabar devorando memória sem que eu nada possa fazer a respeito, já que quem controla minhas threads é o container?
|
 |
|
|
Esse é muito bom, com muitos exemplos em Java e muito bem explicado:
Design Pattern Java Workbook, de Steve John Metsker (Addison-Wesley, 2002)
|
 |
|
|
Pessoal,
a api do log4j diz que é importante chamar o método NDC.remove() no final do método run de cada thread da aplicação, de forma a garantir que a thread possa ser removida da memória. Mas numa app web não é o programador que cria as threads, então como fazer para evitar que as threads fiquem ocupando memória à toa no servidor?
Obrigada,
|
 |
|
|
Estou estudando como fazer logging em apps web pelo artigo http://www.onjava.com/pub/a/onjava/2002/08/07/log4j.html?page=3 e descobri que para diferenciar as mensagens por cliente eu devo usar o NDC. A doc. da api diz que cada thread terá o seu próprio NDC, mas na hora de fazer o logging, ou seja, escrever a msg, o appender é o mesmo para todas as threads.
Mas eu fiquei pensando: será que o logging propriamente dito é thread safe? Não vi nada sinchronized nem na classe Logger (Category) nem nas classes appenders (FileAppender, por exemplo).
Então eu pergunto, o logging no log4j é thread-safe?
|
 |
|
|
Galera,
tenho um bean "idiota", com uma propriedade chamada "nome", que eu estou tentando expor com uma implementação de BeanInfo, ao invés de usar o mecanismo default de instrospection. Eis o código do bean:
Agora, o código da classe que implementa BeanInfo:
Quanto ao icone, perfeito, ele aparece lá no toolbox, lindinho. Mas com ou sem a minha implementação do método getPropertyDescriptorsacima, não tem jeito de eu enxergar a propriedade nome na beanbox....
Alguém sabe dizer o que está faltando?
Ah, o manifest:
Fiz tudo como manda o figurino, ou melhor, o Java Tutorial....
|
 |
|
|
danieldestro wrote:Sua classe MeuSegundoBean não deveria implementar alguma interface relativa às notificações de mudança de estados?
Não, quem implementa PropertyChangeListener (PCL)é o bean que "ouve" os eventos. Na beanbox, é feita uma classe hook-up (adaptadora) que implementa a PCL chamando internamente um método escolhido desse bean "ouvidor" na hora do projeto.
A bean box é meio doidona, no dia seguinte o código funcionou....
Obrigada,
|
 |
|
|
Olá, pessoal.
Estou lendo o trail sobre java beans no "Java Tutorial", e tentando fazer um bean com uma bound property.
O meu bean (codigo abaixo) funciona, quando mudo a propriedade "nome" o label muda normalmente, mas ao ligar o meu bean ao bean ChangeReporter dos exemplos da beanbox, seguindo exatamente as instruções do tutorial, o ChangeReporter parece não "notar" que houve um evento PropertyChangeEvent (apesar de reportar normalmente mudanças nas propriedades herdadas como background, font, etc...)
Alguém tem idéia do que está acontecendo?
brigadim
|
 |
|
|
Bjornn Borg wrote:Alguém pode me explicar pq o código abaixo não funciona?
<c:if test='${listarUsuariosForm.status.allowInsertOperation == 1}'>
Tem certeza que a sua chave de fechamento do teste está no lugar certo?
|
 |
|
|
cv wrote:Voce esta jogando TODAS as exceptions fora (ou seja, voce nao esta fazendo com elas quando as infelizes acontecem). Entao, vai ser dificil mesmo saber onde esta o erro. Trate as excecoes apropriadamente e ai tudo fica facil 
E faça mais um favor a vc mesmo, crie um TableModel decente para essa tabela...
Aqui vai um código exemplo de TableModel que pode te ajudar (o exemplo é meu, baseado num parecido do livro "Design Patterns Java Workbook).
public class ProdutoTableModel extends AbstractTableModel
{
private Produto[] osProdutos;
private static String[] rotulosDasColunas = {"Produto","Preço", "Em Promoção?"};
/** Uma instância dessa classe deve necessariamente
*estar ligada a um array de produtos.
*/
public ProdutoTableModel(Produto[] produtos)
{
osProdutos = produtos;
}
/** Esse método retorna o valor que deve ser impresso
*em cada célula da tabela.
*/
public Object getValueAt(int linha, int coluna)
{
switch(coluna)
{
case 0:
return osProdutos[linha].getDescricao();
case 1:
return new Double(osProdutos[linha].getPreco());
//tem que haver conversão para Double!
case 2:
if(osProdutos[linha].isEmPromocao())
return "SIM";
else
return "não";
default:
return "-";//só por via das dúvidas...
}
}
/** Retorna o número de linhas (produtos) da tabela.
*/
public int getRowCount()
{
return osProdutos.length;
}
/** Retorna o número de colunas da tabela
*/
public int getColumnCount()
{
return rotulosDasColunas.length;
}
/** Retorna o rótulo de cada coluna
*/
public String getColumnName(int i)
{
return rotulosDasColunas[i];
}
}
E aí vai um programinha mínimo para ver essa tabela:
public class MostraTabela
{
public static void main(String[] args)
{
JTable tabela = new JTable(obtemTabelaDeProdutos());
tabela.setRowHeight(20);
JScrollPane tela = new JScrollPane(tabela);
tela.setPreferredSize(new Dimension(300,100));
mostra(tela, "Produtos da Loja");
}
//cria uma série de produtos para serem mostrados
//AQUI VOCÊ PODE FAZER UMA CONEXÃO COM O BANCO PARA
//OBTER OS REGISTROS DA SUA TABELA
private static ProdutoTableModel obtemTabelaDeProdutos()
{
Produto p1 = new Produto("arroz", 2.45f, false);
Produto p2 = new Produto("feijao", 1.99f, true);
Produto p3 = new Produto("macarrão", 1.56f, false);
return new ProdutoTableModel(new Produto[]{p1,p2,p3});
}
//mostra o componente numa janela com o título dado
private static void mostra(Component comp,String titulo)
{
JFrame janela = new JFrame(titulo);
janela.getContentPane().add(comp);
janela.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
janela.pack();
janela.setVisible(true);
}
}
Ah, falta implementar a classe Produto, mas essa é trivial, né não?
|
 |
|
|
Tenho uma app web que recupera de um banco mysql alguns campos que estão com tags html e na hora de fazer os relatórios no jasper quero que esse texto seja impresso da forma normal, ou seja, no lugar das tags devem aparecer os acentos.
Como eu faço isso?
|
 |
|
|
Ai, galera!
descobri o problema, estava usando o encoding default do netbeans que é UTF-8! Bastou mudar para ISO-8859-1 que tudo se resolveu!
Valeu, Alessandro.
|
 |
|
|