JSF + H2 + TomEE + Hibernate/JPA Datenbank wird nicht angelegt

pl4gu33

Top Contributor
Hey,....

ich habe im Moment fast nur Konfigurations- Probleme ich hoffe ich hab bald alle Probleme durch und kann endlich weiter proggen 😀

Mein aktuelles Problem setzt sich aus einer Mischung von JSF,h2,Hibernate/JPA, Tom EE zusammen
ich hab auf der TomEE Seite, auf der H2 Seite, bei Google etc. gesucht... ich finde einfach nix, ich hab 10000 Sachen probiert, web.xml vom Server geändert, Persistence.xml, Lib verschoben etc. aber es will einfach nicht klappen.... kann sein, dass meine Konfigurationen nun ganz kaputt sind, aber ich hoffe ihr könnt mir weiterhelfen 😀

Lokal also ohne Server und ohne JSF/CDI klappt Hibernate/JPA + H2 ohne Probleme

Folgende Struktur (Maven Projekt):

src/main/java
package model mit den Klassen Control /Person

src/main/webapp
hello.xhtml
Meta-INF
Web-INF mit beans.xml, web.xml, persistence.xml, faces-config.xml


so weit, so gut .... die CDI funzt auch ohne Probleme und sogar die Datenbank wird erstellt bzw. sieht es so aus 😀 aber wirklich gespeichert wird nix 🙁

JA ich weiß vieles is unsinning was z.b. im PostConstruct passiert aber das soll alles nur ein Test sein 😀

Hier meine Daten:

Control.java

Java:
package model;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

import javax.persistence.PersistenceUnit;


@Named
public class Control implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String hello="hello";

	@PersistenceUnit(name="PU")
	EntityManagerFactory ef;
	
	public Control(){
		
	}
	
	public String getHello() {
		return hello;
	}

	public void setHello(String hello) {
		this.hello = hello;
	}
	
	@PostConstruct
	public void save(){		
		EntityManager em= ef.createEntityManager();		
		System.out.println(em.merge(new Person("Hans")));
		System.out.println(em.find(Person.class,1L));
		hello="Text wird eingefügt";
	}
}

Person.java
Java:
package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Person {
	
	@Id
	@GeneratedValue
	private Long id;
	
	private String name;
	
	protected Person(){
		
	}
	
	public Person(String name){
		this.setName(name);
	}


	public Long getId() {
		return id;
	}


	public void setId(Long id) {
		this.id = id;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}
	
	public String toString(){
		return name+ " das ist mein Name";
	}
	
	
}

hello.xhtml

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">

<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body>
<h3>JSF 2.0 Hello World Example - hello.xhtml</h3>
<h:form>
<h:outputText value="#{control.hello}"></h:outputText>
</h:form>
</h:body>
</html>

Persistence.xml

Java:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_2_0.xsd"
version="2.0">
	<persistence-unit name="PU"> 
	<provider>org.hibernate.ejb.HibernatePersistence</provider>

    <class>model.Person</class>
	<properties>	
         <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
         <property name="hibernate.connection.url" value="jdbc:h2:test.h2;MODE=Oracle" />
         <property name="hibernate.connection.username" value="sa" />
         <property name="hibernate.connection.password" value="" />

         <property name="hibernate.connection.autocommit" value="true" />
         <property name="hibernate.hbm2ddl.auto" value="create" />
         <property name="hibernate.show_sql" value="true" />
         <property name="hibernate.format_sql" value="true" />
         <property name="hibernate.transaction.factory_class"
            value="org.hibernate.transaction.JDBCTransactionFactory" />

      </properties>
	
	</persistence-unit>	
</persistence>

web.xml

Java:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>WebH2</display-name>


<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- JSF mapping -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- Map these files with JSF -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>


Teile des Printstack vom TomEE Server:

Java:
Hibernate: 
    create table Person (
        id bigint generated by default as identity (start with 1),
        name varchar(255),
        primary key (id)
    )

Hans das ist mein Name
Hibernate: 
    select
        person0_.id as id0_0_,
        person0_.name as name0_0_ 
    from
        Person person0_ 
    where
        person0_.id=?
null

wie man an dem null sieht, ist kein User mit der ID vorhanden und die DB Datei existiert auch nirgendwo.... ich hab keine Ahnung was ich noch machen soll daher wäre es sehr nett, wenn ihr mir da weiterhelfen könntet 😀


Die Ausgabe der JSF Seite is übrigens korrekt mit CDI :

Code:
JSF 2.0 Hello World Example - hello.xhtml

Text wird eingefügt


POM:

Code:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>WebH2</groupId>
  <artifactId>WebH2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>WebH2</name>
   <build>
	<plugins>
		<plugin>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.6</source>
				<target>1.6</target>
			</configuration>
		</plugin>
	</plugins>
</build>

  
   <dependencies>
   	<dependency>
   		<groupId>com.h2database</groupId>
   		<artifactId>h2</artifactId>
   		<version>1.3.168</version>
   	</dependency>
   </dependencies>
</project>
 
Zuletzt bearbeitet:
Du musst die Person per Transaction in die DB schreiben:

Java:
 //Erzeugen einer EntityManagerFactory mit Hilfe des symbolischen
     //Namens aus dem Persistenz Descriptor (persistence.xml)
     EntityManagerFactory emf =
        Persistence.createEntityManagerFactory("persistenceExample");
 
     //Erzeugen eines EntityManagers für den Zugriff auf
     //die Datenbank
     EntityManager manager = emf.createEntityManager();
 
     //Beginn einer neuen Transanktion
     EntityTransaction tx = manager.getTransaction();
     tx.begin();    
 
     //Erzeugen eines neuen JavaObjektes
     Directory dir = new Directory(); 
     dir.setDid(0);
     dir.setDname("temp");
 
     //Speichern des JavaObjektes mit Hilfe des EntityManagers
     manager.persist(dir); 
 
     //Abschluss der Transaktion mit einem Commit
     tx.commit();
     
     //Freigabe der Ressourcen des EntityManagers
     manager.close();
 
     //Schließen der EntityManagerFactory und Freigeben der
     //belegten Ressourcen
     emf.close();
 
natürlich hab ich das auch schon mit Transaktionen versucht 😀
hatte dann auch ähnliche Probleme wie hier aber dann gings (aber auch keine DB erstelt):
http://www.java-forum.org/data-tier/84989-hibernate-jta-transactionmanagement.html

aber da die DB nicht mal erstellt wird, denke ich, dass einfach irgendwas ganz anderes falsch ist ^

und wie gesagt ohne Server etc. läuft es ja auch alles als Hibernate/JPA + H2 Alone ^^

ich bräuchte ja eher nur Konfigurationstipps, weil langsam aber sicher gehen mir die Seiten aus, was ich noch alles nachlesen kann und nen direktes Bsp. zu Hibernate, TomEE + H2 hab ich nicht gefunden bisher 🙁
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben