Aplicação com JBoss-as-7 não roda os testes unitários nem cria tabelas no banco?

Java

30/04/2012

Pessoal só Deus sabe quanto tempo estou tendando configur minha app com o JBoss 7..

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

Rafael Jesus

Curtidas 0

Respostas

Robson Teixeira

Robson Teixeira

30/04/2012

Iae rafael blz
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
Rafael Jesus

Rafael Jesus

30/04/2012

Blz Robson e obrigado por responder, mas cara naum tenho ideia de como criar tabelas pelo EJB a app roda legal do jeito que fiz pelo maven, mas o problema é quando tento criar as tebelas e rodar os testes mesmo deve ser por isso que vc disse do EJB...como vc faria pra criar como EJB??? Abrcss
GOSTEI 0
Robson Teixeira

Robson Teixeira

30/04/2012

O exemplo abaixo mostra como criar um EJB 3.1 que não armazena estado que está implementada no JBOSS AS 7
@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
Rafael Jesus

Rafael Jesus

30/04/2012

Blz Robson, valeu mesmo man...

Abrcs

Rafael
GOSTEI 0
Rafael Jesus

Rafael Jesus

30/04/2012

Blz Robson, valeu mesmo man...

Abrcs

Rafael
GOSTEI 0
Rafael Jesus

Rafael Jesus

30/04/2012

So uma observação Robson,

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
Robson Teixeira

Robson Teixeira

30/04/2012

Não ha necessária obrigação de usar EJB para rodar os seus testes porem se sua app usa EJB e recomendavel que use. isso varia de cada caso.
att
robson
GOSTEI 0
Rubens Nogueira

Rubens Nogueira

30/04/2012

Blz do que jeito que esta minha aplicação sem EJB ta difícil, para salvar dados tem q usar UserTransaction e o EntityManager na unha, gostaria de já utilizar o métodos de negócio que tenho com interfaces e tals, eu nem falei de mockito ainda...

Depois mando o projeto no Github e vc ver se consegue só por desencargo mesmo..

Abrs
GOSTEI 0
POSTAR