HHH-4711 HHH-4667 validate persistence.xml and make sure it works for both persistence_1_0.xsd and persistence_2_0.xsd
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18259 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
3bb271ee9c
commit
fbf7b91d4d
|
@ -32,6 +32,8 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Resolve JPA xsd files locally
|
||||||
|
*
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
public class EJB3DTDEntityResolver extends DTDEntityResolver {
|
public class EJB3DTDEntityResolver extends DTDEntityResolver {
|
||||||
|
@ -41,49 +43,38 @@ public class EJB3DTDEntityResolver extends DTDEntityResolver {
|
||||||
|
|
||||||
boolean resolved = false;
|
boolean resolved = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persistence.xml has been resolved locally
|
||||||
|
* @return true if it has
|
||||||
|
*/
|
||||||
public boolean isResolved() {
|
public boolean isResolved() {
|
||||||
return resolved;
|
return resolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputSource resolveEntity(String publicId, String systemId) {
|
public InputSource resolveEntity(String publicId, String systemId) {
|
||||||
|
log.trace("Resolving XML entity {} : {}", publicId, systemId);
|
||||||
InputSource is = super.resolveEntity( publicId, systemId );
|
InputSource is = super.resolveEntity( publicId, systemId );
|
||||||
if ( is == null ) {
|
if ( is == null ) {
|
||||||
if ( systemId != null ) {
|
if ( systemId != null ) {
|
||||||
if ( systemId.endsWith( "orm_1_0.xsd" ) ) {
|
if ( systemId.endsWith( "orm_1_0.xsd" ) ) {
|
||||||
log.debug(
|
InputStream dtdStream = getStreamFromClasspath( "orm_1_0.xsd" );
|
||||||
"recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb"
|
final InputSource source = buildInputSource( publicId, systemId, dtdStream, false );
|
||||||
);
|
if (source != null) return source;
|
||||||
String path = "org/hibernate/ejb/" + "orm_1_0.xsd";
|
|
||||||
InputStream dtdStream = resolveInHibernateNamespace( path );
|
|
||||||
if ( dtdStream == null ) {
|
|
||||||
log.debug( "unable to locate [{}] on classpath", systemId );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
log.debug( "located [{}] in classpath", systemId );
|
|
||||||
InputSource source = new InputSource( dtdStream );
|
|
||||||
source.setPublicId( publicId );
|
|
||||||
source.setSystemId( systemId );
|
|
||||||
resolved = false;
|
|
||||||
return source;
|
|
||||||
}
|
}
|
||||||
|
else if ( systemId.endsWith( "orm_2_0.xsd" ) ) {
|
||||||
|
InputStream dtdStream = getStreamFromClasspath( "orm_2_0.xsd" );
|
||||||
|
final InputSource source = buildInputSource( publicId, systemId, dtdStream, false );
|
||||||
|
if (source != null) return source;
|
||||||
}
|
}
|
||||||
else if ( systemId.endsWith( "persistence_1_0.xsd" ) ) {
|
else if ( systemId.endsWith( "persistence_1_0.xsd" ) ) {
|
||||||
log.debug(
|
InputStream dtdStream = getStreamFromClasspath( "persistence_1_0.xsd" );
|
||||||
"recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb"
|
final InputSource source = buildInputSource( publicId, systemId, dtdStream, true );
|
||||||
);
|
if (source != null) return source;
|
||||||
String path = "org/hibernate/ejb/" + "persistence_1_0.xsd";
|
|
||||||
InputStream dtdStream = resolveInHibernateNamespace( path );
|
|
||||||
if ( dtdStream == null ) {
|
|
||||||
log.debug( "unable to locate [{}] on classpath", systemId );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
log.debug( "located [{}] in classpath", systemId );
|
|
||||||
InputSource source = new InputSource( dtdStream );
|
|
||||||
source.setPublicId( publicId );
|
|
||||||
source.setSystemId( systemId );
|
|
||||||
resolved = true;
|
|
||||||
return source;
|
|
||||||
}
|
}
|
||||||
|
else if ( systemId.endsWith( "persistence_2_0.xsd" ) ) {
|
||||||
|
InputStream dtdStream = getStreamFromClasspath( "persistence_2_0.xsd" );
|
||||||
|
final InputSource source = buildInputSource( publicId, systemId, dtdStream, true );
|
||||||
|
if (source != null) return source;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,4 +85,28 @@ public class EJB3DTDEntityResolver extends DTDEntityResolver {
|
||||||
//use the default behavior
|
//use the default behavior
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private InputSource buildInputSource(String publicId, String systemId, InputStream dtdStream, boolean resolved) {
|
||||||
|
if ( dtdStream == null ) {
|
||||||
|
log.trace( "unable to locate [{}] on classpath", systemId );
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log.trace( "located [{}] in classpath", systemId );
|
||||||
|
InputSource source = new InputSource( dtdStream );
|
||||||
|
source.setPublicId( publicId );
|
||||||
|
source.setSystemId( systemId );
|
||||||
|
this.resolved = resolved;
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputStream getStreamFromClasspath(String fileName) {
|
||||||
|
log.trace(
|
||||||
|
"recognized JPA ORM namespace; attempting to resolve on classpath under org/hibernate/ejb"
|
||||||
|
);
|
||||||
|
String path = "org/hibernate/ejb/" + fileName;
|
||||||
|
InputStream dtdStream = resolveInHibernateNamespace( path );
|
||||||
|
return dtdStream;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,10 @@
|
||||||
<param name="extension" value="par"/>
|
<param name="extension" value="par"/>
|
||||||
<param name="jarname" value="defaultpar"/>
|
<param name="jarname" value="defaultpar"/>
|
||||||
</antcall>
|
</antcall>
|
||||||
|
<antcall target="packjar" inheritall="true">
|
||||||
|
<param name="extension" value="par"/>
|
||||||
|
<param name="jarname" value="defaultpar_1_0"/>
|
||||||
|
</antcall>
|
||||||
<antcall target="packjar" inheritall="true">
|
<antcall target="packjar" inheritall="true">
|
||||||
<param name="extension" value="par"/>
|
<param name="extension" value="par"/>
|
||||||
<param name="jarname" value="space par"/>
|
<param name="jarname" value="space par"/>
|
||||||
|
|
|
@ -181,6 +181,7 @@
|
||||||
<additionalClasspathElements>
|
<additionalClasspathElements>
|
||||||
<additionalClasspathElement>${basedir}/target/test-packages/cfgxmlpar.par</additionalClasspathElement>
|
<additionalClasspathElement>${basedir}/target/test-packages/cfgxmlpar.par</additionalClasspathElement>
|
||||||
<additionalClasspathElement>${basedir}/target/test-packages/defaultpar.par</additionalClasspathElement>
|
<additionalClasspathElement>${basedir}/target/test-packages/defaultpar.par</additionalClasspathElement>
|
||||||
|
<additionalClasspathElement>${basedir}/target/test-packages/defaultpar_1_0.par</additionalClasspathElement>
|
||||||
<additionalClasspathElement>${basedir}/target/test-packages/excludehbmpar.par</additionalClasspathElement>
|
<additionalClasspathElement>${basedir}/target/test-packages/excludehbmpar.par</additionalClasspathElement>
|
||||||
<additionalClasspathElement>${basedir}/target/test-packages/explicitpar.par</additionalClasspathElement>
|
<additionalClasspathElement>${basedir}/target/test-packages/explicitpar.par</additionalClasspathElement>
|
||||||
<additionalClasspathElement>${basedir}/target/test-packages/explodedpar.par</additionalClasspathElement>
|
<additionalClasspathElement>${basedir}/target/test-packages/explodedpar.par</additionalClasspathElement>
|
||||||
|
|
|
@ -84,19 +84,54 @@ public final class PersistenceXmlLoader {
|
||||||
final Validator v2Validator = v2Schema.newValidator();
|
final Validator v2Validator = v2Schema.newValidator();
|
||||||
final Schema v1Schema = SchemaFactory.newInstance( javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI )
|
final Schema v1Schema = SchemaFactory.newInstance( javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI )
|
||||||
.newSchema( new StreamSource( getStreamFromClasspath( "persistence_1_0.xsd" ) ) );
|
.newSchema( new StreamSource( getStreamFromClasspath( "persistence_1_0.xsd" ) ) );
|
||||||
final Validator v1Validator = v2Schema.newValidator();
|
final Validator v1Validator = v1Schema.newValidator();
|
||||||
|
|
||||||
InputSource source = new InputSource( is );
|
InputSource source = new InputSource( is );
|
||||||
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
|
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
|
||||||
docBuilder.setEntityResolver( resolver );
|
docBuilder.setEntityResolver( resolver );
|
||||||
Document doc = docBuilder.parse( source );
|
List<SAXParseException> errors = new ArrayList<SAXParseException>();
|
||||||
|
Document doc = null;
|
||||||
|
try {
|
||||||
|
doc = docBuilder.parse( source );
|
||||||
|
}
|
||||||
|
catch ( SAXParseException e ) {
|
||||||
|
errors.add( e );
|
||||||
|
}
|
||||||
|
|
||||||
List errors = new ArrayList();
|
if (errors.size() == 0) {
|
||||||
v2Validator.setErrorHandler( new ErrorLogger( "XML InputStream", errors, resolver ) );
|
v2Validator.setErrorHandler( new ErrorLogger( "XML InputStream", errors, resolver ) );
|
||||||
|
log.trace("Validate with persistence_2_0.xsd schema on file {}", configURL);
|
||||||
v2Validator.validate( new DOMSource( doc ) );
|
v2Validator.validate( new DOMSource( doc ) );
|
||||||
|
boolean isV1Schema = false;
|
||||||
if ( errors.size() != 0 ) {
|
if ( errors.size() != 0 ) {
|
||||||
throw new PersistenceException( "Invlid persistence.xml. Check the error logs for parsing errors", (Throwable) errors.get( 0 ) );
|
//v2 fails, it could be because the file is v1.
|
||||||
|
log.trace("Found error with persistence_2_0.xsd schema on file {}", configURL);
|
||||||
|
SAXParseException exception = errors.get( 0 );
|
||||||
|
final String errorMessage = exception.getMessage();
|
||||||
|
isV1Schema = errorMessage.contains("1.0")
|
||||||
|
&& errorMessage.contains("2.0")
|
||||||
|
&& errorMessage.contains("version");
|
||||||
|
|
||||||
|
}
|
||||||
|
if (isV1Schema) {
|
||||||
|
log.trace("Validate with persistence_1_0.xsd schema on file {}", configURL);
|
||||||
|
errors.clear();
|
||||||
|
v1Validator.setErrorHandler( new ErrorLogger( "XML InputStream", errors, resolver ) );
|
||||||
|
v1Validator.validate( new DOMSource( doc ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( errors.size() != 0 ) {
|
||||||
|
StringBuilder errorMessage = new StringBuilder( );
|
||||||
|
for (SAXParseException error : errors) {
|
||||||
|
errorMessage.append("Error parsing XML (line")
|
||||||
|
.append(error.getLineNumber())
|
||||||
|
.append(" : column ")
|
||||||
|
.append(error.getColumnNumber())
|
||||||
|
.append("): ")
|
||||||
|
.append(error.getMessage())
|
||||||
|
.append("\n");
|
||||||
|
}
|
||||||
|
throw new PersistenceException( "Invalid persistence.xml.\n" + errorMessage.toString() );
|
||||||
}
|
}
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
@ -289,30 +324,14 @@ public final class PersistenceXmlLoader {
|
||||||
// if ( resolver instanceof EJB3DTDEntityResolver ) {
|
// if ( resolver instanceof EJB3DTDEntityResolver ) {
|
||||||
// if ( ( (EJB3DTDEntityResolver) resolver ).isResolved() == false ) return;
|
// if ( ( (EJB3DTDEntityResolver) resolver ).isResolved() == false ) return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
log.error( "Error parsing XML (line {}: column {}): {}",
|
|
||||||
new Object[] {
|
|
||||||
error.getLineNumber(),
|
|
||||||
error.getColumnNumber(),
|
|
||||||
error.getMessage() } );
|
|
||||||
errors.add( error );
|
errors.add( error );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fatalError(SAXParseException error) {
|
public void fatalError(SAXParseException error) {
|
||||||
log.error( "Error parsing XML (line {}: column {}): {}",
|
|
||||||
new Object[] {
|
|
||||||
error.getLineNumber(),
|
|
||||||
error.getColumnNumber(),
|
|
||||||
error.getMessage() } );
|
|
||||||
errors.add( error );
|
errors.add( error );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void warning(SAXParseException warn) {
|
public void warning(SAXParseException warn) {
|
||||||
log.warn( "Warning parsing XML (line {}: column {}): {}",
|
|
||||||
new Object[] {
|
|
||||||
warn.getLineNumber(),
|
|
||||||
warn.getColumnNumber(),
|
|
||||||
warn.getMessage() } );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
<!-- example of a default persistence.xml -->
|
<!-- example of a default persistence.xml -->
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||||
version="1.0">
|
version="2.0">
|
||||||
<persistence-unit name="defaultpar">
|
<persistence-unit name="defaultpar">
|
||||||
<class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class>
|
<class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class>
|
||||||
|
<validation-mode>CALLBACK</validation-mode>
|
||||||
<properties>
|
<properties>
|
||||||
<property name="hibernate.dialect" value="${db.dialect}"/>
|
<property name="hibernate.dialect" value="${db.dialect}"/>
|
||||||
<property name="hibernate.connection.driver_class" value="${jdbc.driver}"/>
|
<property name="hibernate.connection.driver_class" value="${jdbc.driver}"/>
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
|
||||||
|
version="1.0"
|
||||||
|
>
|
||||||
|
<persistence-unit-metadata>
|
||||||
|
<persistence-unit-defaults>
|
||||||
|
<entity-listeners>
|
||||||
|
<entity-listener class="org.hibernate.ejb.test.pack.defaultpar_1_0.IncrementListener1">
|
||||||
|
<pre-persist method-name="increment"/>
|
||||||
|
</entity-listener>
|
||||||
|
</entity-listeners>
|
||||||
|
</persistence-unit-defaults>
|
||||||
|
</persistence-unit-metadata>
|
||||||
|
<package>org.hibernate.ejb.test.pack.defaultpar_1_0</package>
|
||||||
|
<entity class="org.hibernate.ejb.test.pack.defaultpar_1_0.Lighter1" access="FIELD" metadata-complete="true">
|
||||||
|
<attributes>
|
||||||
|
<id name="name">
|
||||||
|
<column name="fld_id"/>
|
||||||
|
</id>
|
||||||
|
<basic name="power"></basic>
|
||||||
|
</attributes>
|
||||||
|
</entity>
|
||||||
|
<entity class="org.hibernate.ejb.test.pack.defaultpar_1_0.ApplicationServer1">
|
||||||
|
<entity-listeners>
|
||||||
|
<entity-listener class="OtherIncrementListener1">
|
||||||
|
<pre-persist method-name="increment"/>
|
||||||
|
</entity-listener>
|
||||||
|
</entity-listeners>
|
||||||
|
</entity>
|
||||||
|
</entity-mappings>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- example of a default persistence.xml -->
|
||||||
|
<persistence 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"
|
||||||
|
version="1.0">
|
||||||
|
<persistence-unit name="defaultpar_1_0">
|
||||||
|
<class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class>
|
||||||
|
<properties>
|
||||||
|
<property name="hibernate.dialect" value="${db.dialect}"/>
|
||||||
|
<property name="hibernate.connection.driver_class" value="${jdbc.driver}"/>
|
||||||
|
<property name="hibernate.connection.username" value="${jdbc.user}"/>
|
||||||
|
<property name="hibernate.connection.password" value="${jdbc.pass}"/>
|
||||||
|
<property name="hibernate.connection.url" value="${jdbc.url}"/>
|
||||||
|
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
||||||
|
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
</persistence>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-mapping
|
||||||
|
package="org.hibernate.ejb.test.pack.defaultpar_1_0"
|
||||||
|
>
|
||||||
|
|
||||||
|
<class name="Mouse1">
|
||||||
|
|
||||||
|
<id name="id">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="name"/>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>
|
|
@ -2,8 +2,8 @@
|
||||||
<!-- example of a default persistence.xml -->
|
<!-- example of a default persistence.xml -->
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||||
version="1.0">
|
version="2.0">
|
||||||
<persistence-unit name="excludehbmpar" transaction-type="RESOURCE_LOCAL">
|
<persistence-unit name="excludehbmpar" transaction-type="RESOURCE_LOCAL">
|
||||||
<mapping-file>META-INF/orm2.xml</mapping-file>
|
<mapping-file>META-INF/orm2.xml</mapping-file>
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||||
version="1.0">
|
version="2.0">
|
||||||
<persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
|
<persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
|
||||||
<jar-file>./target/test-packages/externaljar.jar</jar-file>
|
<jar-file>./target/test-packages/externaljar.jar</jar-file>
|
||||||
<class>org.hibernate.ejb.test.Cat</class>
|
<class>org.hibernate.ejb.test.Cat</class>
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
<!-- example of a default persistence.xml -->
|
<!-- example of a default persistence.xml -->
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||||
version="1.0">
|
version="2.0">
|
||||||
<persistence-unit name="explodedpar" transaction-type="RESOURCE_LOCAL">
|
<persistence-unit name="explodedpar" transaction-type="RESOURCE_LOCAL">
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||||
version="1.0">
|
version="2.0">
|
||||||
<persistence-unit name="overridenpar">
|
<persistence-unit name="overridenpar">
|
||||||
<jta-data-source>java:/unreachableDS</jta-data-source>
|
<jta-data-source>java:/unreachableDS</jta-data-source>
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
<!-- example of a default persistence.xml -->
|
<!-- example of a default persistence.xml -->
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||||
version="1.0">
|
version="2.0">
|
||||||
<persistence-unit name="space par">
|
<persistence-unit name="space par">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="hibernate.dialect" value="${db.dialect}"/>
|
<property name="hibernate.dialect" value="${db.dialect}"/>
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
<!-- example of a default persistence.xml -->
|
<!-- example of a default persistence.xml -->
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||||
version="1.0">
|
version="2.0">
|
||||||
<persistence-unit name="defaultpar">
|
<persistence-unit name="defaultpar">
|
||||||
<class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class>
|
<class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class>
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -25,6 +25,10 @@ import org.hibernate.ejb.test.pack.externaljar.Scooter;
|
||||||
import org.hibernate.ejb.test.pack.spacepar.Bug;
|
import org.hibernate.ejb.test.pack.spacepar.Bug;
|
||||||
import org.hibernate.ejb.test.pack.various.Airplane;
|
import org.hibernate.ejb.test.pack.various.Airplane;
|
||||||
import org.hibernate.ejb.test.pack.various.Seat;
|
import org.hibernate.ejb.test.pack.various.Seat;
|
||||||
|
import org.hibernate.ejb.test.pack.defaultpar_1_0.ApplicationServer1;
|
||||||
|
import org.hibernate.ejb.test.pack.defaultpar_1_0.Version1;
|
||||||
|
import org.hibernate.ejb.test.pack.defaultpar_1_0.Mouse1;
|
||||||
|
import org.hibernate.ejb.test.pack.defaultpar_1_0.Lighter1;
|
||||||
import org.hibernate.engine.SessionImplementor;
|
import org.hibernate.engine.SessionImplementor;
|
||||||
import org.hibernate.event.EventListeners;
|
import org.hibernate.event.EventListeners;
|
||||||
import org.hibernate.stat.Statistics;
|
import org.hibernate.stat.Statistics;
|
||||||
|
@ -74,6 +78,36 @@ public class PackagedEntityManagerTest extends TestCase {
|
||||||
emf.close();
|
emf.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testDefaultParForPersistence_1_0() throws Exception {
|
||||||
|
EntityManagerFactory emf = Persistence.createEntityManagerFactory( "defaultpar_1_0", new HashMap() );
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
ApplicationServer1 as = new ApplicationServer1();
|
||||||
|
as.setName( "JBoss AS" );
|
||||||
|
Version1 v = new Version1();
|
||||||
|
v.setMajor( 4 );
|
||||||
|
v.setMinor( 0 );
|
||||||
|
v.setMicro( 3 );
|
||||||
|
as.setVersion( v );
|
||||||
|
Mouse1 mouse = new Mouse1();
|
||||||
|
mouse.setName( "mickey" );
|
||||||
|
em.getTransaction().begin();
|
||||||
|
em.persist( as );
|
||||||
|
em.persist( mouse );
|
||||||
|
assertEquals( 1, em.createNamedQuery( "allMouse_1_0" ).getResultList().size() );
|
||||||
|
Lighter1 lighter = new Lighter1();
|
||||||
|
lighter.name = "main";
|
||||||
|
lighter.power = " 250 W";
|
||||||
|
em.persist( lighter );
|
||||||
|
em.flush();
|
||||||
|
em.remove( lighter );
|
||||||
|
em.remove( mouse );
|
||||||
|
assertNotNull( as.getId() );
|
||||||
|
em.remove( as );
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
emf.close();
|
||||||
|
}
|
||||||
|
|
||||||
public void testListenersDefaultPar() throws Exception {
|
public void testListenersDefaultPar() throws Exception {
|
||||||
IncrementListener.reset();
|
IncrementListener.reset();
|
||||||
OtherIncrementListener.reset();
|
OtherIncrementListener.reset();
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
//$Id$
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Emmanuel Bernard
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
public class ApplicationServer1 {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private Version1 version;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Version1 getVersion() {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVersion(Version1 version) {
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
//$Id$
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
import javax.persistence.PrePersist;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Emmanuel Bernard
|
||||||
|
*/
|
||||||
|
public class IncrementListener1 {
|
||||||
|
private static int increment;
|
||||||
|
|
||||||
|
public static int getIncrement() {
|
||||||
|
return increment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void reset() {
|
||||||
|
increment = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PrePersist
|
||||||
|
public void increment(Object entity) {
|
||||||
|
increment++;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
//$Id$
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Emmanuel Bernard
|
||||||
|
*/
|
||||||
|
public class Lighter1 {
|
||||||
|
public String name;
|
||||||
|
public String power;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
//$Id$
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Emmanuel Bernard
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
public class Money1 {
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@Id @GeneratedValue
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
//$Id$
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
import javax.persistence.ExcludeDefaultListeners;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Emmanuel Bernard
|
||||||
|
*/
|
||||||
|
@ExcludeDefaultListeners
|
||||||
|
public class Mouse1 {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
//$Id$
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Emmanuel Bernard
|
||||||
|
*/
|
||||||
|
public class OtherIncrementListener1 {
|
||||||
|
private static int increment;
|
||||||
|
|
||||||
|
public static int getIncrement() {
|
||||||
|
return OtherIncrementListener1.increment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void reset() {
|
||||||
|
increment = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void increment(Object entity) {
|
||||||
|
OtherIncrementListener1.increment++;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
//$Id$
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
import javax.persistence.Embeddable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Emmanuel Bernard
|
||||||
|
*/
|
||||||
|
@Embeddable
|
||||||
|
public class Version1 {
|
||||||
|
private static final String DOT = ".";
|
||||||
|
private int major;
|
||||||
|
private int minor;
|
||||||
|
private int micro;
|
||||||
|
|
||||||
|
public int getMajor() {
|
||||||
|
return major;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMajor(int major) {
|
||||||
|
this.major = major;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMinor() {
|
||||||
|
return minor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMinor(int minor) {
|
||||||
|
this.minor = minor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMicro() {
|
||||||
|
return micro;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMicro(int micro) {
|
||||||
|
this.micro = micro;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return new StringBuffer( major ).append( DOT ).append( minor ).append( DOT ).append( micro ).toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
@NamedQuery(name = "allMouse_1_0",
|
||||||
|
query = "select m from ApplicationServer1 m")
|
||||||
|
package org.hibernate.ejb.test.pack.defaultpar_1_0;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.NamedQuery;
|
Loading…
Reference in New Issue