Arquivo Histórico de Thiago Vespa
Este site foi preservado para fins históricos e de referência. Alguns conteúdos podem estar desatualizados e recursos interativos foram desativados. Visite o site atual.
Oracle – Thiago Galbiatti Vespa https://thiagovespa.com.br/blog Precisando é só avisar! Mon, 27 Oct 2025 01:32:48 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.8.5 https://thiagovespa.com.br/blog/wp-content/uploads/2023/05/cropped-eu3-32x32.png Oracle – Thiago Galbiatti Vespa https://thiagovespa.com.br/blog 32 32 Habilitar System.out e System.err no log do WebLogic https://thiagovespa.com.br/blog/2019/05/20/habilitar-system-out-e-system-err-no-log-do-weblogic/ https://thiagovespa.com.br/blog/2019/05/20/habilitar-system-out-e-system-err-no-log-do-weblogic/#respond Mon, 20 May 2019 18:41:22 +0000 http://thiagovespa.com.br/blog/?p=4415 Continue lendo Habilitar System.out e System.err no log do WebLogic→]]> Embora seja uma má prática utilizar o System.out e System.err para depuração e habilitá-lo no log. Em alguns casos, é preciso. Não entrarei nos méritos quando isso é necessário, mas se você está acessando essa página, já deve saber.

Para habilitar, acesse o WebLogic console. Vá em Environment, Server e escolha o server no qual você deseja habilitar o System.out e System.err no log. Acesse a aba Logging, General e Advanced.

Selecione os dois combos onde diz para redirecionar o stdout e stderr para o log.

Pronto! Só não faça isso em ambiente de produção.

]]>
https://thiagovespa.com.br/blog/2019/05/20/habilitar-system-out-e-system-err-no-log-do-weblogic/feed/ 0
Maneiras de medir o tempo em Java sem bibliotecas externas https://thiagovespa.com.br/blog/2015/09/29/maneiras-de-medir-o-tempo-em-java-sem-bibliotecas-externas/ https://thiagovespa.com.br/blog/2015/09/29/maneiras-de-medir-o-tempo-em-java-sem-bibliotecas-externas/#comments Tue, 29 Sep 2015 20:53:22 +0000 http://www.thiagovespa.com.br/blog/?p=4189 Continue lendo Maneiras de medir o tempo em Java sem bibliotecas externas→]]> Em Java, existem algumas formas de medir o tempo de execução de um trecho do código sem o uso de bibliotecas externas ou ferramentas de profiling. O jeito mais convencional é utilizar o System.currentTimeMillis():

[sourcecode language=”java”] long startTime = System.currentTimeMillis();
metodoDemorado();
long totalTime = System.currentTimeMillis() – startTime;[/sourcecode]

Pode-se substituir o currentTimeMillis() por nanoTime(). A diferença dos dois está que o currentTimeMillis utiliza o relógio da máquina para pegar a quantidade de millisegundos desde às 00hs do dia 01 de Janeiro de 1970 UTC até o momento atual. Já o nanoTime() não é baseado em relógio e usa o timer mais preciso que exista na máquina e por isso só pode ser utilizado para medida de tempo de execução e não relacionado com o relógio da máquina.

[sourcecode language=”java”] long startTime = System.nanoTime();
metodoDemorado();
long totalTime = System.nanoTime() – startTime;[/sourcecode]

Maiores informações nesse link.

Agora o mais legal que eu estou utilizando atualmente é a nova API (java.time) do Java 8, principalmente as classes Instant e Duration. O código é mais legível e tem mais funcionalidade para trabalhar com a duração (Duration) que é retornada entre um momento ou instante (Instant) e outro. Uma observação, o tempo não é tão preciso, normalmente é interessante quando precisão de segundos é suficiente.

[sourcecode language=”java”] Instant startTime = Instant.now();
metodoDemorado();
Instant endTime = Instant.now();
Duration totalTime = Duration.between(startTime, endTime);
[/sourcecode]

Agora, para quem vai trabalhar com bechmarking de várias threads e não o tempo que o sistema fica aguardando o método ser executado é interessante utilizar medidas como User Time e System Time. Para isso existe o ThreadMXBean que recupera dados direto da JVM, mas esse assunto é tópico para um outro post.

]]>
https://thiagovespa.com.br/blog/2015/09/29/maneiras-de-medir-o-tempo-em-java-sem-bibliotecas-externas/feed/ 2
Problema ao iniciar WebLogic https://thiagovespa.com.br/blog/2015/06/29/problema-ao-iniciar-weblogic/ https://thiagovespa.com.br/blog/2015/06/29/problema-ao-iniciar-weblogic/#comments Mon, 29 Jun 2015 22:27:54 +0000 http://www.thiagovespa.com.br/blog/?p=2145 Continue lendo Problema ao iniciar WebLogic→]]> Caso você tenha o seguinte problema ao inicializar o WebLogic:

oracle.core.ojdl.logging.LoggingConfigurationException: ODL-52049: cannot create instance of class ‘oracle.dfw.incident.IncidentDetectionLogFilter’: java.lang.ExceptionInInitializerError

….

WARNING: unable to register log dump; exception: java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
…

<Critical> <WebLogicServer> <BEA-000286> <Failed to invoke startup class “DMS-Startup”, java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager
java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager

Isso ocorre, pois há algum problema ao gravar na pasta temporária que por padrão é /var/tmp. Você pode alterar o padrão com o parâmetro “-Djava.io.tmpdir” ou limpe o /var/tmp com o comando rm -rf /var/tmp/*

Garanta que o diretório /var/tmp tenha permissão de leitura e escrita para o seu usuário.

Inicie o WebLogic novamente.

]]>
https://thiagovespa.com.br/blog/2015/06/29/problema-ao-iniciar-weblogic/feed/ 2
Extrair arquivos estáticos https://thiagovespa.com.br/blog/2014/07/18/extrair-arquivos-estaticos/ https://thiagovespa.com.br/blog/2014/07/18/extrair-arquivos-estaticos/#comments Fri, 18 Jul 2014 16:24:46 +0000 http://www.thiagovespa.com.br/blog/?p=4098 Continue lendo Extrair arquivos estáticos→]]> Para melhor o desempenho de aplicações é interessante colocarmos um servidor de conteúdo estático, como o Apache, para trabalhar com os conteúdos que não precisam ser dinâmicos, como imagens, folhas de estilos, javascripts e afins.

No Java normalmente esse conteúdo, quando empacotado fica dentro de arquivo WAR interno a um arquivo EAR. Para extrair esse conteúdo estático e disponibilizá-lo no apache, criei um pequeno script que automatiza essa tarefa:

[sourcecode language=”bash”]unzip <NOMEDOPACOTE>.ear -d tmp/ > /dev/null && unzip tmp/*.war `unzip -l tmp/*.war | grep  ‘.js$\|.jpg$\|.jpeg$\|.png$\|.gif$\|.htm$\|.html$\|.css$’ | awk ‘{print $4}’` -d static && rm -rf tmp[/sourcecode]

Se você utiliza somente o WAR sem o EAR, basta utilizar o seguinte script:

[sourcecode language=”bash”]unzip <NOMEDOPACOTE>.war `unzip -l tmp/*.war | grep  ‘.js$\|.jpg$\|.jpeg$\|.png$\|.gif$\|.htm$\|.html$\|.css$’ | awk ‘{print $4}’` -d static[/sourcecode]

Esse script irá criar uma pasta static com todo o conteúdo a ser mapeado no Apache. Com isso, o seu servidor de aplicações ficará mais leve, com menos requisições e o trabalho de disponibilizar os conteúdos estáticos fica a cargo do Apache, que realiza essa atividade com muita eficiência.

]]>
https://thiagovespa.com.br/blog/2014/07/18/extrair-arquivos-estaticos/feed/ 3
The Developers Conference 2014 https://thiagovespa.com.br/blog/2014/07/17/the-developers-conference-2014/ https://thiagovespa.com.br/blog/2014/07/17/the-developers-conference-2014/#comments Thu, 17 Jul 2014 22:26:08 +0000 http://www.thiagovespa.com.br/blog/?p=4086 Continue lendo The Developers Conference 2014→]]> Agora no começo de agosto terá um evento muito bacana no qual participo da coordenação: o The Developers Conference 2014. Esse evento eu já participo há alguns anos, muito bem organizado e com bastante conteúdo. Hoje mesmo fui com uma camiseta do evento de 2011 no trabalho.

TDC2011O TDC 2014 – São Paulo será realizado de 5 a 9 de agosto e terá 36 trilhas (TV Digital, Android, Startups, Java, Arquitetura, etc) no Anhembi Morumbi e,  como novidade, vários workshops na sede da Globalcode, inclusive de Raspberry PI e IoT com o Vinicius Senger.

A trilha de TV digital está bem bacana e está sendo coordenada por um grande amigo meu, o Carlos do Java Noroeste e por mim. Vamos ter palestras com aplicativos da Record, TQTVD, TV Aparecida, especialistas renomados na área de TV digital no Brasil e pela comunidade de desenvolvedores.

Para participar é só fazer a inscrição no site. Simultaneamente, vai ter um outro evento legal que é o TDC4Kids para crianças programarem com Scratch, Minecraft e IoT. Para ter uma ideia do porte do evento, essa é a lista de alguns patrocinadores: Amazon, Oracle, Stackoverflow, SAP, PayPal, Google, StackOverflow, JetBrains e Liferay.

A gente se fala lá!

TDC - Comunidade

]]>
https://thiagovespa.com.br/blog/2014/07/17/the-developers-conference-2014/feed/ 1
Bug de atributos duplicados no WebCenter Sites https://thiagovespa.com.br/blog/2013/11/25/bug-de-atributos-duplicados-no-webcenter-sites/ https://thiagovespa.com.br/blog/2013/11/25/bug-de-atributos-duplicados-no-webcenter-sites/#comments Mon, 25 Nov 2013 12:06:02 +0000 http://www.thiagovespa.com.br/blog/?p=4031 Continue lendo Bug de atributos duplicados no WebCenter Sites→]]> Esse bug foi verificado na versão 11.1.1.6 do WebCenter Sites. Ao tentar publicar os assets de um site para outro. Obtivemos a seguinte info no site de origem:

[INFO ] [.kernel.Default (self-tuning)’] [logging.cs.xcelerate.publish] FAILED RealTime publish session 1384983575134
[INFO ] [.kernel.Default (self-tuning)’] [fatwire.logging.cs.xml] Publish failed for approved assets (error number: -508).

E o seguinte erro no site de destino:

[ERROR] [pool-66-thread-2] [cs.core.db.DBTransaction] TransactionUnit failed to execute
com.fatwire.cs.core.db.TransactionAbortException: com.fatwire.cs.core.realtime.DataException: Asset save failed for Page:1384260565491,1384260565484,1384260565442,1384260565465,1384260565472,1384260565449,1384260565434,1384260565451,1384260565436,1384260565457,1384260565503,1384260565459, Error saving an asset Asset.SaveAll : Attempting to set more than one value for a single-valued attribute ‘PageAttribute:Content’com.openmarket.basic.interfaces.AssetException: Attempting to set more than one value for a single-valued attribute ‘PageAttribute:Content’

O estranho é que por algum motivo o atributo content da página ficou duplicado (creio que seja por forçar a publicação de conteúdo por servidores diferentes, mas não tenho certeza). Para verificar, ao acessar o conteúdo, aparecem dois ou mais campos de texto para o atributo Content.

A solução é simples. mas trabalhosa: acessar conteúdo por conteúdo, realizar uma alteração no campo duplicado e salvar. Ele remove automaticamente o atributo duplicado. O mesmo já ocorreu para outros atributos da página.

]]>
https://thiagovespa.com.br/blog/2013/11/25/bug-de-atributos-duplicados-no-webcenter-sites/feed/ 1
Instalação WebCenter Sites no WebLogic https://thiagovespa.com.br/blog/2013/11/21/instalacao-webcenter-sites-no-weblogic/ https://thiagovespa.com.br/blog/2013/11/21/instalacao-webcenter-sites-no-weblogic/#comments Thu, 21 Nov 2013 02:27:02 +0000 http://www.thiagovespa.com.br/blog/?p=4016 Continue lendo Instalação WebCenter Sites no WebLogic→]]> Para instalar o WebCenter Sites, com as configurações que eu recomendo (Linux, Base Oracle, WebLogic e Apache), siga os seguintes passos (caso tenha alguma dúvida, envie nos comentários):
  • Crie um banco de dados ou utilize um existente
  • Crie um usuário para o WebCenter Sites com os seguintes privilégios de sistema:
    • CREATE SESSION
    • CREATE TABLE
    • CREATE VIEW
    • UNLIMITED TABLESPACE
  • Instale o WebLogic Server (instalação padrão)
  • Crie um novo domínio (criação padrão)
    • Na tela “Select Optional Configuration”, selecione todas os checkboxes. Clique em Next
    • Altere o nome do servidor e a porta, para o desejável e clique em Nexto.
    • Para ambiente de produção, adicione pelo menos um managed server e clique em Next.
    • Se você não está criando um cluster, clique em Next, caso contrário configure.
    • Crie uma machine e clique em Next.
    • Associe os servidores à machine criada e clique em Next.
    • Siga a instalação até o fim.
  • Inicie o Admin Server
  • Em ambientes que não são de produção é interessante desabilitar a verificação de hostname
  • Para execução de operações via linha de comando, habilite o tunneling.
  • Reinicie o WebLogic
  • Edite o arquivo <DOMAIN>/bin/setDomainEnv.sh e aumente o Max PermGen para no mínimo 192MB se sua JVM não for o JRockit.
  • Edite o arquivo <DOMAIN>/bin/startWebLogic e adicione as seguintes variáveis (altere o conteúdo que está entre: < >, não se preocupe se você ainda não tem o caminho da instalação do cs e da aplicação do cs, isso poderá ser alterado posteriormente e não afeta a iniciliazação do WebLogic):

[sourcecode language=”bash”]JAVA_OPTIONS="-Djava.io.tmpdir= -Dfile.encoding=UTF-8 -Dnet.sf.ehcache.enableShutdownHook=true -Djava.net.preferIPv4Stack=true -Djava.library.path=<INSTALAÇÃO DO CS>/bin ${JAVA_OPTIONS}"

CLASSPATH="<INSTALAÇÃO DO CS>/bin:$CLASSPATH"

PRE_CLASSPATH="<APLICAÇÃO CS>/WEB-INF/lib/commons-lang-2.4.jar:$PRE_CLASSPATH"
[/sourcecode]

  • No console do WebLogic, adicione um novo datasource não XA (driver Thin) para o usuário configurado anteriormente.
  • Altere o pool
    • Selecione o datasource criado
    • Clique em Configuration, Connection Pool
    • Mude o Initial Capacity para 10 e o Maximum Capacity para 100 e clique em Save
  • Instale o Apache (opcional, mas recomendado para servir os conteúdos estáticos)
  • Verifique se o Apache tem o módulo correto: httpd -l | grep ‘mod_so’ (deve retorar mod_so.c, caso contrário, instale corretamente o apache habilitando o mod_so – –enable-module=so)
  • Copie o arquivo <WL_HOME>/wlserver_10.3/server/plugin/<SO>/<VERSAO>/mod_wl_22.so para a pasta <APACHE_HOME>/modules
  • Crie um arquivo wcs.conf dentro da pasta conf.d ou edite o arquivo httpd.conf e insira o seguinte (altere para os sua configuração se for cluster e edite o conteúdo entre < >):

[sourcecode]
LoadModule weblogic_module modules/mod_wl_22.so
<IfModule mod_weblogic.c>
WebLogicHost <IP>
WebLogicPort <PORTA>
</IfModule>
<Location /cs>
SetHandler weblogic-handler
</Location>
<Location /cas>
SetHandler weblogic-handler
</Location>
[/sourcecode]

  • Reinicie o apache
  • Faça o download do WebCenter Sites e descompacte-o
  • Execute o instalador csInstall.sh e clique em Next e Next
  • Especifique o caminho de instalação do sites e atualize o startWebLogic.sh (passo realizado antes) com esse caminho e clique em Next
  • Selecione Development ou Delivery. A diferença aqui é que o Delivery system não tem a opção de Contributor, é mais segura e evita que usuários alterem o conteúdo. Ou seja, é para ambiente de produção. Enquanto que o Development or Content Management system é utilizado para editar os assets e prepara o conteúdo para um Delivery system. Clique em Next.
  • Continue seguindo as telas e configurando de acordo com o seu ambiente até chegar na tela Installation Actions, logo após clicar no botão Install.
  • Inicie o Weblogic e o Managed Server.
  • Faça deploy do cs e cas que estão na pasta de deploy manual especificado na instalação com o target no managed.
  • Verifique esses arquivos: cas-cache.xml , cs-
    cache.xml , ss-cache.xml e linked-cache.xml que estão dentro da pasta <app cs>/WEB-INF/classes e esse arquivo: jbossTicketCacheReplicationConfig.xml dentro da pasta <instalação do cs>/bin e garanta que tenham endereços e portas sem conflito com outras e se for cluster, garanta que os clusters tenham os mesmos valores.
  • Clique em Test na tela da instalação.
  • Finalize a instalação.

]]>
https://thiagovespa.com.br/blog/2013/11/21/instalacao-webcenter-sites-no-weblogic/feed/ 2
Alterar a porta do Node Manager https://thiagovespa.com.br/blog/2013/11/20/alterar-a-porta-do-node-manager/ https://thiagovespa.com.br/blog/2013/11/20/alterar-a-porta-do-node-manager/#comments Wed, 20 Nov 2013 20:55:16 +0000 http://www.thiagovespa.com.br/blog/?p=4027 Para alterar a porta do Node Manager do WebLogic Server, acesse o arquivo: <WL_HOME>/wlserver_10.3/common/nodemanager/nodemanager.properties e mude o valor da variável ListenPort ]]> https://thiagovespa.com.br/blog/2013/11/20/alterar-a-porta-do-node-manager/feed/ 2 Habilitando Tunneling no WebLogic https://thiagovespa.com.br/blog/2013/11/20/habilitando-tunneling-no-weblogic/ https://thiagovespa.com.br/blog/2013/11/20/habilitando-tunneling-no-weblogic/#comments Wed, 20 Nov 2013 18:45:58 +0000 http://www.thiagovespa.com.br/blog/?p=4019 Continue lendo Habilitando Tunneling no WebLogic→]]> Para executar alguns comandos no WebLogic utilizando o weblogic.Deployer ou weblogic.Admin é necessário habilitar o tunneling. Para realizar essa atividade, realize os seguintes procedimentos:
  • Acesse o console e expanda Enviroment
  • Clique em Server e para cada server (incluindo o admin) realize os seguintes procedimentos:
    • Selecione o servidor
    • Clique em Protocols, General
    • Marque o checkbox Enable Tunneling e clique em Save.

]]>
https://thiagovespa.com.br/blog/2013/11/20/habilitando-tunneling-no-weblogic/feed/ 2
Criando Jar Cliente para o WebLogic https://thiagovespa.com.br/blog/2013/08/04/criando-jar-cliente-para-o-weblogic/ https://thiagovespa.com.br/blog/2013/08/04/criando-jar-cliente-para-o-weblogic/#comments Sun, 04 Aug 2013 13:50:36 +0000 http://www.thiagovespa.com.br/blog/?p=3994 Continue lendo Criando Jar Cliente para o WebLogic→]]> Para algumas aplicações clientes que você deseja utilizar o WebLogic como server é comum utilizar o arquivo weblogic.jar em seu projeto. O problema é que esse arquivo tem algumas restrições de licença, que inviabiliza a sua distribuição. Entretanto, existe um utilitário que cria bibliotecas clientes onde é possível distruibuir sua aplicação com o Jar gerado. Esse utilitário se encontra na instalação do WebLogic Server e é de fácil utilização.

Para criar o seu jar cliente, acesse  o diretório server/bin de onde está instalado o seu WebLogic Server e execute o seguinte comando:

[sourcecode language=”bash”]. ./setWLSEnv.sh[/sourcecode]

Observe que no comando existe um “ponto” sozinho. Esse comando que irá atualizar as suas variáveis de ambiente.

O próximo passo é executar o utilitário para criação do Jar. No diretório server/lib do WebLogic, digite o seguinte comando:

[sourcecode language=”bash”]java -jar wljarbuilder.jar -profile wlfullclient[/sourcecode]

Agora é só aguardar a geração do jar e ele estará disponível na mesma pasta com o nome: wlfullclient.jar.

]]>
https://thiagovespa.com.br/blog/2013/08/04/criando-jar-cliente-para-o-weblogic/feed/ 2