Oi pessoal : )
Eu montei um ambiente com vários JBoss AS 7 em cluster, a replicação de sessão estava funcionando perfeitamente, porém, o user principal (usuário logado) não estava replicando para os outros nós do cluster.
Achei na documentação que para isso funcionar precisavam ser feitas mais alguns ajustes:
https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6.1/html/Development_Guide/Use_Single_Sign_On_SSO_In_A_Web_Application.html
mas seguindo a documentação não funcionou :(
os pré-requisitos são os mesmos.. existem apenas duas coisas erradas na documentação:
1) cache-container="web"
O script abaixo está errado:
/profile=ha/subsystem=web/virtual-server=default-host/sso=configuration:add(cache-container="web",cache-name="sso",reauthenticate="false",domain="domain.com")
o correto é:
/profile=ha/subsystem=web/virtual-server=default-host/sso=configuration:add(cache-container="web")
(Lembrando que você deve alterar o nome do perfil para o perfil que você está utilizando, e caso você esteja no standalone deve retirar o /profile=ha do comando)
2) Valve
Você não deve adicionar nenhum valve no seu jboss-web.xml pois a classe ClusteredSingleSignOn é instanciada automaticamente.
Pronto! Funcionou perfeitamente!
Fonte: https://community.jboss.org/message/825375#825375
Abraços!
Adriano Schmidt
terça-feira, 2 de julho de 2013
segunda-feira, 24 de junho de 2013
Caixa de ferramentas do arquiteto Java
Gosto de uma definição antiga que pode ser usada até hoje:

Eu tenho trabalhado como consultor em muitos clientes e tenho que tomar diversas decisões arquiteturais sobre tecnologias e ferramentas e também sobre ALM (Application Lifecycle Management). Estou fazendo este post para falar de algumas ferramentas que temos à nossa disposição e que devemos conhecer.
Vale lembrar que a escolha das tecnologias e ferramentas sempre depende de inúmeras variáveis, é necessário entender a aplicação, requisitos, objetivos e limitações para tomar a melhor decisão.
E ferramentas, na verdade, são úteis apenas com a definição de técnicas e de processos de forma adequada.
Enfim, vamos lá! Separei algumas ferramentas por tópicos:
Análise de requisitos, arquitetura e design
O mais importante na análise de requisitos são as técnicas utilizadas, conseguir obter o máximo de informações e detalhá-las conforme necessidade.Uma ferramenta bem robusta é o Enterprise Architect (EA), porém, gasta-se muito tempo para trabalhar com esta ferramenta.
Existe a possibilidade de trabalhar com arquivos de texto como o Word, porém, não são documentos vivos, uma ideia interessante é utilizar uma ferramenta de wiki, como o xwiki por exemplo. O Confluence da Atlassian é muito bom também para documentação e compartilhamento de conhecimentos.
É interessante o uso de ferramentas para criação de fluxos e diagramas como o Astah (antigo Jude) e o Bizagi.
Para criação de protótipos eu sempre utilizo o Balsamiq Mockups, ele é fantástico! Existem outras opções como o Axure, que é um mais robusto, mas o Balsamiq é mais simples e atente em quase todas as situações.
Gerenciamento de Projetos
O MS Project é ótimo para gerar e organizar cronogramas.O Jira (ou RedMine, que é basicamente uma versão free do Jira) é muito bom para gerenciar as atividades de um projeto. Você cadastra um projeto, coloca as atividades e o número de horas, delega para os responsáveis, e tem um visão bem clara de tudo que está acontecendo. Estas ferramentas também servem para registrar bugs, é possível visualizar quantos erros aconteceram, de qual tipo, tem diversos gráficos e formas de visualização. Você também pode criar um workflow com todos os passos e responsáveis para cada atividade. Caso você vá usar RedMine, sugiro a instalação do plugin Monitoramento e Controle para melhor visualização das atividades.
Se você for trabalhar com Agile o GreenHopper é uma ótima opção. O Trello é um software de kanban muito eficiente em que você pode organizar seus projetos, atribuir responsáveis, entre outras funcionalidades.
Se você precisa de um produto que seja integrado com a folha de pagamento, que gera relatórios para enviar aos clientes, você pode procurar sistemas próprios para isso, porém, talvez exista a necessidade de customização.
Criação de código (IDE)
Sou adepto da ideia que cada desenvolvedor deve ser livre para escolher sua IDE.Eu sempre trabalho com o Eclipse, ou com o JBoss Developer Studio (que é o Eclipse com diversos plugins da JBoss), mas caso o desenvolvedor queira usar NetBeans, ou alguma outra IDE (IntelliJ IDEA por exemplo), ou até mesmo um editor de textos qualquer ele deve poder! Para isso deve ser utilizado o Maven, que, entre outras coisas, organiza o projeto para que ele possa ser utilizado com qualquer IDE, ou sem nenhuma.
Repositório de fontes
Há muito tempo era utilizado o CVS, porém, com o surgimento do SVN ele não é mais recomendado.O SVN é simples de usar e muito eficiente e eficaz.
Caso você tenha uma equipe entusiasta por tecnologia e que abrace a ideia, é uma excelente ideia utilizar o GIT. Ele é mais complexo e mais difícil de aprender, no entanto, traz inúmeras vantagens.
Outra opção é o TFS para versionamento de fontes, mas acredito que ele é extremamente eficiente para projetos com tecnologias Microsoft, mas não para projetos Java, mesmo as versões mais novas do TFS.
Existe ainda o Mercurial, este eu não conheço muito, não conheço muitas empresas que o utilizam.
Existem diversos padrões, utilizados mundialmente, para versionamentos, criação de tags e branches, é de extrema importância definir este processo.
Build automation e Integração contínua
Recomendo a utilização do Jenkins, nele você pode rodar compilação automática, rodar scripts de testes, de validação de código e atualizar ambientes.O Jenkins é free e opensource, ele sempre me atendeu 100%. Outra opção é o Bamboo, da Atlassian.
Qualidade
Para garantir a qualidade, além dos testes manuais (abrir a tela e verificar se está funcionando) existem outras formas de manter a qualidade como validação de fontes, testes unitários e testes de interface.Estes testes e validações podem ser rodados automaticamente na integração contínua através do Maven, dessa forma você pode verificar a cada commit se algum teste parou de funcionar ou se alguma política de validação de fonte foi desreipeitada. Caso isso ocorra é enviado um e-mail para quem fez o commit e para os responsáveis pelo projeto.
Para validação de fontes recomendo a utilização de PMD e Checkstyle. Essas ferramentas verificam vários problemas no código. Existem plugins para o eclipse para utilização destas ferramentas. E elas também são rodadas via Maven (ou seja, independem de IDE). Para uma melhor visualização de tudo isso deve ser utilizado o Sonar, que oferece uma tela web para visualização de todos os problemas de código.
Para testes unitários o Arquillian é excelente! É interessante utilizar uma ferramenta que verifica quantas e quais linhas do seu fonte estão sendo cobertas pelos testes, para isso pode ser utilizado o Sonar ou o EclEmma ou o Atlassian Clover ou ainda alguma outra ferramenta.
Se o sistema for SAAS (ou se tiver uma grande preocupação com performance), é importante também escrever testes de desempenho utilizando ferramentas como JMeter, NewRelic, VisualVM, jConsole, entre outras.
Para testes de interface eu já utilizei o Visual Studio para projetos Java Web, achei muito bom, porém, a licença é cara. Quem conhece Java não terá dificuldade para trabalhar com ele, é utilizado C# para escrever os testes de tela. Uma opção free e bem semelhante às ferramentas de teste da Microsoft é o Selenium.
O ideal é estabelecer um processo de desenvolvimento onde sempre se escrevem testes automatizados e uma política de PMD e Checkstyle. Então para liberar uma versão, todos os testes automatizados devem rodar sem erros e a política estabelecida de PMD e Checkstyle deve ser atendida. Com certeza também é importante sempre fazer testes manuais, os próprios desenvolvedores podem testar o que outros desenvolvedores testaram, ou pode ser criada uma equipe de qualidade ou definir uma pessoa para ser tester.
Criação de Help On-line
Com um código bem documentado, é bacana a geração e publicação do JavaDoc. Através das ferramentas de validação de código é possível verificar se os códigos estão ou não documentados.Mas é possível criar um help on-line de outras formas também, o xwiki é uma opção bacana!
Para a criação de help por página sistema de forma automática talvez exista alguma ferramenta para isso. É possível criar um mecanismo de links, tive que fazer isso em um produto e criei eu mesmo uma estrutura de documentação seguindo alguns padrões que eu defini.
I18n
Pode-se utilizar arquivos de textos, que é a opção mais simples. Porém, já trabelhei salvando as traduções em um banco de dados, é possível trabalhar com cache para melhorar a performance e fica muito bom também. Existem outras estratégias para corrigir problemas de performance com traduções.Existe ainda a possibilidade de trabalhar com as traduções na Cloud, com a ferramenta transifex por exemplo.
Existem diversos padrões para serem seguidos com relação a tradução, para evitar problemas de formatos de campos, documentos, entre outras coisas.
Conclusão
Primeiro temos que definir ideias, definir o que queremos e o que é preciso de verdade. Após isso deve-se pensar em ferramentas para atender as necessidades.Temos à nossa disposição inúmeras ferramentas, mas temos que entender melhor cada situação para utilizarmos as ferramentas adequadas.
Um grande abraço!
Adriano Schmidt
sábado, 22 de junho de 2013
JSF 2.2
E aí pessoal..
Hoje estava em um cliente que tem uma aplicação com JSF 2.1 e EJB 3.1 rodando no JBoss AS 7.
Essa aplicação tem centenas de acessos simultâneos e estávamos com problemas de uso de memória e de performance.
Sei que JSF talvez não seja a tecnologia mais adequada para projetos como esse, mas não poderíamos mudar isso agora.
Nós migramos a aplicação de JSF 2.1 para JSF 2.2 e tivemos muitos ganhos! O consumo de memória diminuiu consideravelmente! O GC conseguiu rodar melhor e limpar o heap bem mais do que fazia no JSF 2.1! Não sei se foi apenas por consequência do melhor uso da memória, mas a performance aumentou muito também!
Tudo isso foi constatado pelos próprios usuários e também por testes com o JMeter e com análises utilizando o VisualVM.
Enfim, fica a dica pessoal, usem o JSF 2.2!
Para implantar ele no JBoss AS 7 foi bem tranquilo! Nós seguimos este tutorial: http://www.marcusschiesser.de/2013/01/how-to-use-jsf-2-2-with-jboss-7-1/
Só um porém.. alguns componentes na aplicação tinham update="@form" ou update="idDeUmForm" e isso parou de funcionar no JSF 2.2 :/
Não sei o motivo.. aqui eram poucos casos e resolvemos alterando o update para atualizar o componente que devia ser atualizado e não todo o form.
Ao invés de update="@form" usamos update="idDoComponenteDentroDoFormQueTinhaQueSerAtualizado" : )
Abraços!!
Adriano Schmidt
Hoje estava em um cliente que tem uma aplicação com JSF 2.1 e EJB 3.1 rodando no JBoss AS 7.
Essa aplicação tem centenas de acessos simultâneos e estávamos com problemas de uso de memória e de performance.
Sei que JSF talvez não seja a tecnologia mais adequada para projetos como esse, mas não poderíamos mudar isso agora.
Nós migramos a aplicação de JSF 2.1 para JSF 2.2 e tivemos muitos ganhos! O consumo de memória diminuiu consideravelmente! O GC conseguiu rodar melhor e limpar o heap bem mais do que fazia no JSF 2.1! Não sei se foi apenas por consequência do melhor uso da memória, mas a performance aumentou muito também!
Tudo isso foi constatado pelos próprios usuários e também por testes com o JMeter e com análises utilizando o VisualVM.
Enfim, fica a dica pessoal, usem o JSF 2.2!
Para implantar ele no JBoss AS 7 foi bem tranquilo! Nós seguimos este tutorial: http://www.marcusschiesser.de/2013/01/how-to-use-jsf-2-2-with-jboss-7-1/
Só um porém.. alguns componentes na aplicação tinham update="@form" ou update="idDeUmForm" e isso parou de funcionar no JSF 2.2 :/
Não sei o motivo.. aqui eram poucos casos e resolvemos alterando o update para atualizar o componente que devia ser atualizado e não todo o form.
Ao invés de update="@form" usamos update="idDoComponenteDentroDoFormQueTinhaQueSerAtualizado" : )
Abraços!!
Adriano Schmidt
sábado, 18 de maio de 2013
Certificação RHCJA - JBoss EAP 6
Olá pessoal!!
O Maurício Magnani (http://jbossdivers.wordpress.com/) está fazendo uma série de vídeo-aulas explicando tudo que cai na certificação RHCJA, eu estou assistindo todos os vídeos e fazendo um resumo de cada um para facilitar meus estudos.
Estou compartilhando aqui todas as minhas anotações de forma estruturada e de fácil entendimento para ajudar a todos que também queiram realizar esta certificação.
Recomendo assistirem todos os vídeos e depois estudarem por estes resumos para relembrar tudo o que foi visto.
Vamos lá!!
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte1
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte2
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte3
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte4
O Maurício Magnani (http://jbossdivers.wordpress.com/) está fazendo uma série de vídeo-aulas explicando tudo que cai na certificação RHCJA, eu estou assistindo todos os vídeos e fazendo um resumo de cada um para facilitar meus estudos.
Estou compartilhando aqui todas as minhas anotações de forma estruturada e de fácil entendimento para ajudar a todos que também queiram realizar esta certificação.
Recomendo assistirem todos os vídeos e depois estudarem por estes resumos para relembrar tudo o que foi visto.
Vamos lá!!
1) Introdução
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte1
- Explicações sobre a prova
- A prova é totalmente prática
- Dura 4 horas
- A única consulta que você pode fazer é a documentação do JBoss EAP. Saiba utilizá-la!
- Você irá trabalhar em um sistema operacional Red Hat Enterprise Linux® 6 durante o exame
- É importante ter um conhecimento básico de linux
- A prova abordará assuntos de diversos módulos, para cada módulo o Maurício fez um vídeo explicando tudo o que você precisa saber.
- A prova tem o valor aproximado de 400 dólares e, no Brasil, só pode ser feita em São Paulo.
2) Instalar o JBoss EAP em um local específico do sistema
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte2
- Basta pegar o pacote do JBoss EAP (o arquivo .zip) e movê-lo para um local específico do sistema (/opt ou /usr/exam por exemplo, o local será especificado na prova) e descompactá-lo.
- Na prova será dito onde está o jboss eap (por exemplo: /home/jboss/course-files/Versao Enterprise EAP 6\jboss-eap-6.0.1.zip) e será solicitado para instalá-lo em um local específico (/usr/local/jboss/exam por exemplo)
- Verifique se esse local existe:
- $cd /usr/local/jboss/exam
- Caso não exista, crie-o:
- $mkdir -p /usr/local/jboss/exam
- Naveque até o diretório:
- $cd /usr/local/jboss/exam
- Copie o jboss para este diretório
- $cp /home/jboss/course-files/Versao\ Enterprise\ EAP\ 6\jboss-eap-6.0.1.zip .
- $ls
- Descompacte o arquivo
- $unzip jboss-eap-6.0.1.zip
- $ls
- Remova o pacote zip
- $rm jboss-eap-6.0.1.zip
- $ls
- Mas se a prova disser que o root do jboss tem que ficar em "/usr/local/jboss/exam" você deve copiar tudo da pasta "/usr/local/jboss/exam/jboss-eap-6.0" para "/usr/local/jboss/exam"
- $mv jboss-eap-6.0/* .
- $rm -Rf jboss-eap-6.0
- $ls
- Teste indo até a raiz e iniciando o jboss
- $cd /
- $./usr/local/jboss/exam/bin/standalone.sh
3) Instalar outras bibliotecas nativas específicas do sistema operacional para aprimorar o desempenho do JBoss EAP
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte3
- O native tem libs do hornetq e apr connector
- Copie o zip (na prova será indicado onde ele estará, /home/jboss/course-files/Versao\ Enterprise\ EAP\ 6\jboss-eap-native-6.0.1-RHEL6-x86_64.zip por exemplo) para diretório /tmp (apenas para organização)
- $cd /tmp
- $cp /home/jboss/course-files/Versao\ Enterprise\ EAP\ 6\jboss-eap-native-6.0.1-RHEL6-x86_64.zip .
- $ls
- Descompacte
- $unzip jboss-eap-native-6.0.1-RHEL6-x86_64.zip
- $ls
- Copie as libs (.so) para a pasta do jboss
- $cp -Rap jboss-eap-6.0/modules/org/hornetq/main/lib/* /usr/local/jboss/exam/modules/org/hormetq/main/lib/
- $cp -Rap jboss-eap-6.0/modules/org/jboss/as/web/main/lib/ /usr/local/jboss/exam/modules/org/jboss/as/web/main/
- Agora as libs já foram copiadas, mas é preciso dizer ao JBoss para reconhecer estas libs, isto é feito no arquivo modules.xml do módulo em questão
- $cd /usr/local/jboss/exam/modules/org/hormetq/main/
- $vim modules.xml
- Adicionar <resource-root path="lib/linux-x86_64">
- $cd /usr/local/jboss/exam/modules/org/jboss/as/web/main/
- $vim modules.xml
- Adicionar <resource-root path="lib/linux-x86_64">
- É preciso dizer agora ao subsystem web para utilizar as native libs. No modo standalone, edite o standalone.xml
- $cd /usr/local/jboss/exam/standalone/configuration
- $vim standalone.xml
- No subsystem web altere native="false" para native="true"
- No subsystem logging:
- Altere em root-logger o level name="INFO" para level name="DEBUG"
- Altere em console-handler o level name="INFO" para level name="DEBUG"
- Essas alterações no log são para podermos confirmar que as bibliotecas nativas estão sendo utilizadas
- Inicie o jboss e veja se as libs native aparecem:
- $cd /
- $./usr/local/jboss/exam/bin/standalone.sh
- Lembre-se: Se a prova não pedir para utilizar as libs nativas, não faça esses passos. Faça somente o que a prova pedir!
4) Configurar os requisitos mínimos de segurança para acessar e gerenciar o JBoss EAP. Acessar e gerenciar o JBoss EAP usando as ferramentas fornecidas.
https://community.jboss.org/wiki/RedHatCertifiedJBossAdministrator-JBossEAP6-Parte4
- Crie um usuário de gerenciamento
- $cd /usr/local/jboss/exam/
- $./bin/add-user.sh
- Escolha a opção a (Management User)
- Dê enter para utilizar a Realm padrão
- Dê um nome para o usuário
- Dê uma senha
- Digite "yes" para aplicar a realm
- Digite "no" pois o usuário criado não fará a ação perguntada
- Abra o arquivo mgmt-user.properties e verifique se o usuário foi criado corretamente
- $ vim standalone/configuration/mgmt-user.properties
- Inicie o JBoss
- $cd /
- $./usr/local/jboss/exam/bin/standalone.sh
- Em outro terminal, acesse o JBoss via CLI:
- $cd /usr/local/jboss/exam/
- $./bin/jboss-cli.sh -c
- Pronto, você está conectado via CLI no JBoss. A opção "-c" é para já entrar conectado.
- Acesse via browser: http://localhost:9990 e digite usuário e senha, dessa forma você está acessando a interface web para gerenciamento do jboss.
- Para acessar remotamente o CLI e a interface web de gerenciamento você precisa iniciar o JBoss com o parâmetro: -Djboss.bind.address.management=0.0.0.0
quarta-feira, 13 de março de 2013
Serialização em Java
Pessoal, segue um exemplo de serilização em Java, como eu precisava passar meu objeto como string eu usei a classe HexBin da Apache, para isso adicionei a lib xmlbeans-2.3.0.jar ao meu projeto.
Segue exemplo abaixo:
Abraço!!
Adriano Schmidt
Segue exemplo abaixo:
import java.io.Serializable;
import java.util.Date;
public class MyObject implements Serializable {
private static final long serialVersionUID = 1L;
private Boolean myBoolean = true;
private String myString = "s";
private Date myDate = new Date();
public String toString() {
return "MyObject [ myBoolean=" + myBoolean + ", myString=" + myString + ", myDate=" + myDate + " ]";
}
}import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.apache.xmlbeans.impl.util.HexBin;
public class Main {
public static void main(String[] args) {
// Voce tem um objeto
MyObject objetoInicial = new MyObject();
// serializa ele e o transforma em String
byte[] bytesSerializados = Main.serialize(objetoInicial);
String stringFromBytes = HexBin.bytesToString(bytesSerializados);
// depois voce pode, a partir da String, transformar ele em bytes novamente
// e deserializar transformando-o no objeto inicial novamente
byte[] bytesFromString = HexBin.stringToBytes(stringFromBytes);
MyObject objetoDeserializado = (MyObject) Main.deserialize(bytesFromString);
System.out.println(objetoInicial);
System.out.println(objetoDeserializado);
}
/**
* Funcao para serializar um objeto
*/
public static byte[] serialize(Object obj) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream os = null;
try {
os = new ObjectOutputStream(out);
os.writeObject(obj);
} catch (IOException e) {
e.printStackTrace();
}
return out.toByteArray();
}
/**
* Funcao para deserializar um objeto
*/
public static Object deserialize(byte[] data) {
ByteArrayInputStream in = new ByteArrayInputStream(data);
try {
ObjectInputStream is = new ObjectInputStream(in);
return is.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}Abraço!!
Adriano Schmidt
sábado, 26 de janeiro de 2013
Could not determine type for [..] at table [..] for columns [..]
Oi, hoje tive o erro abaixo ao iniciar minha aplicação EJB no JBoss 6
O Problema era que eu tinha uma coluna mapeada assim:
Mas ela precisa do @ManyToOne
Ao fazer dessa forma funcionou normalmente : )
Vaaleu!!
Adriano Schmidt
13:57:23,368 INFO [org.hibernate.validator.engine.resolver.DefaultTraversableResolver] Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
13:57:23,380 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=test-ear-1.0.0.ear/test-ejb-1.0.0.jar#l8 state=Create: javax.persistence.PersistenceException: [PersistenceUnit: test] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:900) [:3.5.5-Final]
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74) [:3.5.5-Final]
at org.jboss.jpa.builder.DefaultCEMFBuilder.build(DefaultCEMFBuilder.java:47) [:1.0.2-alpha-1]
[...]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_25]
Caused by: org.hibernate.MappingException: Could not determine type for: br.com.localhost8080.test.company.Company, at table: MY_TABLE, for columns: [org.hibernate.mapping.Column(company)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:291) [:3.5.5-Final]
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:275) [:3.5.5-Final]
at org.hibernate.mapping.Property.isValid(Property.java:217) [:3.5.5-Final]
O Problema era que eu tinha uma coluna mapeada assim:
@JoinColumn(name = "ID_COMPANY", nullable = false)
private Company company;
Mas ela precisa do @ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_COMPANY", nullable = false)
private Company company;
Ao fazer dessa forma funcionou normalmente : )
Vaaleu!!
Adriano Schmidt
quarta-feira, 24 de outubro de 2012
NoClassDefFoundError SessionLogEntry
Olá,
Hoje tive o erro java.lang.NoClassDefFoundError: org/eclipse/persistence/logging/SessionLogEntry ao fazer deploy da minha aplicação no WebSphere 8.
Segue log completo:
O erro era porque eu não tinha nenhuma classe com @Entity na minha aplicação.. aí dava esse NoClassDefFoundError SessionLogEntry...
Ao adicionar essa classe:
O erro parou de acontecer!
Tive um erro semelhante a esse que postei em: http://localhost8080.blogspot.com.br/2012/10/nomodulefileexception.html
Vaaaaleu!!
Adriano Schmidt
Hoje tive o erro java.lang.NoClassDefFoundError: org/eclipse/persistence/logging/SessionLogEntry ao fazer deploy da minha aplicação no WebSphere 8.
Segue log completo:
[23/10/12 14:31:14:570 BRST] 00000025 AppManagement W ADMA0116W: Unable to start: myapp-ear using: WebSphere:name=ApplicationManager,process=server1,platform=proxy,node=localhost8080Node01,version=8.0.0.0,type=ApplicationManager,mbeanIdentifier=ApplicationManager,cell=localhost8080Node01Cell,spec=1.0 exception is: javax.management.MBeanException: Exception thrown in RequiredModelMBean while trying to invoke operation startApplication
at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1112)
[...]
Caused by: com.ibm.ws.exception.RuntimeError: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/eclipse/persistence/logging/SessionLogEntry
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:753)
[...]
at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:4218)
O erro era porque eu não tinha nenhuma classe com @Entity na minha aplicação.. aí dava esse NoClassDefFoundError SessionLogEntry...
Ao adicionar essa classe:
package br.com.localhost8080.myapp;
import javax.persistence.Entity;
@Entity
public class MyTest {
}
O erro parou de acontecer!
Tive um erro semelhante a esse que postei em: http://localhost8080.blogspot.com.br/2012/10/nomodulefileexception.html
Vaaaaleu!!
Adriano Schmidt
quarta-feira, 10 de outubro de 2012
NoModuleFileException
Hoje tive o erro abaixo ao fazer deploy da minha aplicação no websphere 8:
Isso aconteceu pois era um projeto novo que eu estava criando e o meu jar de EJBs não tinha nehum EJB, não tinha nenhuma classe com @Stateless.
Se eu criasse uma classe como a classe abaixo o problema não acontecia mais.
@Stateless
public class MeuTesteServiceBean {
}
Vaaaleu!!
Adriano Schmidt
Archive is not a valid EJB JAR File because the deployment descriptor can not be found (case sensitive): META-INF/ejb-jar.xml
org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ModuleRefImpl initModuleFileFromEAR Ignoring ClassCastException [ org.eclipse.jst.j2ee.commonarchivecore.internal.impl.FileImpl incompatible with org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleFile ]
org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DeploymentDescriptorLoadException: dd_in_ear_load_EXC_]
Caused by: org.eclipse.jst.j2ee.commonarchivecore.internal.exception.NoModuleFileException: A file does not exist for module element having uri: myproject-ejb-1.0-SNAPSHOT.jar
Isso aconteceu pois era um projeto novo que eu estava criando e o meu jar de EJBs não tinha nehum EJB, não tinha nenhuma classe com @Stateless.
Se eu criasse uma classe como a classe abaixo o problema não acontecia mais.
@Stateless
public class MeuTesteServiceBean {
}
Vaaaleu!!
Adriano Schmidt
quinta-feira, 27 de setembro de 2012
constructor Service JAX-WS 2.2
Olá, hoje ao gerar um client para web services através de um wsdl (utilizei o gerador de client ws do eclipse) tive o seguinte erro de compilação:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project ProjectL8-ejb: Compilation failure: Compilation failure:
[exec] [ERROR] \work\workspaces\workspace-juno\ProjectL8\ProjectL8-ejb\src\main\java\br\com\localhost8080\wstest\ws\test\TestService.java:[39,8] cannot find symbol
[exec] [ERROR] symbol : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
[exec] [ERROR] location: class javax.xml.ws.Service
Isso acontece pois o maven está usando a classe Service errada:
javax.xml.ws.Service encontrada no "JDK SE 1.6" e no "JAX-WS 2.1" não tem este construtor com três parâmetros.
javax.xml.ws.Service encontrada no "JAX-WS 2.2" é a versão correta.
Você pode alterar o build-path diretamente do seu projeto para utilizar o jaxws-api.jar ou então alterar o seu pom para usar o "JAX-WS 2.2.x", basta adicionar no seu pom o que está no link a seguir:
http://jax-ws-commons.java.net/jaxws-maven-plugin/examples/using-jaxws22-on-jdk6.html
Vaaleu!!
Adriano Schmidt
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project ProjectL8-ejb: Compilation failure: Compilation failure:
[exec] [ERROR] \work\workspaces\workspace-juno\ProjectL8\ProjectL8-ejb\src\main\java\br\com\localhost8080\wstest\ws\test\TestService.java:[39,8] cannot find symbol
[exec] [ERROR] symbol : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
[exec] [ERROR] location: class javax.xml.ws.Service
Isso acontece pois o maven está usando a classe Service errada:
javax.xml.ws.Service encontrada no "JDK SE 1.6" e no "JAX-WS 2.1" não tem este construtor com três parâmetros.
javax.xml.ws.Service encontrada no "JAX-WS 2.2" é a versão correta.
Você pode alterar o build-path diretamente do seu projeto para utilizar o jaxws-api.jar ou então alterar o seu pom para usar o "JAX-WS 2.2.x", basta adicionar no seu pom o que está no link a seguir:
http://jax-ws-commons.java.net/jaxws-maven-plugin/examples/using-jaxws22-on-jdk6.html
Vaaleu!!
Adriano Schmidt
terça-feira, 19 de junho de 2012
IDENTITY_INSERT OFF
Hoje um amigo aqui da empresa me perguntou:
"Adriano, usei a query abaixo em um banco SQLSERVER e deu esse erro ali, sabe o que pode ser?"
insert into my_table (id, description, situation_type) values (14, 'aaaa', 1);
Error: Não é possível inserir um valor explícito para a coluna de identidade na tabela 'my_table' quando IDENTITY_INSERT está definido como OFF.
Para resolver bastou tirar o id da query e deixar esse trabalho para o próprio banco de dados:
insert into my_table (description, situation_type) values ('aaaa', 1);
Pronto, resolvido!
Abraços!
Adriano Schmidt
"Adriano, usei a query abaixo em um banco SQLSERVER e deu esse erro ali, sabe o que pode ser?"
insert into my_table (id, description, situation_type) values (14, 'aaaa', 1);
Error: Não é possível inserir um valor explícito para a coluna de identidade na tabela 'my_table' quando IDENTITY_INSERT está definido como OFF.
Para resolver bastou tirar o id da query e deixar esse trabalho para o próprio banco de dados:
insert into my_table (description, situation_type) values ('aaaa', 1);
Pronto, resolvido!
Abraços!
Adriano Schmidt
Assinar:
Postagens (Atom)
