[jboss-cvs] JBossAS SVN: r59657 - in trunk/ejb3: src/main/org/jboss/ejb3 and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Jan 15 16:11:43 EST 2007
Author: bill.burke at jboss.com
Date: 2007-01-15 16:11:42 -0500 (Mon, 15 Jan 2007)
New Revision: 59657
Added:
trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceXmlLoader.java
Modified:
trunk/ejb3/build.xml
trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java
Log:
copy persistence.xml parsing until HEM fixes bug
removed embedded build from build.xml as we're retiring the old code.
Modified: trunk/ejb3/build.xml
===================================================================
--- trunk/ejb3/build.xml 2007-01-15 21:10:52 UTC (rev 59656)
+++ trunk/ejb3/build.xml 2007-01-15 21:11:42 UTC (rev 59657)
@@ -445,81 +445,6 @@
<copy todir="${build.lib}" file="${resources}/ejb3-entity-cache-beans.xml"/>
<copy todir="${build.lib}" file="${resources}/ejb3-timer-service.xml"/>
<copy todir="${build.lib}" file="${resources}/ejb3-connectors-service.xml"/>
- <mkdir dir="${build.lib}/embeddable"/>
- <mkdir dir="${build.lib}/embeddable/conf"/>
- <mkdir dir="${build.lib}/embeddable/lib"/>
- <copy todir="${build.lib}/embeddable/conf" file="${resources}/ejb3-interceptors-aop.xml"/>
- <copy todir="${build.lib}/embeddable/conf" file="${resources}/standalone/embedded-jboss-beans.xml"/>
- <copy todir="${build.lib}/embeddable/conf" file="${resources}/standalone/jboss-jms-beans.xml"/>
- <copy todir="${build.lib}/embeddable/conf" file="${resources}/standalone/security-beans.xml"/>
- <copy todir="${build.lib}/embeddable/conf" file="${resources}/standalone/log4j.xml"/>
- <copy todir="${build.lib}/embeddable/conf" file="${resources}/standalone/login-config.xml"/>
- <copy todir="${build.lib}/embeddable/conf" file="${resources}/standalone/jndi.properties"/>
- <copy tofile="${build.lib}/embeddable/conf/default.persistence.properties" file="${resources}/META-INF/persistence.properties"/>
-
-
- <jar jarfile="${build.lib}/embeddable/lib/jboss-ejb3-all.jar">
- <zipfileset src="${build.lib}/jboss-ejb3.jar"/>
- <zipfileset src="${build.lib}/jboss-annotations-ejb3.jar"/>
- <zipfileset src="${build.lib}/jboss-annotations-ejb3.jar"/>
- <zipfileset src="${jboss.ejb3x.lib}/jboss-ejb3x.jar"/>
- <zipfileset src="${jboss.aop.lib}/jboss-aop-jdk50.jar"/>
- <zipfileset src="${jboss.varia.lib}/hsqldb-plugin.jar" />
- <zipfileset src="${jboss.mq.lib}/jbossmq.jar" />
- <zipfileset src="${jboss.aspects.lib}/jboss-aspect-library-jdk50.jar" />
- <zipfileset src="${jboss.transaction.lib}/jboss-transaction.jar" />
- <zipfileset src="${jboss.naming.lib}/jnpserver.jar" />
- <zipfileset src="${jboss.j2ee.lib}/jboss-j2ee.jar" />
- <zipfileset src="${jboss.common.core.lib}/jboss-common-core.jar" />
- <zipfileset src="${jboss.jbossxb.lib}/jboss-xml-binding.jar" />
- <zipfileset src="${jboss.security.lib}/jbosssx.jar" />
- <zipfileset src="${jboss.security.spi.lib}/jboss-security-spi.jar" />
- <zipfileset src="${jboss.microcontainer.lib}/jboss-microcontainer.jar" />
- <zipfileset src="${jboss.microcontainer.lib}/jboss-container.jar" />
- <zipfileset src="${jboss.microcontainer.lib}/jboss-dependency.jar" />
- <zipfileset src="${jboss.server.lib}/jboss.jar" />
- <zipfileset src="${jboss.remoting.lib}/jboss-remoting.jar" />
- <zipfileset src="${jboss.j2se.lib}/jboss-j2se.jar" />
- <zipfileset src="${jboss.jca.lib}/jboss-jca.jar" />
- <zipfileset src="${jboss.jca.lib}/jboss-common-jdbc-wrapper.jar" />
- <zipfileset src="${jboss.jca.lib}/jboss-local-jdbc.jar" />
- <zipfileset src="${jboss.jca.lib}/jboss-xa-jdbc.jar" />
- <zipfileset src="${jboss.system.lib}/jboss-system.jar" />
- <zipfileset src="${jboss.serialization.lib}/jboss-serialization.jar" />
- <zipfileset src="${jboss.jbossws.lib}/jboss-jaxrpc.jar" />
- </jar>
-
-
-
- <jar jarfile="${build.lib}/embeddable/lib/hibernate-all.jar">
- <zipfileset src="${hibernate.lib}/hibernate3.jar" />
- <zipfileset src="${hibernate.entitymanager.lib}/ejb3-persistence.jar" />
- <zipfileset src="${hibernate.entitymanager.lib}/hibernate-entitymanager.jar" />
- <zipfileset src="${hibernate.annotations.lib}/hibernate-annotations.jar" />
- </jar>
-
-
- <jar jarfile="${build.lib}/embeddable/lib/thirdparty-all.jar">
- <zipfileset src="${apache.log4j.lib}/log4j.jar" />
- <zipfileset src="${hsqldb.hsqldb.lib}/hsqldb.jar" />
- <zipfileset src="${asm.asm.lib}/asm.jar" />
- <zipfileset src="${asm.asm.lib}/asm-attrs.jar" />
- <zipfileset src="${antlr.antlr.lib}/antlr-2.7.6.jar" />
- <zipfileset src="${cglib.lib}/cglib.jar" />
- <zipfileset src="${dom4j.dom4j.lib}/dom4j.jar" />
- <zipfileset src="${apache.logging.lib}/commons-logging.jar" />
- <zipfileset src="${apache.collections.lib}/commons-collections.jar" />
- <zipfileset src="${oswego.concurrent.lib}/concurrent.jar" />
- <zipfileset src="${apache.xerces.lib}/resolver.jar" />
- <zipfileset src="${apache.xerces.lib}/xercesImpl.jar" />
- <zipfileset src="${apache.xerces.lib}/xml-apis.jar" excludes="**/license"/>
- <zipfileset src="${javassist.lib}/javassist.jar" />
- <zipfileset src="${trove.lib}/trove.jar" />
- <zipfileset src="${quartz.quartz.lib}/quartz.jar" />
- </jar>
-
- <copy tofile="${build.lib}/embeddable/lib/jms-ra.rar" file="${jboss.jca.lib}/jms-ra.rar"/>
- <copy tofile="${build.lib}/embeddable/lib/jms-ra.jar" file="${jboss.jca.lib}/jms-ra.jar"/>
</target>
@@ -597,60 +522,6 @@
</zip>
</target>
- <target name="embedded.dist" depends="init">
- <javadoc
- packagenames="org.jboss.annotation"
- classpathref="javadoc.classpath"
- destdir="output/api"
- use="true"
- protected="true"
- version="true"
- windowtitle="JBoss EJB 3.0 API Documentation"
- doctitle="JBoss EJB 3.0 API Documentation">
- <fileset dir="${source.java}" defaultexcludes="yes">
- <include name="org/jboss/annotation/**"/>
- <exclude name="org/jboss/annotation/**/*Impl*"/>
- <include name="org/jboss/ejb3/embedded/**"/>
- </fileset>
- </javadoc>
- <property name="ejb3.zip.version" value="jboss-EJB-3.0_Embeddable_ALPHA_8-patch2"/>
- <zip zipfile="${ejb3.zip.version}.zip">
- <zipfileset dir="." prefix="${ejb3.zip.version}">
- <include name="RELEASE_NOTES.txt"/>
- </zipfileset>
- <zipfileset dir="output/api" prefix="${ejb3.zip.version}/docs/api">
- <include name="**"/>
- </zipfileset>
- <zipfileset dir="output/lib/embeddable/conf" prefix="${ejb3.zip.version}/conf">
- <include name="**"/>
- <exclude name="log4j.xml"/>
- </zipfileset>
- <zipfileset dir="src/resources/standalone/dist" prefix="${ejb3.zip.version}/conf">
- <include name="log4j.xml"/>
- </zipfileset>
- <zipfileset dir="output/lib/embeddable/lib" prefix="${ejb3.zip.version}/lib">
- <include name="**"/>
- </zipfileset>
- <zipfileset dir="../thirdparty/ehcache/lib" prefix="${ejb3.zip.version}/optional-lib">
- <include name="*.jar"/>
- </zipfileset>
- <zipfileset dir="../thirdparty/junit/lib" prefix="${ejb3.zip.version}/optional-lib">
- <include name="*.jar"/>
- </zipfileset>
- <zipfileset dir="docs" prefix="${ejb3.zip.version}/docs">
- <include name="embedded.html"/>
- <include name="embedded-tutorial/advanced-deployment/**"/>
- <include name="embedded-tutorial/mdb-standalone/**"/>
- <include name="embedded-tutorial/simple-deployment/**"/>
- <include name="embedded-tutorial/embedded-war/**"/>
- <include name="embedded-tutorial/test-with-junit/**"/>
- <include name="embedded-tutorial/security/**"/>
- <exclude name="**/CVS/**"/>
- <exclude name="**/*.wiki"/>
- <exclude name="reference/**"/>
- </zipfileset>
- </zip>
- </target>
<!-- ================================================================== -->
<!-- Cleaning -->
<!-- ================================================================== -->
Modified: trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java 2007-01-15 21:10:52 UTC (rev 59656)
+++ trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java 2007-01-15 21:11:42 UTC (rev 59657)
@@ -22,13 +22,13 @@
package org.jboss.ejb3;
import javassist.bytecode.ClassFile;
+import org.hibernate.ejb.packaging.PersistenceMetadata;
import org.hibernate.cfg.EJB3DTDEntityResolver;
-import org.hibernate.ejb.packaging.PersistenceMetadata;
-import org.hibernate.ejb.packaging.PersistenceXmlLoader;
import org.jboss.ejb3.enc.EjbModuleEjbResolver;
import org.jboss.ejb3.enc.EjbModulePersistenceUnitResolver;
import org.jboss.ejb3.entity.PersistenceUnitDeployment;
-import org.jboss.logging.Logger;
+import org.jboss.ejb3.entity.PersistenceXmlLoader;
+import org.jboss.logging.Logger;
import org.jboss.virtual.VirtualFile;
import javax.management.MBeanServer;
@@ -37,6 +37,7 @@
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
import javax.persistence.Entity;
+import javax.persistence.spi.PersistenceUnitTransactionType;
import javax.security.jacc.PolicyConfiguration;
import javax.security.jacc.PolicyConfigurationFactory;
import java.io.DataInputStream;
@@ -44,9 +45,9 @@
import java.io.BufferedInputStream;
import java.net.URL;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
+import java.util.HashMap;
/**
* An EjbModule represents a collection of beans that are deployed as a unit.
@@ -444,7 +445,8 @@
}
// scope the unitName if this is an ejb archive
- List<PersistenceMetadata> persistenceMetadata = PersistenceXmlLoader.deploy(persistenceXmlUrl, new HashMap(), new EJB3DTDEntityResolver());
+ // todo revert to this: List<PersistenceMetadata> persistenceMetadata = PersistenceXmlLoader.deploy(persistenceXmlUrl, new HashMap(), new EJB3DTDEntityResolver());
+ List<PersistenceMetadata> persistenceMetadata = PersistenceXmlLoader.deploy(persistenceXmlUrl, new HashMap(), new EJB3DTDEntityResolver(), PersistenceUnitTransactionType.JTA);
for (PersistenceMetadata metadata : persistenceMetadata)
{
String earShortName = deploymentScope == null ? null : deploymentScope.getShortName();
Added: trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceXmlLoader.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceXmlLoader.java 2007-01-15 21:10:52 UTC (rev 59656)
+++ trunk/ejb3/src/main/org/jboss/ejb3/entity/PersistenceXmlLoader.java 2007-01-15 21:11:42 UTC (rev 59657)
@@ -0,0 +1,253 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.entity;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXParseException;
+import org.hibernate.ejb.packaging.PersistenceMetadata;
+import org.hibernate.ejb.packaging.XmlHelper;
+import org.hibernate.ejb.HibernatePersistence;
+import org.hibernate.ejb.util.ConfigurationHelper;
+import org.hibernate.util.StringHelper;
+import org.hibernate.cfg.EJB3DTDEntityResolver;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.persistence.PersistenceException;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import java.net.URL;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Persistence.xml handler
+ *
+ * THIS CLASS SHOULD BE REMOVED WHEN HEM FIXES default transactiontype bug
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author Emmanuel Bernard
+ */
+ at Deprecated
+public final class PersistenceXmlLoader
+{
+ private static Log log = LogFactory.getLog( PersistenceXmlLoader.class );
+
+ private PersistenceXmlLoader() {
+ }
+
+ private static Document loadURL(URL configURL, EntityResolver resolver) throws Exception {
+ InputStream is = configURL != null ? configURL.openStream() : null;
+ if ( is == null ) {
+ throw new IOException( "Failed to obtain InputStream from url: " + configURL );
+ }
+ List errors = new ArrayList();
+ DocumentBuilderFactory docBuilderFactory = null;
+ docBuilderFactory = DocumentBuilderFactory.newInstance();
+ docBuilderFactory.setValidating( true );
+ docBuilderFactory.setNamespaceAware( true );
+ try {
+ //otherwise Xerces fails in validation
+ docBuilderFactory.setAttribute( "http://apache.org/xml/features/validation/schema", true );
+ }
+ catch (IllegalArgumentException e) {
+ docBuilderFactory.setValidating( false );
+ docBuilderFactory.setNamespaceAware( false );
+ }
+ InputSource source = new InputSource( is );
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ docBuilder.setEntityResolver( resolver );
+ docBuilder.setErrorHandler( new PersistenceXmlLoader.ErrorLogger( "XML InputStream", errors, resolver ) );
+ Document doc = docBuilder.parse( source );
+ if ( errors.size() != 0 ) {
+ throw new PersistenceException( "invalid persistence.xml", (Throwable) errors.get( 0 ) );
+ }
+ return doc;
+ }
+
+ public static List<PersistenceMetadata> deploy(URL url, Map overrides, EntityResolver resolver) throws Exception {
+ return deploy(url, overrides, resolver, PersistenceUnitTransactionType.RESOURCE_LOCAL);
+ }
+
+
+ public static List<PersistenceMetadata> deploy(URL url, Map overrides, EntityResolver resolver, PersistenceUnitTransactionType defaultTransactionType) throws Exception {
+ Document doc = loadURL( url, resolver );
+ Element top = doc.getDocumentElement();
+ NodeList children = top.getChildNodes();
+ ArrayList<PersistenceMetadata> units = new ArrayList<PersistenceMetadata>();
+ for ( int i = 0; i < children.getLength() ; i++ ) {
+ if ( children.item( i ).getNodeType() == Node.ELEMENT_NODE ) {
+ Element element = (Element) children.item( i );
+ String tag = element.getTagName();
+ if ( tag.equals( "persistence-unit" ) ) {
+ PersistenceMetadata metadata = parsePersistenceUnit( element, defaultTransactionType);
+ //override properties of metadata if needed
+ String provider = (String) overrides.get( HibernatePersistence.PROVIDER );
+ if ( provider != null ) {
+ metadata.setProvider( provider );
+ }
+ String transactionType = (String) overrides.get( HibernatePersistence.TRANSACTION_TYPE );
+ if ( StringHelper.isNotEmpty( transactionType ) ) {
+ metadata.setTransactionType( getTransactionType( transactionType ) );
+ }
+ String dataSource = (String) overrides.get( HibernatePersistence.JTA_DATASOURCE );
+ if ( dataSource != null ) {
+ metadata.setJtaDatasource( dataSource );
+ }
+ dataSource = (String) overrides.get( HibernatePersistence.NON_JTA_DATASOURCE );
+ if ( dataSource != null ) {
+ metadata.setNonJtaDatasource( dataSource );
+ }
+ Properties properties = metadata.getProps();
+ ConfigurationHelper.overrideProperties( properties, overrides );
+ units.add( metadata );
+ }
+ }
+ }
+
+ return units;
+ }
+
+ private static PersistenceMetadata parsePersistenceUnit(Element top, PersistenceUnitTransactionType defaultTransactionType)
+ throws Exception {
+ PersistenceMetadata metadata = new PersistenceMetadata();
+ String puName = top.getAttribute( "name" );
+ if ( StringHelper.isNotEmpty( puName ) ) {
+ log.trace( "Persistent Unit name from persistence.xml: " + puName );
+ metadata.setName( puName );
+ }
+ PersistenceUnitTransactionType transactionType = getTransactionType( top.getAttribute( "transaction-type" ) );
+ //parsing a persistence.xml means we are in a JavaSE environment
+ transactionType = transactionType != null ? transactionType : defaultTransactionType;
+ metadata.setTransactionType( transactionType );
+ NodeList children = top.getChildNodes();
+ for ( int i = 0; i < children.getLength() ; i++ ) {
+ if ( children.item( i ).getNodeType() == Node.ELEMENT_NODE ) {
+ Element element = (Element) children.item( i );
+ String tag = element.getTagName();
+// if ( tag.equals( "name" ) ) {
+// String puName = XmlHelper.getElementContent( element );
+// log.trace( "FOUND PU NAME: " + puName );
+// metadata.setName( puName );
+// }
+// else
+ if ( tag.equals( "non-jta-data-source" ) ) {
+ metadata.setNonJtaDatasource( XmlHelper.getElementContent( element ) );
+ }
+ else if ( tag.equals( "jta-data-source" ) ) {
+ metadata.setJtaDatasource( XmlHelper.getElementContent( element ) );
+ }
+ else if ( tag.equals( "provider" ) ) {
+ metadata.setProvider( XmlHelper.getElementContent( element ) );
+ }
+ else if ( tag.equals( "class" ) ) {
+ metadata.getClasses().add( XmlHelper.getElementContent( element ) );
+ }
+ else if ( tag.equals( "mapping-file" ) ) {
+ metadata.getMappingFiles().add( XmlHelper.getElementContent( element ) );
+ }
+ else if ( tag.equals( "jar-file" ) ) {
+ metadata.getJarFiles().add( XmlHelper.getElementContent( element ) );
+ }
+ else if ( tag.equals( "exclude-unlisted-classes" ) ) {
+ metadata.setExcludeUnlistedClasses( true );
+ }
+ else if ( tag.equals( "properties" ) ) {
+ NodeList props = element.getChildNodes();
+ for ( int j = 0; j < props.getLength() ; j++ ) {
+ if ( props.item( j ).getNodeType() == Node.ELEMENT_NODE ) {
+ Element propElement = (Element) props.item( j );
+ if ( !"property".equals( propElement.getTagName() ) ) continue;
+ String propName = propElement.getAttribute( "name" ).trim();
+ String propValue = propElement.getAttribute( "value" ).trim();
+ if ( StringHelper.isEmpty( propValue ) ) {
+ //fall back to the natural (Hibernate) way of description
+ propValue = XmlHelper.getElementContent( propElement, "" );
+ }
+ metadata.getProps().put( propName, propValue );
+ }
+ }
+
+ }
+ }
+ }
+
+ return metadata;
+ }
+
+ public static PersistenceUnitTransactionType getTransactionType(String elementContent) {
+ if ( StringHelper.isEmpty( elementContent ) ) {
+ return null; //PersistenceUnitTransactionType.JTA;
+ }
+ else if ( elementContent.equalsIgnoreCase( "JTA" ) ) {
+ return PersistenceUnitTransactionType.JTA;
+ }
+ else if ( elementContent.equalsIgnoreCase( "RESOURCE_LOCAL" ) ) {
+ return PersistenceUnitTransactionType.RESOURCE_LOCAL;
+ }
+ else {
+ throw new PersistenceException( "Unknown TransactionType: " + elementContent );
+ }
+ }
+
+ public static class ErrorLogger implements ErrorHandler
+ {
+ private String file;
+ private List errors;
+ private EntityResolver resolver;
+
+ ErrorLogger(String file, List errors, EntityResolver resolver) {
+ this.file = file;
+ this.errors = errors;
+ this.resolver = resolver;
+ }
+
+ public void error(SAXParseException error) {
+ if ( resolver instanceof EJB3DTDEntityResolver) {
+ if ( ( (EJB3DTDEntityResolver) resolver ).isResolved() == false ) return;
+ }
+ log.error( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
+ errors.add( error );
+ }
+
+ public void fatalError(SAXParseException error) {
+ log.error( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
+ errors.add( error );
+ }
+
+ public void warning(SAXParseException warn) {
+ log.warn( "Warning parsing XML: " + file + '(' + warn.getLineNumber() + ") " + warn.getMessage() );
+ }
+ }
+
+}
More information about the jboss-cvs-commits
mailing list