Ireport não encontra persistence.xml

Boa tarde amigos,

Estou com o seguinte problema:
Ao tentar configurar o classpath do ireport para criar um relatório utilizando hibernate annotations (Conexão EJBQL),
adiciono os jars necessários e a pasta onde está o arquivo persistence.xml (cujo a localização é minhaAplicacao/src/META-INF/persistence.xml).
Porém, ao criar uma conexão EJB, o ireport não encontra o arquivo persistence.xml e exibe a seguinte mensagem de erro:

No Persistence provider for EntityManager named meuteste”.

Alguém poderia me ajudar a configurar isso direitinho???

posta o código ai, incluside do seu DS.

Bom dia Walyson,

Segue abaixo os códigos.
OBS: a classe TipoConexao é responsável por passar os dados referentes à conexão com o BD (servidor, usuário, senha,…),
que estão armazenados num arquivo properties e que são “setados” de acordo com a opção selecionada na hora do login do usuário no sistema.

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="meuteste" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <property name="hibernate.connection.url" value="jdbc:postgresql://meu_servidor:5432/meu_banco"/>
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
      <property name="hibernate.connection.username" value="meu_usuario"/>
      <property name="hibernate.connection.password" value="minha_senha"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

Classe HibernateFactory:


public class HibernateFactory implements Serializable {
 o conteúdo do meu
    private static SessionFactory factory;
    private static final String URL = "hibernate.connection.url";
    private static final String USERNAME = "hibernate.connection.username";
    private static final String PASSWORD = "hibernate.connection.password";
    private TipoConexao tipoConexao;

    //Construtor
    public HibernateFactory(TipoConexao dadosConexao) {

        HibernateFactory.criarConexao(dadosConexao);
    }

    public static void criarConexao(TipoConexao tc) {

        try {

            AnnotationConfiguration cfg = new AnnotationConfiguration();

            cfg.addAnnotatedClass(Unidade.class);
            cfg.addAnnotatedClass(Professor.class);
            cfg.addAnnotatedClass(Disciplina.class);
            cfg.addAnnotatedClass(Curso.class);
            cfg.addAnnotatedClass(AlocacaoProfessor.class);
            cfg.addAnnotatedClass(MatrizCurricular.class);
            cfg.addAnnotatedClass(MatrizReferencia.class);
            cfg.addAnnotatedClass(LiberacaoNota.class);
            cfg.addAnnotatedClass(LogNota.class);
            cfg.addAnnotatedClass(PrazoNota.class);
            cfg.addAnnotatedClass(Aluno.class);
            cfg.addAnnotatedClass(Nota.class);
            cfg.addAnnotatedClass(NotaReferencia.class);

            //Carrega o hibernate.properties
            Properties prop = cfg.getProperties();

            //Seta com os parâmetros da conexão
            prop.setProperty(URL, tc.getUrl());
            prop.setProperty(USERNAME, tc.getUsername());
            prop.setProperty(PASSWORD, tc.getPassword());

            prop.setProperty("hibernate.show_sql", "false");
            prop.setProperty("hibernate.format_sql", "false");

            factory = cfg.setProperties(prop).buildSessionFactory();

        } catch (Exception ex) {
            System.out.println("e: " + ex.getMessage());
            ex.printStackTrace();
        }
    }

    //Retorna a sessão
    public Session getSession() {

        if (factory == null) {
            criarConexao(this.tipoConexao);

            return factory.openSession();
            
        } else {
            return factory.openSession();
        }
    }

    //Fecha a sessão
    public void closeSession() {

        if (factory != null) {
            factory.close();
        }
    }
    public TipoConexao getTipoConexao() {
        return this.tipoConexao;
    }

    public void setTipoConexao(TipoConexao tipoConexao) {
        this.tipoConexao = tipoConexao;
    }
}

Obrigada pela ajuda!

Qual servidor de aplicação está usando ?
Como você está fazendo a chamada ao persistence-unit “meuteste” ?

[quote=walyson amaral]Qual servidor de aplicação está usando ?
Como você está fazendo a chamada ao persistence-unit “meuteste” ?[/quote]

Estou iniciando por isso não tenho muita experiência…
Estou utilizando o TomCat e no meu sistema não faço nenhuma chamada ao persistence-unit “meuteste” .
Estou tentando utilizá-lo somente através do iReport.

Estou tentando utilizá-lo somente através do iReport.
cnunes, não entendi…quem ta injetando o persistence unit para voce ?

[quote=walyson amaral]Estou tentando utilizá-lo somente através do iReport.
cnunes, não entendi…quem ta injetando o persistence unit para voce ?[/quote]

Walyson,

Como eu disse estou iniciando e estou meio confusa.
Deixa eu tentar te explicar.
A minha aplicação web está funcionando direitinho com o hibernate annotations (até aqui não utilizei o persistence.xml).
Resolvi pesquisar como criar relatórios utilizando o hibernate annotations e li em alguns posts que é necessário utilizar este arquivo persistence.xml.
Por isso é que criei este arquivo . . .
Vc terial algum tutorial que explore a criação de relatórios utilizando hibernate annotations que possa me indicar?

Muito obrigada pela ajuda e pela paciência, sei que ainda tenho muito para caminhar em relação ao Java.

Abraços

cnunes, ok, vou tentar ajudar apesar de não ser muito didatico.
A origem do seu erro era :

se sua aplicação estava funcionando sem o persistence.xml, uma vez que voce não está usando spring para injetar o entityManager nem um jboss da vida, neste caso aconselho você retira-lo.
Quanto ao relatorio, não sei como você está fazendo para popular este relatorio, eu imagino que você esteja passando um objeto para o *.jasper, correto ?

[quote=walyson amaral]cnunes, ok, vou tentar ajudar apesar de não ser muito didatico.
A origem do seu erro era :

se sua aplicação estava funcionando sem o persistence.xml, uma vez que voce não está usando spring para injetar o entityManager nem um jboss da vida, neste caso aconselho você retira-lo.
Quanto ao relatorio, não sei como você está fazendo para popular este relatorio, eu imagino que você esteja passando um objeto para o *.jasper, correto ?
[/quote]

Oi Walyson,

Muito obrigada pela ajuda mesmo!
Eu acho que acabei me enrrolando aqui com tantos exemplos que eu vi.
Na verdade eu não utilizo o persistence.xml ( e acho que nem EJB ).
A minha aplicação só utiliza o hibernate annotatios.
Os dados referentes à conexão com o BD estão no arquivo hibernate.properties (pois de acordo com a seleção de uma opção na hora do login, o sistema pode acessar BD diferentes)
Segue abaixo uma parte da classe com a configuração das classes com as anotações (nessa classe acesso os dados do hibernate.properties tb).


            AnnotationConfiguration cfg = new AnnotationConfiguration();

            cfg.addAnnotatedClass(MinhaClasse1.class);
            cfg.addAnnotatedClass(MinhaClasse2.class);
            cfg.addAnnotatedClass(MinhaClasse3.class);
             .
             .
             .           
            cfg.addAnnotatedClass(MinhaClasseN.class);

            //Carrega o hibernate.properties
            Properties prop = cfg.getProperties();

            //Seta com os parâmetros da conexão
            prop.setProperty(URL, tc.getUrl());
            prop.setProperty(USERNAME, tc.getUsername());
            prop.setProperty(PASSWORD, tc.getPassword());

            org.hibernate.SessionFactory factory = cfg.setProperties(prop).buildSessionFactory();

O sistema está funcionando direitinho.
O meu problema é na hora de criar um relatório no iReport (3.0.0), como eu não utilizo o hibernate.cfg.xml,
eu não sei como setar o tipo de conexão na hora de criar o relatório.
Tentei utilizar uma conexão EJBQL (por isso a utilização do persistence.xml).

Nas opções do iReport não existe nenhum tipo de conexão que envolva hibernate annotations.

Mais 1 vez muito obrigada pela sua paciência, pois volto a ressaltar que ainda tenho muuuuuuuuuuuuuiiiiiiiiiiiittttttttttooooooooooooo a aprender :wink: