sexta-feira, 16 de dezembro de 2011

Primeiro post: um teste

Estou testando o novo blog!
Vamos ver se a inserção de script funciona.

Isso aí! Agora todos os posts que tiverem código fonte serão bonitos e bem formatados, graças às facilidades de compartilhamento via script do github:gist.
Pelo que vi é "só" muito melhor que o mecanismo lento e restrito do wordpress. Aqui posso até adicionar scripts no post, sem strip-tags. A interface de edição é fácil e rápida. Muito bom!
Vamos ver como é a inclusão de imagens.
Imagem RS

Beleza!
Acho que vou mudar pra cá. Aqui tenho a liberdade que preciso.
Portanto estou importando todos os posts interessantes para este provedor. Para isso, existe a aplicação wordpress2blogger que presta uma grande ajuda, e sabe fazer tudo direitinho.


Valeu!

Acessar parâmetros da JVM de dentro do programa

Existem alguams situação em que achamos que nunca cairemos. Ultimamente me ocorreu uma: precisei passar parâmetros para minha aplicação web, em sua inicialização, sem que os valores destes parâmetros ficassesm dentro do pacote ".war", e sem que fossem lidos de arquivo ou base de dados. Para isso foi adotada a estratégia de adicionar parâmetros na inicialização da JVM, e acessá-los a partir da aplicação.
A maior dúvida que tive foi, como acessar os parâmetros da JVM de dentro da aplicação.
Para isto a dica é simples: a classe RuntimeMXBean fornece o acesso a estes parâmetros.
Sua utilização é muito simples conforme a seguir:

RuntimeMXBean runtimemxBean = ManagementFactory.getRuntimeMXBean();
List arguments = runtimemxBean.getInputArguments();

Na lista "arguments" temos a lista de todos os parametros passados na inicialização da JVM junto com seus respectivos valores em cada linha. No meu caso, tive que passar parametros personalizados, que nao são da lista de parâmetros nativos da JVM. Fiz isto configurando o servidor de aplicação para adicionar aos parametros passados para a JVM a seguinte entrada:

-DismaelParametro="valor"

Com isto, na lista "arguments" procurei por uma linha que começasse com "-DismaelParametro" e lá estava!

Muito obrigado!


Referência:
RuntimeMXBean

terça-feira, 13 de dezembro de 2011

Manipulação de XSD no Eclipse

XML é um importante formato de marcação, utilizado para os mais diversos fins, e se tornou um padrão para troca de dados.
Neste post será vista a construção do XSD que é o elemento base para a composição do XML, pois é usado para efetuar sua validação. Para tanto, será utilizado o plugin XSD Editor da IDE Eclipse.
A seguir, um passo a passo, de como construir um XSD no eclipse:

Criar um diretorio META-INF dentro do diretorio src no projeto.

Clicar com o botão direito em cima do diretório e seguir: New->Other...->XML->XML Schema
Clicar em next e definir um nome para oa arquivo. Neste exemplo o nome é "pessoa.xsd".
Será aberto o editor XSD. Alterne entre as abas Design e Source para se ambientar. Iremos trabalhar na aba Design.
Iremos construir o objeto pessoa, que segue o seguinte esquema de atributos:
Pessoa
->nome
->endereco
-->>rua
-->>numero
-->>cidade
->telefones

Como percebemos dois atributos não são primitivos. É o caso de "endereco", que é um tipo composto e "telefones" que é uma lista. Precisamos definir estes tipos então.
Na seçao Types, na aba Design, clique com o botão direito e em Add Complex Type. Nomeie com endereço e clique duplo no item criado.
[caption id="attachment_142" align="aligncenter" width="640" caption="Adicionando Complex Type"]Adicionando Complex Type[/caption]

Na tela que se abre clique com o direito no quadro endereço e clique em add element, e nomeie o elemento criado como rua.
[caption id="attachment_143" align="aligncenter" width="640" caption="Adicionando item no tipo complexo"]Adicionando item no tipo complexo[/caption]

Repita o processo de forma a contemplar o esquema definido anteriormente. No esqueça de trocar o tipo do item numero para int.
[caption id="attachment_144" align="aligncenter" width="640" caption="Tipo complexo resultante"]Tipo complexo resultante[/caption]

Clique no botao superior, no XSD Editor, para voltar à tela principal.

Da mesma forma como ja criado, adicione um segundo complex type, chamado listaTelefones. Clique duplo no item criado. Clique com o direito no quadro listaTelefones, em seguida, Add Element.
Defina o nome do item como telefone, e na aba propriedades, defina os valores: Minimum Occurence=0 e Maximum Occurence=unbounded. Desta forma definimos uma lista com ocorrência minima de zero e sem limitação no número de itens.
[caption id="attachment_145" align="aligncenter" width="640" caption="Tipo Lista"]Tipo Lista[/caption]

Clique no botao superior, no XSD Editor, para voltar à tela principal.

Agora crie outro complex type chamado pessoaData. Clique duplo no item criado e adicione os atributos "nome", "endereco" e "telefones", conforme ja definido. Para selecionar o tipo do atributo "endereço", clique na caixa de seleção de tipo e selecione "Browse...".
[caption id="attachment_149" align="aligncenter" width="624" caption="Selecionando tipo complexo"]Selecionando tipo complexo[/caption]

Na caixa que se abre, selecione o tipo endereco e confirme. Logo após, repita o processo e selecione o tipo "listaTelefones" para o atributo "telefones".
[caption id="attachment_150" align="aligncenter" width="640" caption="Caixa de seleção de tipo complexo"]Caixa de seleção de tipo complexo[/caption]


O esquema de complex types deve ficar desta forma:
[caption id="attachment_148" align="aligncenter" width="640" caption="Esquema final"]Esquema final[/caption]

Clique no botao superior, no XSD Editor, para voltar à tela principal.

Na seção Elements, na aba Design, clique com o botão direito em Add Element, e defina o nome do elemento para "pessoa".
[caption id="attachment_146" align="aligncenter" width="640" caption="Adicionando Elemento raiz"]Adicionando Elemento raiz[/caption]

Clique duplo no elemento. No quadro pessoa, clique com o direito, em seguida Set Type->Browse...
Na caixa que aparece selecione o tipo pessoaData e clique em OK.
[caption id="attachment_151" align="aligncenter" width="640" caption="Seleção do tipo criado"]Seleção do tipo criado[/caption]


O esquema do elemento deve ficar desta forma.
[caption id="attachment_147" align="aligncenter" width="471" caption="Esquema do elemento"]Esquema do elemento[/caption]

Por fim, temos o documento XSD resultante de nossa configuração.
[caption id="attachment_155" align="aligncenter" width="640" caption="XSD Resultante"]XSD Resultante[/caption]

quarta-feira, 30 de novembro de 2011

Acessando SpringBeans no contexto do Servlet

Uma forma muito simples de se acessar SpringBeans a partir de um Servlet se dá adicionando dois trechos de código à sua aplicação.
Digamos que você tenha um SpringBean da classe "Pessoa" e você queira acessá-lo através de um Servlet. Então temos o seguinte código no ApplicationContext.xml.

<bean id="pessoaBean" class="com.wordpress.ifsantos.Pessoa"/>


Para possibilitar o acesso através do Servlet, primeiro, dentro do ApplicationContext.xml adicione a seguinte entrada:

<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<entry key="pessoaBean" value-ref="pessoaBean" />
</map>
</property>
</bean>

O código acima, adiciona o SpringBean "Pessoa" no mapa de atributos do contexto de Servlets, tornando-o acessível a partir de qualquer Servlet da aplicação.

Agora, dentro do Servlet, adicione o seguinte trecho de código:

Pessoa pessoaBean = (Pessoa) getServletContext().getAttribute("pessoaBean");


Pronto! O SpringBean "Pessoa" foi exportado para o contexto do Servlet e agora é possível acessá-lo sem problemas.

Gracias!

quarta-feira, 14 de setembro de 2011

Limpar password do Subclipse

Muito fácil! Muito simples! Quando você manipula o gerenciamento de versões via Eclipse, com o plugin Subclipse, tradicionalmente opta por salvar as credenciais do servidor SVN na sua máquina. Se precisar trocar o usuário, você se depara com uma feature (ou a inexistência dela). O fato é que, pela interface do Eclipse, o plugin não torna possível "zerar" suas credenciais de acesso ao servidor SVN. Para isto, é necessário executar os passos a seguir. Mas antes se deve verificar qual cliente SVN esta sendo usado pelo Subclipse (vá em Preferences > Team > SVN > SVN interface).

  • Usando Subclipse com JavaHL:

  • Existe um arquivo chamado "svn.simple". Nele se encontram o username e password utilizado. Basta apagar estas informações dentro do arquivo.
    Sistemas Unix-like:
    ~/.subversion/auth/svn.simple
    Windows 7:
    C:\Users\[usuario]\AppData\Roaming\Subversion\auth\svn.simple
    Windows XP:
    C:\Documents and Settings\[usuario]\Application Data\subversion\auth\svn.simple


  • Usando Subclipse com SVNKit:

  • DELETAR o arquvo no seguinte caminho:
    [eclipse_home]/configuration/org.eclipse.core.runtime/.keyring

    Thanks ;-)

    sexta-feira, 9 de setembro de 2011

    Escrita de arquivos em Java: FileWriter e FileOutputStream

    Em Java existem diferentes formas de se escrever dados em arquivos. Duas delas são através da utilização das classes FileWriter e FileOutputStream. Mas se exitem diferentes formas de escrita, qual é a diferença entre elas? FileOutputStream se destina à escrita fluxos de raw-bytes (bytes individuais que isoladamente não representam valores, e por sua vez, precisam ser agrupados para constituir informação), tais como dados de imagem, música ou arquivos executáveis, ao passo que, para escrever streams de caracteres, considere usar FileWriter.

    Abaixo, exemplos de utilização destas duas abordagens:
    FileOutputStream:

    FileWriter:

    No primeiro código, temos a escrita de 1024 bytes em um arquivo binário. No Segundo código, temos a escrita de 1024 caracteres em um arquivo texto. Caso o array de bytes do primeiro código, fosse escrito em disco, utilizando-se FileWriter do segundo código, o arquivo iria possuir valor diferente, em função da codificação de caracteres utilizada pelo FileWriter. Entretanto, se você tiver um array de caracteres, poderá utilizar o FileOutputStream porque este, ao efetuar a escrita, não re-codifica os bytes recebidos na entrada.

    Abraço,
    Até mais!

    Referências:
    FileOutputStream Javadoc
    FileWriter Javadoc

    quinta-feira, 11 de agosto de 2011

    Instalando dependências Maven manualmente

    Por questões de licença, as vezes não se tem acesso a pacotes de software através de repositórios Maven. Nestes casos torna-se necessário baixar e instalar manualmente estes pacotes, para se poder utilizá-los em projetos Maven. A seguir, um exemplo de como instalar um driver Oracle, que pelas quastões já mencioandas, não está em repositórios Maven.

    1. Coloque o arquivo "ojdbc5.jar" em um diretório vazio;

    2. Entre neste diretório através do prompt de comando;

    3. Informe o seguinte comando:


    mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc5 -Dversion=5.0 -Dpackaging=jar -Dfile=ojdbc5.jar -DgeneratePom=true

    Pronto! Agora esta dependência está disponível para ser utilizada no arquivo POM de sua aplicação, da seguinte forma:
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc5</artifactId>
        <version>5.0</version>
    </dependency>


    Thanks!

    quinta-feira, 4 de agosto de 2011

    Capturando mensagens SOAP de aplicações com JAX-WS

    Para saber o conteúdo das mensagenes SOAP que estão trafegando através de sua aplicação JAX-WS, existe uma forma fácil, que não exige modificações de código. A simples inclusão de um parâmetro na inicialização da JVM, ativa o Dumping das mensagens SOAP e as exibe no console. Este comnado funciona no Java 6.

    Inserir o seguinte parâmetro na JVM:
    -Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true

    @rememberNote: I need to improve this post soon. For now, the essence is here.

    Fonte:
    http://weblogs.java.net/blog/ramapulavarthi/archive/2006/08/monitoring_soap.html

    terça-feira, 2 de agosto de 2011

    Trocar a porta HTTP Oracle 10gXE

    Muitos se deparam com conflitos de portas ao utilizar o banco Oracle 10gXE e algum servidor como Apache Tomcat ou JBoss. Isto se deve pelo fato de a porta default do console de acesso do Oracle ser 8080, a mesma default dos servidores mencionados. Para resolver este conflito, é aplicavel a alternativa de alterar a porta default do console HTTP do Oracle. O comando a seguir, quando executado dentro do Oracle, efetua a troca das portas HTTP e FTP padrão. Como resultado tem-se a modificação da porta HTTP para 8180  e FTP para 2100.
    begin
    dbms_xdb.sethttpport('8180');
    dbms_xdb.setftpport('2100');
    end;

    quinta-feira, 2 de junho de 2011

    O poder do Hiperlink

    Então. Estou eu de volta. De volta, pois algo me moveu a escrever. Percebi, numa movimentação de internet, que fiz uma grande viagem que durou instantes mas que passou por muita coisa, graças ao hiperlink.


    Pois bem! Começo minha narrativa desta aventura assim: estava eu, no fim de noite, abrindo meu twitter para ver sobre o que meus amigos e ídolos tinham reportado ao longo do dia, quando passei por um tweet de uma ex-colega de escola que me chamou a atenção (por ser de um tema incomum em meio aos tweets da minha lista). Falava em Design. Resolvi conferir. Acessei o primeiro hiperlink. Com isto fui direcionado a uma tirinha em um site de design. Vi aquilo, não entendi muito por parecer ser piada interna, mas imaginei sobre o que poderia ser o assunto. Ok! Acessei o hiperlink que direcionava à home do site e lá estavam vários posts. Era um blog. Fui navegando por ali, dando uma última olhada, para nao ir embora sem saber em que site tinha entrado. Eu ja estava de saída. De repente me deparo com um video: "Sabe o que um designer faz?". Parei e dei voto de confiança. Um pouco pelo fato de o vídeo apresentar um visual legal, e eu ser muito vulnerável à coisas bonitas. Comecei a assistir. Um vídeo muito criativo. Bem feito, bem humorado e instrutivo, falava sobre como é o trabalho do designer. Mas além disso uma outra coisa me chamou a atenção: a narração do vídeo. Uma voz e um tom tão familiar, que eu me obriguei a assistí-lo até a parte dos créditos para saber o nome do locutor. Apareceu: Sérgio Moreno. A essas alturas eu já tinha detectado de onde eu conhecia aquela fala. Os desenhos do Mickey de quando eu era criança. Fui ao google, coloquei o nome do cara. Seguindo o mecanismo de busca fui ao hiperlink de uma entrevista. No decorrer da entrevista, falavam nomes de outros locutores, e no mesmo instante em que falavam, eu, pausava o vídeo, e ia ao youtube procurar pelo nome. Fiz isto (acho que) umas 3 vezes ao assistir. Interessante que enquanto eu estava no youtube, apareciam os hiperlinks relacionados e fui seduzido algumas vezes à explorar o que alguns traziam. Enfim, voltei ao site da entervista e acabei de ver o vídeo. Muito interessante. Falava sobre o universo da dublagem. Ao terminar, fiquei olhando para o site, e pensando: olha só que tanta volta eu dei por causa de um simples tweet. Eu já estava indo desligar o computador. Poisé! Então este momento me conduziu a mais um hiperlink, para agora para descarregar minha mente e fechar a noite: Wordpress.



    Sabe o que um designer faz?