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



## pl4gu33 (26. Sep 2012)

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 


```
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

```
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


```
<?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


```
<?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


```
<?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:


```
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 :


```
JSF 2.0 Hello World Example - hello.xhtml

Text wird eingefügt
```


POM: 


```
<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>
```


----------



## schulli (26. Sep 2012)

Du musst die Person per Transaction in die DB schreiben:


```
//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();
```


----------



## pl4gu33 (26. Sep 2012)

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


----------



## pl4gu33 (29. Sep 2012)

Es hat irgendwie nur noch der Listener gefehlt nun läuft alles


----------

