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
Post a Comment