java - How to persist object using Entity Manager and GenericDao Bean and Tomee -


i m in beginning java ejb. :) have dynamic web project in eclipse , want save object mysql database. don't understand why not working since not have exceptions in console. m using apache tomee server had installed in eclipse.

my entity class:

package entities; import static javax.persistence.generationtype.identity; import java.io.serializable; import java.io.serializable; import javax.persistence.column; import javax.persistence.entity; import javax.persistence.entitylisteners; import javax.persistence.generatedvalue; import javax.persistence.generationtype; import javax.persistence.id; import javax.persistence.namedqueries; import javax.persistence.namedquery; import javax.persistence.table;  @entity @table(name="books") public class book implements serializable{  private static final long serialversionuid = -9009670426767476684l;  @id  @generatedvalue    private int id;  @column(name="name") private string name;  public book(){         }  public book(string name) {     super();     this.name = name; }   public int getid() {   return id; }  public void setid(int id) {   this.id = id; }  public string getname() {   return name; }  public void setname(string name) {   this.name = name; }     } 

genericdaobean:

package beans; import java.io.serializable; import java.lang.reflect.parameterizedtype; import java.util.list; import javax.persistence.entitymanager; import javax.persistence.persistencecontext; import javax.persistence.query;  public abstract class genericdaobean<t, id extends serializable> implements genericdaolocal<t, id> {  private class<t> entitytype;  @persistencecontext(unitname = "facebook") protected entitymanager em;  @suppresswarnings("unchecked") public genericdaobean() {     entitytype = (class<t>) ((parameterizedtype) getclass()             .getgenericsuperclass()).getactualtypearguments()[0]; }  public class<t> getentitytype() {     return entitytype; }  public t findbyid(id id) {     t entity;     entity = em.find(entitytype, id);     return entity; }  @suppresswarnings("unchecked") public list<t> findall() {     query q = em.createquery("select x " + entitytype.getsimplename()             + " x");     list<t> result = q.getresultlist();     return result; }  @suppresswarnings("unchecked") public list<t> findby(string query) {     query q = em.createquery(query);     list<t> result = q.getresultlist();     return result; }  public t persist(t entity) {     em.persist(entity);     return entity; }  public t merge(t entity) {     entity = em.merge(entity);     return entity; }  public void remove(t entity) {     entity = em.merge(entity);     em.remove(entity); }  public void flush() {     em.flush(); }  public void clear() {     em.clear(); }  } 

genericdaobeanlocal:

package beans;  import java.io.serializable; import java.util.list;  public interface genericdaolocal<t, id extends serializable> {  public class<t> getentitytype();  public t findbyid(id id);  public list<t> findall();  public list<t> findby(string query);  public t persist(t entity);  public t merge(t entity);  public void remove(t entity);  public void flush();  public void clear();  } 

conroller:

package controllers;  import java.io.ioexception; import java.util.calendar; import javax.ejb.ejb; import javax.persistence.entitymanager; import javax.persistence.persistencecontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import beans.bookdaolocal; import entities.book;  public class registrationcontroller extends httpservlet { private static final long serialversionuid = 381026218072249234l;  @ejb private bookdaolocal bookdao;  @override protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {  }  @override protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {      string name = req.getparameter("name");     book b = new book();     b.setname(name);     bookdao.persist(b);  } } 

in webcontent under meta_inf folder have persistance.xml , file:

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="facebook" transaction-type="jta"> <provider>org.apache.openjpa.persistence.persistenceproviderimpl</provider> <jta-data-source>facebook</jta-data-source> <class>entities.book</class>  <properties>         <property name="openjpa.log" value="defaultlevel=warn, runtime=info, tool=info, sql=trace"/>          <property name="openjpa.jdbc.synchronizemappings" value="buildschema(foreignkeys=true)"/>         <property name="openjpa.jdbc.schemafactory" value="native(foreignkeys=true)" />          <property name="openjpa.jdbc.eagerfetchmode" value="join"/>         <!--<property name ="openjpa.runtimeunenhancedclasses" value="unsupported" />--> </properties>       

in src have jndi.properties file:

 java.naming.factory.initial=org.apache.openejb.client.remoteinitialcontextfactory java.naming.provider.url=http://127.0.0.1:8080/tomee/ejb 

in console have:

info: server startup in 4161 ms 10092  facebook  info   [http-bio-8080-exec-7] openjpa.runtime - starting openjpa 2.4.0-nonfinal-1598334 11626  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 2120544240> executing prepstmnt 598104600 select   sequence_schema, sequence_name information_schema.system_sequences 11626  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 2120544240> [0 ms] spent 11645  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 2120544240> executing prepstmnt 726242714 select sequence_schema, sequence_name information_schema.system_sequences 11646  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 2120544240> [1 ms] spent 11794  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 811560660> executing prepstmnt 1999826151 select sequence_value public.openjpa_sequence_table id = ? [params=?] 11794  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 811560660> [0 ms] spent 11795  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 811560660> executing prepstmnt 344473922 update public.openjpa_sequence_table set sequence_value = ? id = ? , sequence_value = ? [params=?, ?, ?] 11797  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 811560660> [2 ms] spent 11813  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 1798001212> executing prepstmnt 1563539472 insert public.books (id, name) values (?, ?) [params=?, ?] 11814  facebook  trace  [http-bio-8080-exec-7] openjpa.jdbc.sql - <t 1249135181, conn 1798001212> [1 ms] spent 

and in tomee.xml (datasource tomee):

<resource id="facebook" type="datasource">   jdbcdriver com.mysql.jdbc.driver   jdbcurl jdbc:mysql://127.0.0.1:3306/facebook?autoreconnect=true   username root   password root   jtamanaged true </resource>  

what should add or remove make code controller work? (persist object in database)

2)second situation have is: since nothing persist in database strange me when try query records same table in tried persist, result got list of names have tried save in table. (all names tried save in dbase, not in dbase listed in jsp) test.jsp is:

<%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd">  <sql:query var="rs" datasource="jdbc/facebook">     select name books </sql:query>  <html>   <head>     <title>db test</title>   </head>   <body>    <h2>results</h2>   <c:foreach var="row" items="${rs.rows}">     name ${row.name}<br/>  </c:foreach>     </body> </html>  

this means datasource contain these data? why happening? how make data saved database? help... m new , precious :)

open server.xml file of server , add below content globalnamingresources section:

 <resource name="facebook"  auth="container"   type="javax.sql.datasource"  driverclassname="com.mysql.jdbc.driver"  url="jdbc:mysql://localhost:3306/facebook"   factory="org.apache.tomcat.jdbc.pool.datasourcefactory"  username="root"  password=""  maxactive="100"  maxidle="20"  minidle="5"  maxwait="10000" /> 

then remove resource definition application context.xml file , add following xml context.xml

<resourcelink         name="jdbc/facebook"         global="facebook"         type="javax.sql.datasource"         factory="org.apache.naming.factory.datasourcelinkfactory"/> 

and open persistence.xml file , update

<jta-data-source>jdbc/facebook</jta-data-source> 

restart server.


Comments