Fórum Aplicação com JBoss-as-7 não roda os testes unitários nem cria tabelas no banco? #416024
30/04/2012
0
Quando eu tento criar minhas tebelas no banco ou quando tento rodar os testes aparece o erro de jdni,
Já tentei configurar de diversas maneiras mas não tem jeito, como modulo, no maven, na interface do AS, lembrando que a aplicação funciona OK quando eu subo o servidor, mas quando rodo java aplication no eclipse para gerar tabelas ou teste unitários ele lanca a exception..
Por favor pessoal preciso da ajuda de vcs...
Abrcs
Minha classe de criacao de tabelas
@PersistenceContext private static EntityManager em;
private static EntityManagerFactory emf;
public static void main(String[] args) {
emf = Persistence.createEntityManagerFactory(scrum);
em = emf.createEntityManager();
em.close();
emf.close(); persistence.xml
<persistence-unit name=scrum transaction-type=JTA>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
<class>br.com.scrum.domain.entity.User</class>
<class>br.com.scrum.domain.entity.Project</class>
<class>br.com.scrum.domain.entity.Sprint</class>
<class>br.com.scrum.domain.entity.Item</class>
<class>br.com.scrum.domain.entity.Task</class>
<properties>
<property name=hibernate.hbm2ddl.auto value=update />
<property name=hibernate.transaction.jta.platform value=org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform />
<property name=hibernate.show_sql value=true />
</properties>
</persistence-unit> meu pom esta aqui https://github.com/rafaeljesus/agile2go/blob/master/pom.xml
O erro
Exception in thread main javax.persistence.PersistenceException: [PersistenceUnit: scrum] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
at br.com.scrum.infrastructure.dao.CreateTables.main(CreateTables.java:17)
Caused by: org.hibernate.service.jndi.JndiException: Error parsing JNDI name [java:jboss/datasources/postgresDS]
at org.hibernate.service.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:92)
at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:63)
... 5 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:28
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.getNameParser(InitialContext.java:480)
at org.hibernate.service.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:86)
... 21 more
Rafael Jesus
Curtir tópico
+ 0Posts
30/04/2012
Robson Teixeira
cara pergunta na console do Jboss 7 mostra o seu postgresDS pois ele exibe os dataSources criados. caso não aparece reveja como você criou o datasource e sugiro fazer isso via xml e não pela interface web do servidor (recomendação de um amigo que trabalha com Jboss a um bom tempo).
Também na console vi o erro Unable to build EntityManagerFactory como o seu persistence.xml está configurado para ser via JTA recomendo a criação do EntityManager esteja em um EJB ou SpringBean e que o mesmo seja intejado e não criando um EntityManagerFactory para que se obtenha o EntityManager. Onde o Jboss gerenciara a criação da conexão e criará as tabelas via hibernate.
Também e possivel alterando o atributo transaction-type para RESOURCE_LOCAL e tendo que colocar todos os dados da conexão no persistence.xml (o que normalmente vejo).
espero ter ajudado.
att
robson
Gostei + 0
30/04/2012
Rafael Jesus
Gostei + 0
30/04/2012
Robson Teixeira
@Stateless
public class MyEJB{
}
abaixo segue como fazer a injeção do EJB em outro EJB ou em managedBean do JSF.
@EJB
private MyEJB;
// get e set omitidos.
e agora segue o exemplo de como obter a instancia do EJB indicado para apps desktop que necessitam de fazer uso
InitialContext ic= new InitialContext();
MyEJB ejb =(MyEJB)ic.lookup(aki passara uma String que é o nome do seu EJB onde o mesmo é obtido na console do servidor enquanto a app faz deploy);
esses são os exemplos mais conhecidos.
sugiro dar uma pesquisada sobre EJB para obter melhor conhecimento.
att
robson
Gostei + 0
30/04/2012
Rafael Jesus
Abrcs
Rafael
Gostei + 0
30/04/2012
Rafael Jesus
Abrcs
Rafael
Gostei + 0
01/05/2012
Rafael Jesus
O JBoss obriga a usar EJB pra rodar testes, etc..??
Pois não estou usando em minha aplicação e uso TDD ao máximo que posso, e ninguém merece testar com Arquillan, horrível cara..
O Uso do Jboss é um over design muito grande na aplicação, pois tudo é embassado..
Abrcs
Gostei + 0
02/05/2012
Robson Teixeira
att
robson
Gostei + 0
02/05/2012
Rubens Nogueira
Depois mando o projeto no Github e vc ver se consegue só por desencargo mesmo..
Abrs
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)