Dúvida com persistence.xml

8 respostas
dahenz

Boa tarde!

Gostaria de saber como faço para criar tabelas automaticamente através de beans em um Dinamyc Project Web do eclipse???

Estou tentando, mas traz um erro dizendo que meu persistence.xml tem que estar no classpath…

P.S.: Criei o persistence.xml dentro da pasta META-INF

Obrigado…

8 Respostas

T

OLá, o persistence.xml deve estar no raiz do projeto…

detalhe …

vc usa eclipse? se sim é mais fácil… fazer o seguinte…

trabalhe com 2 projetos, para a parte web(dynamic web project) e outro para os dados, crie um projeto como um módulo de dados, nele voce vai ter somente os jars do hibernate e seus beans, de domínio…

com isso se voce precisar escrever uma aplicação desktop(swing) ou pra celular, ou sei lá testar outra tecnologia na camada de apresentação é mais fácil implementar…

o seu projeto de dados não fica acoplado ao projeto web, na verdade o projeto web que será dependente do projeto de dados, e voce pode criar novos projetos todods dependentes do seu projeto de dados com o hibernate…

rod

toncarvalho:

So uma correcao o persistence.xml deve estar na pasta META-INF dentro da raiz da pasta de fontes (source) do projeto.

dahenz:

como voce nao especificou se esta usando hibernante , toplink ou outro. Entao vou colocar aqui o parametro para hibernate e toplink, com isso seu DB é criado no start da sua aplicacao.

hibernate =
toplink =

gilmarcand


Estou tentando, mas traz um erro dizendo que meu persistence.xml tem que estar no classpath…

P.S.: Criei o persistence.xml dentro da pasta META-INF


No Eclipse, a pasta META-INF com o arquivo persistence.xml deve ficar dentro da pasta src.

Se você está falando em gerar o banco de dados através do mapeamento das classes, você precisa indicar ao seu framework ORM para fazer isto. Se estiver usando o Hibernate, no seu arquivo persistence.xml deve conter o property

<property name="hibernate.hbm2ddl.auto" value="create"/>

as outras opções de value são: update, create-drop, validate.

dahenz

Moçada!! Consegui!!! Fiz o que falaram, criei uma pasta META-INF dentro src e executei um metodo main dentro de um dinamyc project web mesmo!!

Valew…

gilmarcand

Beleza cara, mas já que é uma aplicação web, você pode criar um ServletContextListener para iniciar isto ao invés de executar um método main. Crie uma classe assim:

public class ServletListener implements javax.servlet.ServletContextListener {

  public void contextInitialized(ServletContextEvent arg0) {
   System.out.println("Contexto está sendo inicializado....");
    // Aqui você pode inicializar o processo da JPA e outras coisas mais.
  }

  public void contextDestroyed(ServletContextEvent arg0) {
    System.out.println("Contexto está sendo destruido....");
  // Aqui você pode destruir a(s) EntityManagerFactory da aplicação e fazer outras coisa que queira...
  }
}

depois registra ela no web.xml:

<listener>
	<listener-class>com.seupacote.ServletListener</listener-class>
</listener>
dahenz

Valew a dica!!!

Agora me diz… é possível criar triggers dessa forma???

Obrigado Gilmar…

gilmarcand

Se o que você quer dizer com criar triggers é monitorar a aplicação para quando um evento for disparado você fazer alguma tarefa, então a resposta é sim. Um listener é um “ouvinte” que fica ali esperando algum evento acontecer. A API dos servlets permite criar listeners para eventos em várias situações:
Para Eventos de Contexto: ServletContextListener e ServletContextAttributeListener
Para Eventos de Sessão: HttpSessionListener, HttpSessionAttributeListener, HttpSessionActivationListener e HttpSessionBindingListener
Para Eventos de Requisição: ServletRequestListener e ServletRequestAttributeListener
Dá uma estudada nesta API que o limite está entre a tua imaginação e o céu.

dahenz

Hehe… valew… se eu achar algo vou te escrever!!!

Abraço

Criado 12 de março de 2009
Ultima resposta 12 de mar. de 2009
Respostas 8
Participantes 4