PDA

View Full Version : exception in JPA



pro_mvb
دوشنبه 29 آبان 1391, 15:31 عصر
سلام
من یه jpa دارم که موقع اجرای برنامه وقتی میخواد یه چیزی رو insert کنه بعد از سابمیت این اررور رو میده:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception
javax.servlet.ServletException: javax.persistence.PersistenceException: Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationExcep tion
Exception Description: Cannot acquire data source [myJPA].
Internal Exception: javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


root cause
javax.persistence.PersistenceException: Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationExcep tion
Exception Description: Cannot acquire data source [myJPA].
Internal Exception: javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
org.eclipse.persistence.internal.jpa.EntityManager SetupImpl.deploy(EntityManagerSetupImpl.java:501)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.getDatabaseSession(EntityManagerFa ctoryDelegate.java:188)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.createEntityManagerImpl(EntityMana gerFactoryDelegate.java:277)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManagerImpl(EntityManagerF actoryImpl.java:290)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManager(EntityManagerFacto ryImpl.java:268)
ir.org.acm.biz.dao.ProductControllerJPA.<init>(ProductControllerJPA.java:14)
ir.org.acm.web.actions.InsertProduct.perform(Inser tProduct.java:21)
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


root cause
Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationExcep tion
Exception Description: Cannot acquire data source [myJPA].
Internal Exception: javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
org.eclipse.persistence.exceptions.ValidationExcep tion.cannotAcquireDataSource(ValidationException.j ava:485)
org.eclipse.persistence.sessions.JNDIConnector.con nect(JNDIConnector.java:109)
org.eclipse.persistence.sessions.DatasourceLogin.c onnectToDatasource(DatasourceLogin.java:162)
org.eclipse.persistence.internal.sessions.Database SessionImpl.loginAndDetectDatasource(DatabaseSessi onImpl.java:582)
org.eclipse.persistence.internal.jpa.EntityManager FactoryProvider.login(EntityManagerFactoryProvider .java:206)
org.eclipse.persistence.internal.jpa.EntityManager SetupImpl.deploy(EntityManagerSetupImpl.java:472)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.getDatabaseSession(EntityManagerFa ctoryDelegate.java:188)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.createEntityManagerImpl(EntityMana gerFactoryDelegate.java:277)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManagerImpl(EntityManagerF actoryImpl.java:290)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManager(EntityManagerFacto ryImpl.java:268)
ir.org.acm.biz.dao.ProductControllerJPA.<init>(ProductControllerJPA.java:14)
ir.org.acm.web.actions.InsertProduct.perform(Inser tProduct.java:21)
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


root cause
javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
org.apache.naming.NamingContext.lookup(NamingConte xt.java:803)
org.apache.naming.NamingContext.lookup(NamingConte xt.java:145)
org.apache.naming.SelectorContext.lookup(SelectorC ontext.java:135)
javax.naming.InitialContext.lookup(InitialContext. java:415)
org.eclipse.persistence.sessions.JNDIConnector.con nect(JNDIConnector.java:103)
org.eclipse.persistence.sessions.DatasourceLogin.c onnectToDatasource(DatasourceLogin.java:162)
org.eclipse.persistence.internal.sessions.Database SessionImpl.loginAndDetectDatasource(DatabaseSessi onImpl.java:582)
org.eclipse.persistence.internal.jpa.EntityManager FactoryProvider.login(EntityManagerFactoryProvider .java:206)
org.eclipse.persistence.internal.jpa.EntityManager SetupImpl.deploy(EntityManagerSetupImpl.java:472)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.getDatabaseSession(EntityManagerFa ctoryDelegate.java:188)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.createEntityManagerImpl(EntityMana gerFactoryDelegate.java:277)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManagerImpl(EntityManagerF actoryImpl.java:290)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManager(EntityManagerFacto ryImpl.java:268)
ir.org.acm.biz.dao.ProductControllerJPA.<init>(ProductControllerJPA.java:14)
ir.org.acm.web.actions.InsertProduct.perform(Inser tProduct.java:21)
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.22 logs.
Apache Tomcat/7.0.22


اینم محتویات فایل context:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ProductManagerMVC">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="myJNDI" password="root" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/Product" username="root"/>
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="my" password="root" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/Product" username="root"/>
</Context>



اینم محتویات persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>my</non-jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/product"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
</properties>
</persistence-unit>
</persistence>



فقط یه حورده سریع چون من اصل کارم جای دیگس حالا این وسط اینم بازی در میاره:عصبانی:

javaphantom
دوشنبه 29 آبان 1391, 23:21 عصر
سلام
من یه jpa دارم که موقع اجرای برنامه وقتی میخواد یه چیزی رو insert کنه بعد از سابمیت این اررور رو میده:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception
javax.servlet.ServletException: javax.persistence.PersistenceException: Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationExcep tion
Exception Description: Cannot acquire data source [myJPA].
Internal Exception: javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


root cause
javax.persistence.PersistenceException: Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationExcep tion
Exception Description: Cannot acquire data source [myJPA].
Internal Exception: javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
org.eclipse.persistence.internal.jpa.EntityManager SetupImpl.deploy(EntityManagerSetupImpl.java:501)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.getDatabaseSession(EntityManagerFa ctoryDelegate.java:188)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.createEntityManagerImpl(EntityMana gerFactoryDelegate.java:277)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManagerImpl(EntityManagerF actoryImpl.java:290)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManager(EntityManagerFacto ryImpl.java:268)
ir.org.acm.biz.dao.ProductControllerJPA.<init>(ProductControllerJPA.java:14)
ir.org.acm.web.actions.InsertProduct.perform(Inser tProduct.java:21)
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


root cause
Exception [EclipseLink-7060] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationExcep tion
Exception Description: Cannot acquire data source [myJPA].
Internal Exception: javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
org.eclipse.persistence.exceptions.ValidationExcep tion.cannotAcquireDataSource(ValidationException.j ava:485)
org.eclipse.persistence.sessions.JNDIConnector.con nect(JNDIConnector.java:109)
org.eclipse.persistence.sessions.DatasourceLogin.c onnectToDatasource(DatasourceLogin.java:162)
org.eclipse.persistence.internal.sessions.Database SessionImpl.loginAndDetectDatasource(DatabaseSessi onImpl.java:582)
org.eclipse.persistence.internal.jpa.EntityManager FactoryProvider.login(EntityManagerFactoryProvider .java:206)
org.eclipse.persistence.internal.jpa.EntityManager SetupImpl.deploy(EntityManagerSetupImpl.java:472)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.getDatabaseSession(EntityManagerFa ctoryDelegate.java:188)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.createEntityManagerImpl(EntityMana gerFactoryDelegate.java:277)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManagerImpl(EntityManagerF actoryImpl.java:290)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManager(EntityManagerFacto ryImpl.java:268)
ir.org.acm.biz.dao.ProductControllerJPA.<init>(ProductControllerJPA.java:14)
ir.org.acm.web.actions.InsertProduct.perform(Inser tProduct.java:21)
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


root cause
javax.naming.NameNotFoundException: Name myJPA is not bound in this Context
org.apache.naming.NamingContext.lookup(NamingConte xt.java:803)
org.apache.naming.NamingContext.lookup(NamingConte xt.java:145)
org.apache.naming.SelectorContext.lookup(SelectorC ontext.java:135)
javax.naming.InitialContext.lookup(InitialContext. java:415)
org.eclipse.persistence.sessions.JNDIConnector.con nect(JNDIConnector.java:103)
org.eclipse.persistence.sessions.DatasourceLogin.c onnectToDatasource(DatasourceLogin.java:162)
org.eclipse.persistence.internal.sessions.Database SessionImpl.loginAndDetectDatasource(DatabaseSessi onImpl.java:582)
org.eclipse.persistence.internal.jpa.EntityManager FactoryProvider.login(EntityManagerFactoryProvider .java:206)
org.eclipse.persistence.internal.jpa.EntityManager SetupImpl.deploy(EntityManagerSetupImpl.java:472)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.getDatabaseSession(EntityManagerFa ctoryDelegate.java:188)
org.eclipse.persistence.internal.jpa.EntityManager FactoryDelegate.createEntityManagerImpl(EntityMana gerFactoryDelegate.java:277)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManagerImpl(EntityManagerF actoryImpl.java:290)
org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManager(EntityManagerFacto ryImpl.java:268)
ir.org.acm.biz.dao.ProductControllerJPA.<init>(ProductControllerJPA.java:14)
ir.org.acm.web.actions.InsertProduct.perform(Inser tProduct.java:21)
ir.org.acm.web.mvcframework.ActionServlet.service( ActionServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:393)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.22 logs.
Apache Tomcat/7.0.22


اینم محتویات فایل context:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ProductManagerMVC">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="myJNDI" password="root" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/Product" username="root"/>
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="my" password="root" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/Product" username="root"/>
</Context>



اینم محتویات persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>my</non-jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/product"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
</properties>
</persistence-unit>
</persistence>



فقط یه حورده سریع چون من اصل کارم جای دیگس حالا این وسط اینم بازی در میاره:عصبانی:



داستان اینکه شما توی فایل persistence.xml یک unit name داری به نام myJPA

اما وقتی که داری entitymanager رو درست می کنی توی اون context که نمی دونم چی هست myJPA رو نمی شناسه. بیشتر توضیح بده که چی کار کردی

pro_mvb
دوشنبه 29 آبان 1391, 23:35 عصر
package ir.org.acm.biz.dao;

import ir.org.acm.biz.entity.Product;
import java.util.*;
import javax.persistence.*;

public class ProductControllerJPA {

private EntityManager em;

public ProductControllerJPA() {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("myJPA");
this.em = emf.createEntityManager();
}

public void insert(Product p) {
em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
}

public Product findById(int id) {
return em.find(Product.class,id);
}

public Product findByTitle(String title) {

Product p = null;
String jpql = "select p from Product p where p.title = :t";
Query q = em.createQuery(jpql);
q.setParameter("t", title);
try {
p = (Product) q.getSingleResult();
} catch (Exception e) {
System.out.println("Product Not Found!");
}
return p;

}

public Product findByTitle2(String title) {

Product p = null;
Query q = em.createNamedQuery("Product.findByTitle");
q.setParameter("title", title);
try {
p = (Product) q.getSingleResult();
} catch (Exception e) {
System.out.println("Product Not Found!");
}
return p;

}

public List<Product> findByMaxPrice(int max) {
List<Product> list = null;
String jpql = "select p from Product p where p.price <= :max";
Query q = em.createQuery(jpql);
q.setParameter("max", max);
list = (List<Product>) q.getResultList();
return list;
}

public List<Product> findByMaxPrice2(int max) {
return (List<Product>) em
.createQuery("select p from Product p where p.price <= :max")
.setParameter("max", max)
.getResultList();
}

public List findAll() {
List list = null;
Query q = em.createQuery("select p.title, p.description, p.price from Product p");
list = q.getResultList();
return list;
}



}