[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