You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by coco <pe...@gmail.com> on 2015/07/17 16:28:52 UTC
How to persist object using Entity Manager and GenericDao Bean and
Tomee
I m in the beginning with Java EJB. :) I have Dynamic web project in eclipce
and i want to save object to mysql database. Dont understand why it is not
working since i do not have exceptions in my console.
I m using Apache Tomee server wich i 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 FROM " + 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 I have persistance.xml and 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"/>
</properties>
</persistence-unit>
</persistence>
In my src I 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 my console I 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 FROM 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 FROM 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 FROM PUBLIC.OPENJPA_SEQUENCE_TABLE WHERE 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 = ? WHERE ID = ? AND
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 INTO
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 for 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 sould I add or remove to make code from controller work? (persist
object in my database)
2)Second situation i have with this is:
Since nothing is persist in database it is very strange for me when i try to
query records from the same table in which i tried to persist, as a result i
got the list of all names that i have tried to save in table. (All the names
I tried to save in dbase, which are not in dbase are listed now in my jsp)
My 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 from books
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
Results
<c:forEach var="row" items="${rs.rows}">
Name ${row.name}<br/>
</c:forEach>
</body>
</html>
This means than datasource contain these data? Why is this happening? How to
make my data be saved to database? Any help...
I m new to this and all help will be precious :)
--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/How-to-persist-object-using-Entity-Manager-and-GenericDao-Bean-and-Tomee-tp4675519.html
Sent from the TomEE Users mailing list archive at Nabble.com.
Re: How to persist object using Entity Manager and GenericDao Bean
and Tomee
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi
Maybe check your logs to ensure you use the datasource you expect. You can
also check connecting through JMX to tomee in openejb MBeans.
Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> | Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>
2015-07-17 8:12 GMT-07:00 Leonardo K. Shikida <sh...@gmail.com>:
> actually, it seems something is being inserted somewhere
>
> TRACE [http-bio-8080-exec-7] openjpa.jdbc.SQL - <t
> 1249135181, conn 1798001212> executing prepstmnt 1563539472 INSERT INTO
> PUBLIC.books (ID, NAME) VALUES (?, ?) [params=?, ?]
>
>
> isn't something related to the autocommit?
>
>
> []
>
> Leo
>
> On Fri, Jul 17, 2015 at 11:28 AM, coco <pe...@gmail.com> wrote:
>
> > I m in the beginning with Java EJB. :) I have Dynamic web project in
> > eclipce
> > and i want to save object to mysql database. Dont understand why it is
> not
> > working since i do not have exceptions in my console.
> > I m using Apache Tomee server wich i 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 FROM " +
> > 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 I have persistance.xml and 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"/>
> >
> > </properties>
> > </persistence-unit>
> > </persistence>
> >
> > In my src I 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 my console I 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 FROM 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 FROM 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 FROM PUBLIC.OPENJPA_SEQUENCE_TABLE WHERE 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 = ? WHERE ID = ? AND
> > 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 INTO
> > 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 for 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 sould I add or remove to make code from controller work? (persist
> > object in my database)
> >
> > 2)Second situation i have with this is:
> > Since nothing is persist in database it is very strange for me when i try
> > to
> > query records from the same table in which i tried to persist, as a
> result
> > i
> > got the list of all names that i have tried to save in table. (All the
> > names
> > I tried to save in dbase, which are not in dbase are listed now in my
> jsp)
> > My 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 from books
> > </sql:query>
> >
> > <html>
> > <head>
> > <title>DB Test</title>
> > </head>
> > <body>
> >
> >
> > Results
> >
> >
> > <c:forEach var="row" items="${rs.rows}">
> > Name ${row.name}<br/>
> > </c:forEach>
> >
> > </body>
> > </html>
> >
> > This means than datasource contain these data? Why is this happening? How
> > to
> > make my data be saved to database? Any help...
> > I m new to this and all help will be precious :)
> >
> >
> >
> > --
> > View this message in context:
> >
> http://tomee-openejb.979440.n4.nabble.com/How-to-persist-object-using-Entity-Manager-and-GenericDao-Bean-and-Tomee-tp4675519.html
> > Sent from the TomEE Users mailing list archive at Nabble.com.
> >
>
Re: How to persist object using Entity Manager and GenericDao Bean
and Tomee
Posted by "Leonardo K. Shikida" <sh...@gmail.com>.
actually, it seems something is being inserted somewhere
TRACE [http-bio-8080-exec-7] openjpa.jdbc.SQL - <t
1249135181, conn 1798001212> executing prepstmnt 1563539472 INSERT INTO
PUBLIC.books (ID, NAME) VALUES (?, ?) [params=?, ?]
isn't something related to the autocommit?
[]
Leo
On Fri, Jul 17, 2015 at 11:28 AM, coco <pe...@gmail.com> wrote:
> I m in the beginning with Java EJB. :) I have Dynamic web project in
> eclipce
> and i want to save object to mysql database. Dont understand why it is not
> working since i do not have exceptions in my console.
> I m using Apache Tomee server wich i 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 FROM " +
> 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 I have persistance.xml and 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"/>
>
> </properties>
> </persistence-unit>
> </persistence>
>
> In my src I 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 my console I 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 FROM 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 FROM 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 FROM PUBLIC.OPENJPA_SEQUENCE_TABLE WHERE 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 = ? WHERE ID = ? AND
> 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 INTO
> 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 for 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 sould I add or remove to make code from controller work? (persist
> object in my database)
>
> 2)Second situation i have with this is:
> Since nothing is persist in database it is very strange for me when i try
> to
> query records from the same table in which i tried to persist, as a result
> i
> got the list of all names that i have tried to save in table. (All the
> names
> I tried to save in dbase, which are not in dbase are listed now in my jsp)
> My 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 from books
> </sql:query>
>
> <html>
> <head>
> <title>DB Test</title>
> </head>
> <body>
>
>
> Results
>
>
> <c:forEach var="row" items="${rs.rows}">
> Name ${row.name}<br/>
> </c:forEach>
>
> </body>
> </html>
>
> This means than datasource contain these data? Why is this happening? How
> to
> make my data be saved to database? Any help...
> I m new to this and all help will be precious :)
>
>
>
> --
> View this message in context:
> http://tomee-openejb.979440.n4.nabble.com/How-to-persist-object-using-Entity-Manager-and-GenericDao-Bean-and-Tomee-tp4675519.html
> Sent from the TomEE Users mailing list archive at Nabble.com.
>