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.
JEE – Thiago Galbiatti Vespa https://thiagovespa.com.br/blog Precisando é só avisar! Mon, 27 Oct 2025 01:37:15 +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 JEE – Thiago Galbiatti Vespa https://thiagovespa.com.br/blog 32 32 Threads no escopo JEE https://thiagovespa.com.br/blog/2015/06/30/threads-no-escopo-jee/ https://thiagovespa.com.br/blog/2015/06/30/threads-no-escopo-jee/#comments Tue, 30 Jun 2015 17:30:44 +0000 http://www.thiagovespa.com.br/blog/?p=4162 Continue lendo Threads no escopo JEE→]]> Quando eu entrevisto alguém pra uma vaga de emprego, eu sempre pergunto se podemos utilizar threads em escopo JEE. Já recebi várias, resposta, algumas preocupantes, outras espertas. Resolvi fazer um post para esclarecer essa questão.

A própria documentação da Oracle deixa claro que a função do gerenciamento de threads é do próprio container. A especificação diz que é proibido o uso de threads.

The enterprise bean must not attempt to manage threads. The enterprise bean must not attempt to start, stop, suspend, or resume a thread, or to change a thread’s priority or name. The enterprise bean must not attempt to manage thread groups.

Permitir que a aplicação faça o controle de threads irá interferir no controle do ciclo de vida dos componentes do container. Então estamos proibidos de usar threads diretamente na aplicação (elas existem, mas controladas pelo container). O uso direto delas implicaria na violação e perda dos recursos fornecidos pelo container: segurança, clustering, controle de transação e afins.

Mesmo o controle sendo feito no container, podemos utilizar as vantagens que as threads oferecem sem comprometer a integridade do container. Na maioria dos casos, conhecer os componentes possíveis da arquitetura é suficiente para não utilizar threads diretamente. Por exemplo, um envio de e-mail em lote pode ser desenvolvido com uma fila JMS em conjunto com um MDB. Um agendamento, pode ser feito utilizando Quartz ou um Timer Service.

Além das threads, se você leu as referências acima, irá ver que não podemos nem gravar arquivos dentro do container, pois você perderia o controle da concorrência, em ambientes clusterizados você teria problemas com arquivos que não são distribuídos em várias máquinas, operações com arquivos também não são transacionais e teria problemas com segurança. Caso deseja realmente fazer isso, você terá que desenvolver esse controle manualmente, como um sistema de arquivo distribuido entre os nós do cluster, controle de transação manual como um arquivo de lock, um controle de concorrência para garantir que um arquivo seja lido ou escrito por vez, eliminando a concorrência entre os clusters e um mecanismo de detecção ou compensação de erro ou rollback em caso de falhas entre as operações utilizando arquivos. O que não é uma tarefa fácil, mas às vezes se faz necessário.

Há casos específicos que existe a necessidade de uso threads, mas devemos fazer isso sem comprometer o container, para isso há soluções como a JSR 236, que é a api de utilitários de concorrência (vulgo, usar thread do jeito certo) e se tornou padrão na especificação do JEE 7. Há uma boa referência do uso aqui e aqui.

Resumindo: Evite o uso de threads em escopo JEE, caso você identifique a necessidade, verifique se algum componente padrão resolve o seu problema, caso contrário, utilze APIs adequadas para usar threads sem comprometer os recursos fornecidos pelo JEE.

]]>
https://thiagovespa.com.br/blog/2015/06/30/threads-no-escopo-jee/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
As 5 causas e o The Developers Conference 2013 – São Paulo https://thiagovespa.com.br/blog/2013/06/24/as-5-causas-e-o-the-developers-conference-2013-sao-paulo/ https://thiagovespa.com.br/blog/2013/06/24/as-5-causas-e-o-the-developers-conference-2013-sao-paulo/#comments Mon, 24 Jun 2013 12:01:22 +0000 http://www.thiagovespa.com.br/blog/?p=3956 Continue lendo As 5 causas e o The Developers Conference 2013 – São Paulo→]]> Você que pensa em melhorar o Brasil, seja protestando ou de sua própria maneira, venha para o The Developers Conference 2013 em São Paulo. Lá você poderá ter ideias de como fazer aplicações que possam ajudar a mudar o Brasil. Troque informações com alguns dos melhores profissionais do Brasil, veja como você pode melhorar a economia do país ou ter algumas ideias de como contribuir com a diminuição da corrupção. Segue algumas ideias:

The Developers Conference

Eu estarei por lá, principalmente no dia 11, onde teremos uma trilha de TV Digital. Compareça!

]]>
https://thiagovespa.com.br/blog/2013/06/24/as-5-causas-e-o-the-developers-conference-2013-sao-paulo/feed/ 11
Spring no SOA Suite https://thiagovespa.com.br/blog/2013/01/23/spring-no-soa-suite/ https://thiagovespa.com.br/blog/2013/01/23/spring-no-soa-suite/#comments Wed, 23 Jan 2013 19:43:45 +0000 http://www.thiagovespa.com.br/blog/?p=3806 Continue lendo Spring no SOA Suite→]]> O componente de Spring Context permite que você execute código Java dentro de uma aplicação SOA Suite de maneira mais robusta que o Java Embedding do BPEL.

Crie uma aplicação SOA Suite e no composite.xml, arraste o componente Spring Context (Component Pallete) para a raia do meio.

Create Spring
Create Spring

Clique em OK. Você deverá ter um componente com um folhinha verde no meio do composite. O próximo passo é criar uma interface e uma classe para ser utilizada com o Spring Context. Clique em File, New, Java Interface e clique em OK. Dê um nome, no meu exemplo vou dar o nome de OlaSpring. Clique em OK. Insira o seguinte conteúdo:

]]>
https://thiagovespa.com.br/blog/2013/01/23/spring-no-soa-suite/feed/ 3
Visualizando a árvore JNDI no JBoss 7.1 https://thiagovespa.com.br/blog/2013/01/15/visualizando-a-arvore-jndi-no-jboss-7-1/ https://thiagovespa.com.br/blog/2013/01/15/visualizando-a-arvore-jndi-no-jboss-7-1/#respond Tue, 15 Jan 2013 20:00:13 +0000 http://www.thiagovespa.com.br/blog/?p=3794 Continue lendo Visualizando a árvore JNDI no JBoss 7.1→]]> Em posts anteriores a gente viu como exibir a árvore JNDI no WebLogic. Agora chegou a vez do JBoss.

Para visualizar a árvore JNDI no JBoss 7.1, acesse o console administrativo, escolha a opção Profile no canto superior direito:

Profile Menu
Profile Menu

No menu lateral, escolha a opção Container, Naming:

Menu Lateral
Menu Lateral

Irá abrir uma tela escrita JNDI View. Agora é só navegar na árvore JNDI.

]]>
https://thiagovespa.com.br/blog/2013/01/15/visualizando-a-arvore-jndi-no-jboss-7-1/feed/ 0
Gerenciando o servidor com Server MBean e JMX https://thiagovespa.com.br/blog/2012/12/17/gerenciando-o-servidor-com-server-mbean-e-jmx/ https://thiagovespa.com.br/blog/2012/12/17/gerenciando-o-servidor-com-server-mbean-e-jmx/#comments Mon, 17 Dec 2012 21:51:32 +0000 http://www.thiagovespa.com.br/blog/?p=3695 Continue lendo Gerenciando o servidor com Server MBean e JMX→]]> O JMX é uma tecnologia que permite o gerenciamento de recursos como aplicações, dispositivos, serviços, etc. A maioria dos servidores de aplicações utiliza essa tecnologia que já vem por padrão no J2SE 5 e 6. O único problema é que é complicado realizar as operações. O primeiro passo é realizar um conexão com o servidor que possui os MBeans, criar uma interface, carregar um proxy e executar métodos por essa interface. O procedimento passo a passo, é descrito aqui ou nesse tutorial.

Resolvi encapsular o lógica de execução em uma classe, mas queria evitar de ter que implementar uma interface para cada MBean a ser utilizado. E esse pensamento resultou na seguinte classe:

]]>
https://thiagovespa.com.br/blog/2012/12/17/gerenciando-o-servidor-com-server-mbean-e-jmx/feed/ 2
JDBC de uma forma diferente: RowSet https://thiagovespa.com.br/blog/2012/06/26/jdbc-de-uma-forma-diferente-rowset/ https://thiagovespa.com.br/blog/2012/06/26/jdbc-de-uma-forma-diferente-rowset/#respond Tue, 26 Jun 2012 19:32:07 +0000 http://www.thiagovespa.com.br/blog/?p=2415 Continue lendo JDBC de uma forma diferente: RowSet→]]> O RowSet é uma classe que tem a função de adicionar o suporte ao padrão JavaBean ao JDBC.

Ao invés de realizarmos as operações desse jeito:

[sourcecode language=”java” highlight=”1,2,4,5,6″]
Connection conn = null;
Statement stmt = null;

try {
conn = DriverManager.getConnection("jdbc:oracle:thin:@//database:1521/orcl.localdomain", "thiago", "senha");

stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM CLIENTE");

while(rs.next()) {
ResultSetMetaData rsMetaData = rs.getMetaData();
int columnCount = rsMetaData.getColumnCount();
for(int colIdx = 0; colIdx<columnCount; colIdx++) {
System.out.print(rs.getObject(colIdx+1) + "|");
}
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
}
[/sourcecode]

Realizamos de uma maneira “mais JavaBean”:

[sourcecode language=”java” highlight=”1,2,4,5,6,7,8,9,10″]
RowSetFactory rowSetFactory = null;
JdbcRowSet jdbcRs = null;

try {
rowSetFactory = RowSetProvider.newFactory();

jdbcRs = rowSetFactory.createJdbcRowSet();

jdbcRs.setUrl("jdbc:oracle:thin:@//database:1521/orcl.localdomain");
jdbcRs.setUsername("thiago");
jdbcRs.setPassword("senha");

jdbcRs.setCommand("SELECT * FROM CLIENTE");
jdbcRs.execute();
while(jdbcRs.next()) {
ResultSetMetaData rsMetaData = jdbcRs.getMetaData();
int columnCount = rsMetaData.getColumnCount();
for(int colIdx = 0; colIdx<columnCount; colIdx++) {
System.out.print(jdbcRs.getObject(colIdx+1) + "|");
}
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
}
[/sourcecode]

]]>
https://thiagovespa.com.br/blog/2012/06/26/jdbc-de-uma-forma-diferente-rowset/feed/ 0
Referência URLs WebCenter https://thiagovespa.com.br/blog/2012/06/21/referencia-urls-webcenter/ https://thiagovespa.com.br/blog/2012/06/21/referencia-urls-webcenter/#respond Thu, 21 Jun 2012 15:07:07 +0000 http://www.thiagovespa.com.br/blog/?p=2399 Continue lendo Referência URLs WebCenter→]]> Aqui tem uma descrição de algumas URLs e conexões utilizadas na instalação padrão.

Porta dos servers

  • Oracle WebCenter Spaces – WC_Spaces – 8888
  • Oracle WebCenter Discussions Server – WC_Collaboration – 8890
  • Oracle Portlet Producers – WC_Portlet – 8889
  • Oracle WebCenter Pagelet Producer – WC_Portlet – 8889
  • Oracle WebCenter Activity Graph Engines – WC_Utilities – 8891
  • Oracle WebCenter Personalization – WC_Utilities – 8891
  • Oracle WebCenter Analytics Collector – WC_Utilities – 8891

Conexões default criadas

  • Discussions and Announcements services – WebCenterSpaces-Discussions
  • Documents service – WebCenterSpaces-ucm
  • Pagelet producer – WebCenterSpaces-PageletProducer
  • Preconfigured portlet producers – wc-OmniPortlet, wc-WebClipping, wc-WSRPTools
  • Worklist service and WebCenter Spaces workflows – WebCenterSpaces-Worklist

URL das aplicações

  • Oracle WebCenter Spaces – http://host:8888/webcenter
  • Oracle WebCenter Discussions – http://host:8890/owc_discussions
  • OmniPortlet, Web Clipping portlets – http://host:8889/portalTools
  • WSRP Tools – http://host:8889/wsrp-tools
  • WebCenter Pagelet Producer – http://host:8889
  • Pagelet Producer Console – http://host:8889/pageletadmin
  • Activity Graph Engines – http://host:8891/activitygraph-engines
  • Personalization Server’s Property Service – http://host:8891/wcps/api/property/resourceIndex
  • Personalization Server’s Conductor – http://host:8891/wcps/api/conductor/resourceIndex

URL do WebCenter Spaces

  • User Profile: http://host:8888/webcenter/spaces/profile/userName
  • My Profile: http://host:8888/webcenter/spaces/profile
  • User Profile (Dentro de um space): http://host:8888/webcenter/spaces/spaceName/profile/userName
  • My Profile (Dentro de um space): http://host:8888/webcenter/spaces/spaceName/profile
  • Home Space: http://host:8888/webcenter/spaces/home
  • Página dentro do Home Space: http://host:8888/webcenter/spaces/page/escapedPageDisplayName
  • Última página acessada dentro do Space: http://host:8888/webcenter/spaces/SpaceName
  • Página inicial do Space: http://host:8888/webcenter/spaces/SpaceName/home
  • Página específica dentro do Space: http://host:8888/webcenter/spaces/SpaceName/page/escapedPageDisplayName
  • Space Settings: http://host:8888/webcenter/spaces/spaceName/admin
  • Administrativo de Roles do Space: http://host:8888/webcenter/spaces/spaceName/admin/roles
  • Adminsitrativo de Membros do Space: http://host:8888/webcenter/spaces/spaceName/admin/members
  • Páginas disponíveis do Space: http://host:8888/webcenter/spaces/spaceName/admin/spacepages
  • Páginas de sistema do Space: http://host:8888/webcenter/spaces/spaceName/admin/systempages
  • Páginas de serviços do Space: http://host:8888/webcenter/spaces/spaceName/admin/services
  • Administrativo de SubSpaces: http://host:8888/webcenter/spaces/spaceName/admin/subspaces
  • Atributos personalizados do Space: http://host:8888/webcenter/spaces/spaceName/admin/attributes
  • Administrativo de Recursos: http://host:8888/webcenter/spaces/spaceName/admin/resources

URL do WebCenter Spaces – Admin

  • Página administativa: http://host:8888/webcenter/spaces/admin
  • Aba General: http://host:8888/webcenter/spaces/admin/general
  • Spaces: http://host:8888/webcenter/spaces/admin/spaces
  • Space templates: http://host:8888/webcenter/spaces/admin/templates
  • Roles – Segurança: http://host:8888/webcenter/spaces/admin/roles
  • Usuários e grupos – Segurança: http://host:8888/webcenter/spaces/admin/users
  • Recursos: http://host:8888/webcenter/spaces/admin/resources
  • Serviços: http://host:8888/webcenter/spaces/admin/services
  • Business role pages: http://host:8888/webcenter/spaces/admin/brpages
  • Páginas pessoais: http://host:8888/webcenter/spaces/admin/personalpages
  • Páginas de sistema: http://host:8888/webcenter/spaces/admin/systempages

]]>
https://thiagovespa.com.br/blog/2012/06/21/referencia-urls-webcenter/feed/ 0
Telnet via WebService https://thiagovespa.com.br/blog/2012/04/09/telnet-via-webservice/ https://thiagovespa.com.br/blog/2012/04/09/telnet-via-webservice/#comments Mon, 09 Apr 2012 15:43:53 +0000 http://www.thiagovespa.com.br/blog/?p=2257 Continue lendo Telnet via WebService→]]> Em vários projetos, é necessário integração com legado (sistema antigo que o cliente não quer migrar). E em alguns casos específicos essa integração pode ser um pouco mais complicada do que leitura de arquivos textos, troca de informações em base e afins. Nesse post eu irei explicar como criar um Web Service que faz a autenticação em um servidor Telnet e executa comandos nesse servidor. Essa é mais uma maneira (não tão convencional) de se realizar integração com legado.

Como client de Telnet, iremos utilizar a biblioteca Commons Net da Apache. Faça o download nesse site, descompacte-a e localize o jar da biblioteca. Crie um projeto e adicione as duas libs (jars) no classpath (build path no Eclipse e libraries no JDeveloper e Netbeans). Crie um WebService (JAX-WS) conforme o exemplo abaixo:

]]>
https://thiagovespa.com.br/blog/2012/04/09/telnet-via-webservice/feed/ 2
Visualizando a árvore JNDI no WebLogic Server https://thiagovespa.com.br/blog/2012/04/01/visualizando-a-arvore-jndi-no-weblogic-server/ https://thiagovespa.com.br/blog/2012/04/01/visualizando-a-arvore-jndi-no-weblogic-server/#comments Sun, 01 Apr 2012 20:36:32 +0000 http://www.thiagovespa.com.br/blog/?p=2261 Continue lendo Visualizando a árvore JNDI no WebLogic Server→]]> Em alguns casos você precisa ver se o objeto que você está recuperando foi publicado no JNDI ou é necessário procurar por objetos na árvore JNDI. Por exemplo, verificar se o JNDI de um Data Source criado está disponível no servidor (pode não estar por um target errado) ou verificar o caminho para recuperar um destination de um módulo JMS, entre outros.

Para visualizar a estrutura JNDI do WebLogic. Acesse o console (http://IP:PORTA/console) vá em Environment, Servers, selecione o servidor desejado e clique em View JNDI Tree. Está meio escondido, mas pela imagem abaixo fica mais fácil achar:

View JNDI Tree
View JNDI Tree

Irá abrir uma nova janela onde você visualizar toda estrutura JNDI do server selecionado.

]]>
https://thiagovespa.com.br/blog/2012/04/01/visualizando-a-arvore-jndi-no-weblogic-server/feed/ 1