From 20090609:1027
parallel
thread
----------------------------------------------------------------------------------------------
Gerhard,
1) For your first issue where there are deprecation warnings, check the
following
- are you using 2 or more persistence units in your persistence.xml? I
have 2 persistence units in my persistence.xml - I changed all 2 x 4 =
8 properties to get rid of warnings during preprocessing of both
persistence units.
- otherwise verify that your orm.xml is not overriding properties.
For example...
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Direct_connection_.28RESOURCE_LOCAL.29_Persistence.xml
>Before:
<property name="eclipselink.jdbc.driver"
value="oracle.jdbc.driver.OracleDriver"/>
<property name="eclipselink.jdbc.url"
value=
"jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="eclipselink.jdbc.user" value="user"/>
<property name="eclipselink.jdbc.password"
value="pw"/>
>generates
[EL Info]: 2009-06-09
09:23:48.156--ServerSession(18680399)--Thread(Thread[main,5,main])--property
eclipselink.jdbc.user is deprecated, property
javax.persistence.jdbc.user should be used instead.
[EL Info]: 2009-06-09
09:23:48.156--ServerSession(18680399)--Thread(Thread[main,5,main])--property
eclipselink.jdbc.driver is deprecated, property
javax.persistence.jdbc.driver should be used instead.
[EL Info]: 2009-06-09
09:23:48.156--ServerSession(18680399)--Thread(Thread[main,5,main])--property
eclipselink.jdbc.url is deprecated, property javax.persistence.jdbc.url
should be used instead.
[EL Info]: 2009-06-09
09:23:48.156--ServerSession(18680399)--Thread(Thread[main,5,main])--property
eclipselink.jdbc.password is deprecated, property
javax.persistence.jdbc.password should be used instead.
>After a change to
<property name="javax.persistence.jdbc.driver"
value="oracle.jdbc.driver.OracleDriver"/>
<property name="javax.persistence.jdbc.url"
value=
"jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="javax.persistence.jdbc.user"
value="user"/>
<property name="javax.persistence.jdbc.password"
value="pw"/>
>generates no more property warnings.
2) For your lack of DDL script output, check that you are using the
following format.
both drop-and-create-tables and create-tables will generate a
"dropDDL.jdbc" file.
The key is that you should use "eclipselink.application-location" and
not the spec defined "javax.persistence.application-location" property
yet.
>The following
<property name="eclipselink.ddl-generation"
value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation.output-mode"
value="both"/>
<property name="eclipselink.create-ddl-jdbc-file-name"
value="ddl.txt"/>
<property name="eclipselink.application-location"
value="c:/opt"/>
>generates
dropDDL.jdbc
ddl.txt (with create table DDL entries)
3) Table generator within a program?
See the usage of the following class
http://fisheye2.atlassian.com/browse/eclipselink/trunk/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/schemaframework/TableDefinition.java
by the class
http://fisheye2.atlassian.com/browse/eclipselink/trunk/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/schemaframework/TableCreator.java
using the method call
public void
replaceTables(org.eclipse.persistence.sessions.DatabaseSession session)
from for example
http://fisheye2.atlassian.com/browse/eclipselink/trunk/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/metamodel/MetamodelTest.java
Note: When you use table generation in this way outside of standard JPA
properties and annotations - you will be using native API of
EclipseLink.
thank you
/michael
Gerhard Kratz wrote:
Hello, Michael,
thank you very much for your fast and helpful response. Your unsigned
persistence jar-file really did it, the table generator works fine now.
In my case, which is admittedly a very simple one, it is even possible
to generate tables with
<property name="eclipselink.ddl-generation" value="create-tables" />
I tried to boil my entity declaration down to the absolute necessary,
the result is attached.
Some further feedback:
1. I changed all the prefixes of the properties in persistence.xml to javax.persistence as
you recommended.
But I'm still getting the follwing output lines:
[EL Info]: property eclipselink.jdbc.user is deprecated,
property
javax.persistence.jdbc.user should be used instead.
[EL Info]: property eclipselink.jdbc.driver is deprecated, property
javax.persistence.jdbc.driver should be used instead.
[EL Info]: property eclipselink.jdbc.url is deprecated, property
javax.persistence.jdbc.url should be used instead.
[EL Info]: property eclipselink.jdbc.password is deprecated, property
javax.persistence.jdbc.password should be used instead.
2. With the line
<property
name="javax.persistence.ddl-generation.output-mode" value="both"/>
I tried to prompt EclipseLink to output the DDL in a text
file,
as
well, which I then couldn't find in the directory specified in the XML
element
<property
name="javax.persistence.application-location" value="C:\JPA"/>
How can one call the table generator from within a program?
Let me say that I'm really impressed by your fast and effective support.
best regards
Gerhard
Michael O'Brien schrieb:
Gerhard,
Your directory structure looks fine - specifically the position of
persistence.xml off of META-INF is good.
You may use the following EclipseLink JPA SE schema generation
example as a reference.
There are differences in my database url (which includes a valid
schema - IE no "null" schema) and ddl generation properties that
include dropping the tables before recreating them - on each run.
jdbc:oracle:thin:@127.0.0.1:1521:orcl
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/examples/org.eclipse.persistence.example.jpa.server.common.ddlgen/
For point #6 where you get a signed jar exception after adding
eclipselink to your project...
- you can use the following unsigned persistence jar - I had the
same issue when initially setting up Tomcat for SE persistence a couple
days ago.
http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/plugins/javax.persistence_unsigned_for_testing_1.0.0.jar
- the deprecated jdbc properties are ok - just change to using
javax.persistence prefixes for the future
For point #7
- I have specified my schema on the url
- I have modified sequence generation on my entity from the
original Dali entity source generation.
http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/examples/org.eclipse.persistence.example.jpa.server.common.ddlgen/src/org/eclipse/persistence/example/jpa/server/business/Cell.java
thank you
/michael
Gerhard Kratz wrote:
Hello,
my e-mail client seems to have a line-feed aversion. What seems
important to me with the directory structure is:
- that file persistence.xml seems to be in the right place, namely in
the subdirectory META-INF
- a class file has been generated
best regards
Gerhard
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
--
Prof. Dr. Gerhard Kratz
Fachhochschule Frankfurt am Main
Fachbereich 2: Informatik und Ingenieurwissenschaften
Nibelungenplatz 1
60318 Frankfurt am Main
WWW: http://www.fh-frankfurt.de/~g_kratz
http://bscw.fh-frankfurt.de
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
The signing issue was from an issue with making the persistence.jar signed,
because EclipseLink ships JPA 2.0 classes in its own jar. You need to
either use the unsigned version of the persistence.jar (one that used to be
included in EclipseLink, or one from any other source), or replace your JPA
1.0 persistence.jar with the JPA 2.0 persistence.jar.
Gerhard Kratz wrote:
Hello,
since a few days I keep trying to generate SQL tables with EclipseLink
and Dali (JavaSE). I made the following experiment:
- using SQLExplorer I created an SQL table "employee" in database "test"
- set up a JPA project "Employee_1"
- successfully generated the entity "employee" from the above table with
the JPA tools
- again with SQLExplorer, dropped the table employee from the database
- unsuccessfully tried to re-generate this table from the entity
1. Software configuration:
eclipse-jee-ganymede-SR2-win32
eclipselink-2.0.0.v20090604-r4409
wtp-S-3.1RC3-20090602055316
MySQL 5.1
mysql-connector-java-5.1.7
2. The configuration of the JPA project:
projekt name: Employee_1
target runtime: <None>
configuration: Employee_1_Facets, containing:
- Java 6.0
- Java Persistence 1.0
- Utility Module
- Platform: EclpiseLink
- Connection: MySQL-2, via MySQL JDBC Driver with the following
properties:
- Database: test
- URL: jdbc:mysql://localhost:3306/
- User name: <user name>
- Password: <password>
[x] Save password
When testing this connection the ping was successful.
- implementation library: ECLIPSELINK_USER_LIB, containing:
- eclipselink.jar
- javax.persistence_1.0.0v200905011740.jar
- javax.persistence_2.0_preview.jar
- Persistent class management: Discover annotated classes
automatically
[x] Create orm.xml
3. persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence""http://www.w3.org/2001/XMLSchema-instance""http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="Employee_1" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<properties>
<property name="eclipselink.jdbc.url"
value="jdbc:mysql://localhost:3306/"/>
<property name="eclipselink.jdbc.user" value= <user name> />
<property name="eclipselink.jdbc.password" value= <password> />
<property name="eclipselink.jdbc.driver"
value="com.mysql.jdbc.Driver"/>
<property name="eclipselink.ddl-generation"
value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode"
value="both"/>
<property name="eclipselink.application-location" value=
<location> />
</properties>
</persistence-unit>
</persistence>
4. Project directory tree after generating entity class "employee" from
the respective table:
Employee_1
| .classpath
| .project
| +---.settings
| org.eclipse.jdt.core.prefs
| org.eclipse.jpt.core.prefs
| org.eclipse.jst.common.project.facet.core.prefs
| org.eclipse.wst.common.component
| org.eclipse.wst.common.project.facet.core.xml
| +---build
| +---classes
| +---employee1
| | Employee.class
| | | +---META-INF
| MANIFEST.MF
| orm.xml
| persistence.xml
+---src
+---employee1
| Employee.java
| +---META-INF
MANIFEST.MF
orm.xml
persistence.xml
5. Trying to generate table "employee" gives the following
error message:
Exception in thread "main" javax.persistence.PersistenceException: No
Persistence provider for EntityManager named Employee_1
at
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89)
at org.eclipse.jpt.eclipselink.core.ddlgen.Main.execute(Main.java:77)
at org.eclipse.jpt.eclipselink.core.ddlgen.Main.main(Main.java:65)
although I named a persistence provider in my persistence.xml which is
contained in eclipselink.jar which itself is included in my user library
ECLIPSELINK_USER_LIB.
6. Next, I imported this project into a newly installed workspace with a
shorter pathname without any spaces ("C:\JPA").
Now, in persistence.xml the following line is added:
<class>employee1.Employee</class>
When I try again to generate the table, I get this error message:
[EL Finest]: 2009-06-08
11:23:11.296--ServerSession(22522451)--Thread(Thread[main,5,main])--property=eclipselink.logging.timestamp;
value=false
[EL Finest]:
ServerSession(22522451)--Thread(Thread[main,5,main])--property=eclipselink.logging.thread;
value=false
[EL Finest]:
ServerSession(22522451)--property=eclipselink.logging.session; value=false
[EL Finest]: property=eclipselink.logging.exceptions; value=true
[EL Finest]: Begin predeploying Persistence Unit Employee_1; state
Initial; factoryCount 0
[EL Info]: property eclipselink.jdbc.user is deprecated, property
javax.persistence.jdbc.user should be used instead.
[EL Info]: property eclipselink.jdbc.driver is deprecated, property
javax.persistence.jdbc.driver should be used instead.
[EL Info]: property eclipselink.jdbc.url is deprecated, property
javax.persistence.jdbc.url should be used instead.
[EL Info]: property eclipselink.jdbc.password is deprecated, property
javax.persistence.jdbc.password should be used instead.
[EL Finest]: property=eclipselink.weaving; value=false
[EL Finest]: property=eclipselink.orm.throw.exceptions; value=true
[EL Finer]: Searching for default mapping file in
file:/C:/JPA/Employee_1/build/classes/
[EL Finer]: Found a default mapping file at
file:/C:/JPA/Employee_1/build/classes/META-INF/orm.xml for root URL
file:/C:/JPA/Employee_1/build/classes/
[EL Finer]: Searching for default mapping file in
file:/C:/JPA/Employee_1/build/classes/
[EL Config]: The access type for the persistent class [class
employee1.Employee] is set to [FIELD].
[EL Config]: The alias name for the entity class [class
employee1.Employee] is being defaulted to: Employee.
Exception in thread "main" Local Exception Stack:
Exception [EclipseLink-30005] (Eclipse Persistence Services -
2.0.0.v20090604-r4409):
org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for
persistence archives with ClassLoader:
sun.misc.Launcher$AppClassLoader@11b86e7
Internal Exception: javax.persistence.PersistenceException: Exception
[EclipseLink-28018] (Eclipse Persistence Services -
2.0.0.v20090604-r4409):
org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [Employee_1]
failed.
Internal Exception: java.lang.SecurityException: class
"javax.persistence.ElementCollection"'s signer information does not
match signer information of other classes in the same package
at
org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:121)
at
org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:133)
at
org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:67)
at
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
at org.eclipse.jpt.eclipselink.core.ddlgen.Main.execute(Main.java:77)
at org.eclipse.jpt.eclipselink.core.ddlgen.Main.main(Main.java:65)
Caused by: javax.persistence.PersistenceException: Exception
[EclipseLink-28018] (Eclipse Persistence Services -
2.0.0.v20090604-r4409):
org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [Employee_1]
failed.
Internal Exception: java.lang.SecurityException: class
"javax.persistence.ElementCollection"'s signer information does not
match signer information of other classes in the same package
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:879)
at
org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.callPredeploy(JPAInitializer.java:110)
at
org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.initPersistenceUnits(JPAInitializer.java:159)
at
org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.initialize(JPAInitializer.java:144)
at
org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:105)
... 4 more
Caused by: Exception [EclipseLink-28018] (Eclipse Persistence Services -
2.0.0.v20090604-r4409):
org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [Employee_1]
failed.
Internal Exception: java.lang.SecurityException: class
"javax.persistence.ElementCollection"'s signer information does not
match signer information of other classes in the same package
at
org.eclipse.persistence.exceptions.EntityManagerSetupException.predeployFailed(EntityManagerSetupException.java:210)
... 9 more
Caused by: java.lang.SecurityException: class
"javax.persistence.ElementCollection"'s signer information does not
match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(Unknown Source)
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at
org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataAnnotatedElement.isElementCollection(MetadataAnnotatedElement.java:345)
at
org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor.buildAccessor(ClassAccessor.java:424)
at
org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor.addAccessorFields(ClassAccessor.java:344)
at
org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor.addAccessors(ClassAccessor.java:317)
at
org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.preProcess(EntityAccessor.java:600)
at
org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processStage1(MetadataProject.java:1028)
at
org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor.processORMMetadata(MetadataProcessor.java:451)
at
org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processORMetadata(PersistenceUnitProcessor.java:297)
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:839)
... 8 more
7. After a few seconds, my entity class file Employee.java exhibits the
following errors:
- Schema "null" cannot be resolved for table "Employee"
- Column "personid" cannot be resolved
- Column "name" cannot be resolved
I hope, someone can help me to get the table generator working.
best regards
Gerhard
xmlns:xsi= xsi:schemaLocation="
-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence