terça-feira, 29 de janeiro de 2008

Pneumotórax

Febre, hemoptise, dispnéia e suores noturnos.
A vida inteira que podia ter sido e que não foi.
Tosse, tosse, tosse.


Mandou chamar o médico:
— Diga trinta e três.
— Trinta e três . . . trinta e três . . . trinta e três . . .
— Respire.


...............................................................................................................


— O senhor tem uma escavação no pulmão esquerdo e o pulmão direito infiltrado.
— Então, doutor, não é possível tentar o pneumotórax?
— Não. A única coisa a fazer é tocar um tango argentino.

Manuel Bandeira

Java - Gerando RSS com ROME

ROME RSS and Atom Utilities é um framework java que serve para gerar arquivos RSS de forma fácil e rápida. Sua utilização basicamente consiste na criação de um objeto Feed e uma lista de Entries a qual será atribuida ao Feed.

A seguir há um exemplo de um Servlet que processa uma lista de Notícias gravada em um banco de dados e gera o RSS utilizando PrintWriter.


//imports...

public class FeedWriter extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/xml");
OutputStream os = response.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os , "UTF-8");
PrintWriter pw = new PrintWriter(osw);
create("rss_2.0", pw);
writer.close();
}

protected void create(String feedType, Writer writer) {
try {
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(feedType);

feed.setTitle("Noticias)");
feed.setLink("http://rome.dev.java.net");
feed.setDescription("BLA BLA BLA");

List entries = new ArrayList();
SyndEntry entry;
SyndContent description;

Dao dao = new Dao();
for (Noticia noticia : dao.findAllNoticias()) {
entry = new SyndEntryImpl();
entry.setTitle(noticia.getTitulo());
entry.setLink(noticia.getLink());
entry.setPublishedDate(noticia.getDataPost());
description = new SyndContentImpl();
description.setType("text/plain");
description.setValue(noticia.getDescricao());
entry.setDescription(description);
entries.add(entry);
}

feed.setEntries(entries);

SyndFeedOutput output = new SyndFeedOutput();
output.output(feed,writer);
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR: "+ex.getMessage());
}
}
}


O retorno será algo semelhante a:


Para saber mais sobre o ROME, acesse http://wiki.java.net/bin/view/Javawsxml/Rome

segunda-feira, 28 de janeiro de 2008

Saudades de Toronto

Saudades de andar nas ruas de Toronto às 2:00am e se sentir seguro...

Rafael José diz:
volta pra cá
Bruno Rossetto diz:
rs
Rafael José diz:
mas e agora? vai fazer oq?
Bruno Rossetto diz:
fiz o BO
Bruno Rossetto diz:
fazer nada
Bruno Rossetto diz:
fazer o q?
Bruno Rossetto diz:
nao tem o q fazer
Bruno Rossetto diz:
só resta tocar o tango argentino...


http://edgarsilva.com.br/2008/01/16/o-seu-salario-e-uma-bosta/

quinta-feira, 24 de janeiro de 2008

JBoss Profiler para detectar Memory Leaks

Após alguns estudos e testes utilizando JBoss profiler encontrei um artigo muito legal de Clebert Suconic e Michael Juntao Yuan sobre Memory Leaks, porém ao fazer a configuração adicional para utilizar o inventoryReport tive o seguinte erro:

12:06:35,596 ERROR [[HtmlAdaptor]] Servlet.service() for servlet HtmlAdaptor threw exception
javax.management.RuntimeErrorException
at org.jboss.mx.interceptor.ReflectedDispatcher.handleInvocationExceptions(ReflectedDispatcher.java:178)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:163)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
.
.
.
Caused by: java.lang.UnsatisfiedLinkError: notifyInventory


Para corrigi-lo, basta rodar os scripts de compilação para regerar os arquivos libjbossAgent.so e libjbossInspector.so e coloca-los em seu $LD_LIBRARY_PATH.

Artigo sobre Memory Leaks:
http://developer.redhatmagazine.com/2006/09/18/use-jboss-profiler-to-detect-memory-leaks/

Outros links úteis:
http://www.jboss.org/wiki/Wiki.jsp?page=JBossProfiler
http://wiki.jboss.org/wiki/Wiki.jsp?page=HowToConfigureJBossProfiler
http://weblogs.java.net/blog/edgars/archive/2007/06/looking_as_deep.html
http://www.jboss.org/?module=bb&op=viewtopic&t=102793
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4009745#4009745

segunda-feira, 14 de janeiro de 2008

Caracteres Chineses no Red Hat (ctrl + space)

Ctrl + space é uma das combinações mais importantes em IDEs Java (autoclomplete), porém a partir da versão 3 do Red Hat EL o ctrl + space ativa um esquema de caracteres não-ocidentais (Chinês Tradicional e Simplificado). Isto é disponibilizado pelo scim, e a forma mais fácil de desativar isso é desinstalando-o (a não ser que você precise de caracteres em Chinês).

Para desisntala-lo basta digitar em linha de comando: yum remove scim e desinstalar todas as suas dependências.

terça-feira, 8 de janeiro de 2008

compilerTargetVM compilerSourceVM source level 5

Caso queira utilizar recursos referentes à versão 5.0 da vm no JBoss em JSPs basta alterar o arquivo /jboss-web.deployer/conf/web.xml adicionando 2 parâmetros:

- compilerTargetVM = 1.5
- compilerSourceVM = 1.5

para o servlet org.apache.jasper.servlet.JspServlet

compilerTargetVM Compiler target VM
default is System.properties
java.specification.version > 1.4
[1.5] else [1.4]

compilerSourceVM Compiler source VM
default is System.properties
java.specification.version > 1.4
[1.5] else [1.4]

Syntax error, parameterized types are only available if source level is 5.0

segunda-feira, 7 de janeiro de 2008

Lendo propriedades de arquivo no JMeter

Praticamente todo mundo já leu alguma coisa sobre JMeter, ou já viu alguma apresentação em um dos vários eventos Java no país, ou até mesmo já colocou a mão na massa para realizar algum teste de stress com esta ferramenta. De fato, é muito simples realizar um teste de stress básico com JMeter, até mesmo em sistemas web.

Porém, o JMeter possui muitas características para incrementar seus testes de stress e deixá-los muito poderosos, como testes distribuídos, variáveis e funções, beanshell, etc...

Neste post irei mostrar como ler propriedades de um arquivo texto utilizando o componente CSV Data Set Config (element -> config).

Declarando as propriedades

O config CSV Data Set Config é atualmente a forma mais simples de ler propriedades de um arquivo, para isso, basta criar um arquivo texto com valores separados por vírgula.

Exemplo:
a1, b1, c1

Adicione o CSV Data Set Config em sua Thread Group configurando as propriedades da seguinte forma:



Filename: path do arquivo texto, ex: "../teste.txt" (os paths relativos são resolvidos a partir com o path do test plan ativo, também pode-se utilizar path absoluto)
Variable names: "a,b,c" (este será o nome das propriedades utilizadas para acessar os valores)
Delimiter (use '\t' for tab): ","

Exibindo propriedades

A partir da versão 2.3.1 foi adicionado o componente Debug Sampler o qual lista diversas coisas, entre elas, os valores das variáveis do arquivo.

Adicione o Debug Sampler em seu Thread Group (sampler -> debug sampler), e adicioner também um View Results Tree. O Debug Sampler irá trabalhar em conjunto com o View Results Tree, exibindo separadamente os valores referentes a cada request.

Abaixo está o resultado de um teste simples com leitura de propriedades de um arquivo.


Links relacionados
http://jakarta.apache.org/jmeter/usermanual/component_reference.html#CSV_Data_Set_Config
http://jakarta.apache.org/jmeter/usermanual/functions.html
http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Debug_Sampler