Home » Eclipse Projects » EclipseLink » Object: is not a known entity type.(Entity Meta-Data is not recognised ?)
| Object: is not a known entity type. [message #728933] |
Sat, 24 September 2011 08:50  |
Patrick Philips Messages: 13 Registered: February 2011 |
Junior Member |
|
|
Hi everyone,
I have a real problem where my entity to persist is not recognised. I have been banging my head against for several days now, and any help would be very much appreciated.
Eclipse Platform: Indigo Version: 3.7.0.v20110530
I have incorporated EclipseLink 2.3.0 JPA into my RCP project and am using the Apache Derby data base to persist data. No problems with installation and setting up data base in Eclipse. However when I try to persist data to the data base I get the following errors: (sorry for the long trace ... didn't want to leave out anything that was relevant!).
[EL Finest]: 2011-09-24 07:34:59.778--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--Begin predeploying Persistence Unit JPA1PU; session bundleresource://4.fwk511811991:1_JPA1PU; state Initial; factoryCount 0
[EL Finest]: 2011-09-24 07:34:59.809--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=eclipselink.orm.throw.exceptions; default value=true
[EL Finest]: 2011-09-24 07:34:59.809--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=eclipselink.multitenant.tenants-share-cache; default value=false
[EL Finest]: 2011-09-24 07:34:59.825--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=eclipselink.metadata-source; default value=null
[EL Finest]: 2011-09-24 07:34:59.825--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=eclipselink.jpa.uppercase-column-names; default value=false
[EL Finer]: 2011-09-24 07:34:59.825--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--Searching for default mapping file in bundleresource://4.fwk511811991:1
[EL Finer]: 2011-09-24 07:34:59.842--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--Searching for default mapping file in bundleresource://4.fwk511811991:1
[EL Finest]: 2011-09-24 07:34:59.888--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--End predeploying Persistence Unit JPA1PU; session bundleresource://4.fwk511811991:1_JPA1PU; state Predeployed; factoryCount 0
[EL Finer]: 2011-09-24 07:34:59.888--Thread(Thread[AWT-EventQueue-0,6,main])--JavaSECMPInitializer - transformer is null.
[EL Finest]: 2011-09-24 07:34:59.888--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--Begin predeploying Persistence Unit JPA1PU; session bundleresource://4.fwk511811991:1_JPA1PU; state Predeployed; factoryCount 0
[EL Finest]: 2011-09-24 07:34:59.888--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--End predeploying Persistence Unit JPA1PU; session bundleresource://4.fwk511811991:1_JPA1PU; state Predeployed; factoryCount 1
[EL Finest]: 2011-09-24 07:35:00.934--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--Begin deploying Persistence Unit JPA1PU; session bundleresource://4.fwk511811991:1_JPA1PU; state Predeployed; factoryCount 1
[EL Finer]: 2011-09-24 07:35:00.934--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--Could not initialize Validation Factory. Encountered following exception: java.lang.NoClassDefFoundError: javax/validation/Validation
[EL Finest]: 2011-09-24 07:35:00.934--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=eclipselink.logging.level; value=FINEST; translated value=FINEST
[EL Finest]: 2011-09-24 07:35:00.949--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=eclipselink.logging.level; value=FINEST; translated value=FINEST
[EL Finest]: 2011-09-24 07:35:00.949--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=javax.persistence.jdbc.user; value=Patrick
[EL Finest]: 2011-09-24 07:35:00.949--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=javax.persistence.jdbc.password; value=xxxxxx
[EL Finest]: 2011-09-24 07:35:23.211--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=eclipselink.target-database; value=Derby; translated value=org.eclipse.persistence.platform.database.DerbyPlatform
[EL Finest]: 2011-09-24 07:35:23.227--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=javax.persistence.jdbc.driver; value=org.apache.derby.jdbc.EmbeddedDriver
[EL Finest]: 2011-09-24 07:35:23.227--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--property=javax.persistence.jdbc.url; value=jdbc:derby:/Users/Patrick/MyDB;create=true
[EL Info]: 2011-09-24 07:35:23.227--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
[EL Config]: 2011-09-24 07:35:23.227--ServerSession(1136315517)--Connection(1700797952)--Thread(Thread[AWT-EventQueue-0,6,main])--connecting(DatabaseLogin(
platform=>DerbyPlatform
user name=> "Patrick"
datasource URL=> "jdbc:derby:/Users/Patrick/MyDB;create=true"
))
[EL Finer]: 2011-09-24 07:35:23.665--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--DriverManager connect failed, trying direct connect.
[EL Finer]: 2011-09-24 07:35:23.665--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--java.sql.SQLException: No suitable driver found for jdbc:derby:/Users/Patrick/MyDB;create=true
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:98)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:293)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:418)
at org.eclipse.persistence.sessions.server.ConnectionPool.buildConnection(ConnectionPool.java:216)
at org.eclipse.persistence.sessions.server.ConnectionPool.startUp(ConnectionPool.java:504)
at org.eclipse.persistence.sessions.server.ServerSession.connect(ServerSession.java:484)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:630)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:208)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:472)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getMetamodel(EntityManagerFactoryDelegate.java:591)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getMetamodel(EntityManagerFactoryImpl.java:502)
at emdd.test.JPATest.init(JPATest.java:59)
at emdd.test.WBTestAddPanel$4.mouseClicked(WBTestAddPanel.java:86)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.Component.processMouseEvent(Component.java:6270)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
[EL Config]: 2011-09-24 07:35:24.117--ServerSession(1136315517)--Connection(534738380)--Thread(Thread[AWT-EventQueue-0,6,main])--Connected: jdbc:derby:/Users/Patrick/MyDB
User: Patrick
Database: Apache Derby Version: 10.8.1.2 - (1095077)
Driver: Apache Derby Embedded JDBC Driver Version: 10.8.1.2 - (1095077)
[EL Finest]: 2011-09-24 07:35:24.117--ServerSession(1136315517)--Connection(534738380)--Thread(Thread[AWT-EventQueue-0,6,main])--Connection acquired from connection pool [default].
[EL Finest]: 2011-09-24 07:35:24.133--ServerSession(1136315517)--Connection(534738380)--Thread(Thread[AWT-EventQueue-0,6,main])--Connection released to connection pool [default].
[EL Info]: 2011-09-24 07:35:24.133--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--bundleresource://4.fwk511811991:1_JPA1PU login successful
[EL Warning]: 2011-09-24 07:35:24.164--Thread(Thread[AWT-EventQueue-0,6,main])--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
[EL Finer]: 2011-09-24 07:35:24.164--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
[EL Finest]: 2011-09-24 07:35:24.164--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--End deploying Persistence Unit JPA1PU; session bundleresource://4.fwk511811991:1_JPA1PU; state Deployed; factoryCount 1
MetaModel: MetamodelImpl@11975273 [ 0 Types: , 0 ManagedTypes: , 0 EntityTypes: , 0 MappedSuperclassTypes: , 0 EmbeddableTypes: ]
[EL Finer]: 2011-09-24 07:36:40.495--ServerSession(1136315517)--Thread(Thread[AWT-EventQueue-0,6,main])--client acquired: 592489859
[EL Finer]: 2011-09-24 07:36:40.511--ClientSession(592489859)--Thread(Thread[AWT-EventQueue-0,6,main])--acquire unit of work: 2018338552
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Object: org.persistence.Entity2@2dec3ffd is not a known entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4158)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:440)
at emdd.test.JPATest.init(JPATest.java:73)
at emdd.test.WBTestAddPanel$4.mouseClicked(WBTestAddPanel.java:86)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.Component.processMouseEvent(Component.java:6270)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
My persistence.xml file is:
<?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="JPA1PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>org.persistence.Entity2</class>
<class>org.persistence.Entity1</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="eclipselink.target-database" value="Derby"/>
<property name="javax.persistence.jdbc.user" value="Patrick"/>
<property name="eclipselink.logging.level" value="FINEST"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:/Users/Patrick/MyDB;create=true"/>
<property name="javax.persistence.jdbc.password" value="xxxxxx"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database"/>
</properties>
</persistence-unit>
</persistence>
which includes references to the <class> elements and <exclude-unlisted-classes>false</exclude-unlisted-classes> so I don't see the problem in the persistence.xml file.
The test code I am using to exercise the connection and persist some test data is:
public ClassLoader getJPAClassLoader() {
//return this.getClass().getClassLoader();
return org.apache.derby.jdbc.EmbeddedDriver.class.getClassLoader();
}
public void init(){
HashMap properties = new HashMap();
ClassLoader cL = getJPAClassLoader();
properties.put(PersistenceUnitProperties.CLASSLOADER, cL);
emFactory = new org.eclipse.persistence.jpa.PersistenceProvider().createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties);
System.out.println("MetaModel: " + emFactory.getMetamodel());
em = emFactory.createEntityManager();
em.getTransaction().begin();
Entity1 ent1 = new Entity1();
Entity2 ent2 = new org.persistence.Entity2();
ent1.setADDRESS("My Address1");
ent2.setAddress("My Addresss2");
ent1.setSTREET("My Street1");
em.persist(ent2);
em.persist(ent1);
em.getTransaction().commit();
em.close();
}
My entity file Entity2 is as follows:
package org.persistence;
import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Entity2
*
*/
@Entity
public class Entity2 implements Serializable {
@Id
private long Id;
private String Address;
private static final long serialVersionUID = 1L;
public Entity2() {
super();
}
public long getId() {
return this.Id;
}
public void setId(long Id) {
this.Id = Id;
}
public String getAddress() {
return this.Address;
}
public void setAddress(String Address) {
this.Address = Address;
}
}
Any help would really be appreciated as I have exhausted my web-site search options hoping to find an answer to this one.
Thanks in advance.
Patrick.
|
|
| | | | | |
| Re: Object: is not a known entity type. [message #758006 is a reply to message #746987] |
Sat, 19 November 2011 19:13  |
Patrick Philips Messages: 13 Registered: February 2011 |
Junior Member |
|
|
Klaus I just sent a reply but I'm not sure that it was delivered properly as the forum connection went down. Just in case you didn't receive it here again is my solution to your question :
I finally got things sorted out and it was partly associated with the class loader but also to do with some "quirks" of EclipseLink.
I am showing what I had to do below so that no-one else has to suffer the extreme frustration I have, which took me 2 weeks to solve.
Note: this applies to using EclipseLink in an RCP development project. I am using the Apache Derby Embedded data base and I cannot verify that what I describe below will be applicable to other data bases (although I suspect it is!).
1. In the persistence.xml file remove the reference for the Persistence Provider. (I know all on-line examples have this ... but mine would not work with it in!).
2. In the java file that creates the data base in the import section ensure you have the following imports:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.jpa.osgi.PersistenceProvider;
import emdd.Activator;
3. Ensure that you DO NOT have the following imports:
import org.eclipse.persistence.jpa.osgi.*;
import org.eclipse.persistence.jpa.PersistenceProvider;
Many of the on-line examples you will come across will tell you to have these imports. DO NOT use them they seem to cause a conflict in the class loading which is not reported and which seems to stop the loading of the classes defined in the managed classes for the persistence unit defined, either in the persistence.xml file or programatically. This was the main source of my problems.
4. You seem to need to have an application Activator class and to set this as the class loader before creating the data base entity manager i.e.
String PERSISTENCE_UNIT_NAME = "myPersistenceUnit";
ClassLoader cL = Activator.class.getClassLoader();
properties.put(PersistenceUnitProperties.CLASSLOADER, cL);
properties.put(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_UNITS, PERSISTENCE_UNIT_NAME);
//create the data base ...
emFactory = new PersistenceProvider().createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties);
em = emFactory.createEntityManager();
So ensure your RCP project has an Activator class. I tried using the Application class (amongst others !) and it didn't work; I don't fully understand why and at this point I haven't the time to spend digging through the Eclipse code to find out.
At this point you should be able to create and use a data base entity manager to persist and retrieve data.
I have put this up here so hopefully anyone facing the same problems I did will have an easier time. Anyone reading this who has a web-site or blog for these types of problems please feel free to post it so that anyone suffering the same issues can hopefully find a solution.
|
|
|
Goto Forum:
Current Time: Thu May 23 04:08:21 EDT 2013
Powered by FUDForum. Page generated in 0.01853 seconds
|