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.
]]>[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.
]]>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.
]]>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.
]]>
O 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á!
]]>[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.
]]>[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]
[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]
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.
]]>