Hallo liebe Forummitglieder, folgendes Problem! In JBoss7 möchte ich mittels JPA auf eine MySQL Datenbank über Hibernate gehen.
Zuerst habe ich die Datasource mit der Datenbank in JBoss eingerichtet.
Danach die META-INF/persistence.xml angelegt
[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="amDatabase">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/amdbSQLDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.show_sql" value="true"/>
<!--
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
-->
</properties>
</persistence-unit>
</persistence>
[/XML]
Der JBoss Server erkennt die persistence.xml und baut schön die Verbindung auf. Meldet das alles in Ordnung ist.
Leider kann ich nicht in die Datenbank schreiben!
Als ManagedBean:
Ein anderes MenagedBean versucht, ein User abzuspeichern.
Die action wird auf ein PrimeFaces Button gebunden:
[XML]
<p:commandButton id="bt" action="#{userHandler.saveMe}" value="Save Me"/>
[/XML]
Sobald die Aktion ausgeführt wird, bekomme ich folgende Exception:
Das aller tollste dabei und interessanteste, wenn ich in die Datenbank gehe, legt er mir eine Tabelle an und fügt ein Datensatz ein:
Was mache ich falsch (bin ein Anfänger!)?
Zuerst habe ich die Datasource mit der Datenbank in JBoss eingerichtet.
Danach die META-INF/persistence.xml angelegt
[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="amDatabase">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/amdbSQLDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.show_sql" value="true"/>
<!--
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
-->
</properties>
</persistence-unit>
</persistence>
[/XML]
Der JBoss Server erkennt die persistence.xml und baut schön die Verbindung auf. Meldet das alles in Ordnung ist.
Leider kann ich nicht in die Datenbank schreiben!
Als ManagedBean:
Java:
@Entity
//@SequenceGenerator(name="user_id", initialValue=1, allocationSize=1)
@Table(name="users")
@ManagedBean(name="user")
public class User implements Serializable{
private static final long serialVersionUID = -8606951161159481192L;
// User data
private Integer userID;
private String lastName;
private String firstName;
// *** USER ID ***
/**
* @return the intUserID
*/
@Id
// @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="user_id", nullable=false)
public Integer getUserID() {
return userID;
}
public void setUserID(Integer userID) {
this.userID = userID;
}
// *** LAST NAME ***
/**
* @return the lastName
*/
@Column(name="lastname", nullable=false)
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
// *** FIRST NAME ***
/**
* @return the firstName
*/
@Column(name="firstname", nullable=false)
public String getFirstName() {
return firstName;
}
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
Ein anderes MenagedBean versucht, ein User abzuspeichern.
Java:
@ManagedBean(name="userHandler")
public class UserHandler {
public UserHandler() {
// TODO Auto-generated constructor stub
}
public void saveMe(){
//Erzeugen einer EntityManagerFactory mit Hilfe des symbolischen
//Namens aus dem Persistenz Descriptor (persistence.xml)
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("amDatabase");
//Erzeugen eines EntityManagers für den Zugriff auf
//die Datenbank
EntityManager manager = manager = emf.createEntityManager();
//Beginn einer neuen Transanktion
EntityTransaction tx = manager.getTransaction();
tx.begin();
//Erzeugen eines neuen JavaObjektes
User usr1 = new User();
usr1.setUserID(1);
usr1.setFirstName("Usr");
usr1.setLastName("Mustermann");
//Speichern des JavaObjektes mit Hilfe des EntityManagers
manager.persist(usr1);
//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();
}
}
Die action wird auf ein PrimeFaces Button gebunden:
[XML]
<p:commandButton id="bt" action="#{userHandler.saveMe}" value="Save Me"/>
[/XML]
Sobald die Aktion ausgeführt wird, bekomme ich folgende Exception:
Java:
17:39:26,228 WARNUNG [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-localhost-127.0.0.1-8080-1) #{userHandler.saveMe}: java.lang.NullPointerException: javax.faces.FacesException: #{userHandler.saveMe}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.UICommand.broadcast(UICommand.java:315) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Thread.java:679) [rt.jar:1.6.0_22]
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) [jsf-impl-2.1.7-jbossorg-2.jar:]
... 21 more
Caused by: java.lang.NullPointerException
at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:73) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:115) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1207) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:176) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:89) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:125) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:120) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at dev.in.time.usr.UserHandler.saveMe(UserHandler.java:24) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_22]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.6.0_22]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.6.0_22]
at java.lang.reflect.Method.invoke(Method.java:616) [rt.jar:1.6.0_22]
at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
Das aller tollste dabei und interessanteste, wenn ich in die Datenbank gehe, legt er mir eine Tabelle an und fügt ein Datensatz ein:
Java:
user_id = null | firstname = null; lastname = null
Was mache ich falsch (bin ein Anfänger!)?