Hibernate SVN: r16089 - core/branches/Branch_3_3/core/src/main/java/org/hibernate/util.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-03-05 16:51:53 -0500 (Thu, 05 Mar 2009)
New Revision: 16089
Modified:
core/branches/Branch_3_3/core/src/main/java/org/hibernate/util/StringHelper.java
Log:
HHH-3800 - Allow chopping of class names in various logging scenarios
Modified: core/branches/Branch_3_3/core/src/main/java/org/hibernate/util/StringHelper.java
===================================================================
--- core/branches/Branch_3_3/core/src/main/java/org/hibernate/util/StringHelper.java 2009-03-05 21:50:15 UTC (rev 16088)
+++ core/branches/Branch_3_3/core/src/main/java/org/hibernate/util/StringHelper.java 2009-03-05 21:51:53 UTC (rev 16089)
@@ -154,7 +154,7 @@
public static String unqualify(String qualifiedName) {
int loc = qualifiedName.lastIndexOf(".");
- return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( qualifiedName.lastIndexOf(".") + 1 );
+ return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( loc + 1 );
}
public static String qualifier(String qualifiedName) {
@@ -162,6 +162,58 @@
return ( loc < 0 ) ? "" : qualifiedName.substring( 0, loc );
}
+ /**
+ * Collapses a name. Mainly intended for use with classnames, where an example might serve best to explain.
+ * Imagine you have a class named <samp>'org.hibernate.util.StringHelper'</samp>; calling collapse on that
+ * classname will result in <samp>'o.h.u.StringHelper'<samp>.
+ *
+ * @param name The name to collapse.
+ * @return The collapsed name.
+ */
+ public static String collapse(String name) {
+ int breakPoint = name.lastIndexOf( '.' );
+ if ( breakPoint < 0 ) {
+ return name;
+ }
+ return collapseQualifier( name.substring( 0, breakPoint ), true ) + name.substring( breakPoint ); // includes last '.'
+ }
+
+ /**
+ * Given a qualifier, collapse it.
+ *
+ * @param qualifier The qualifier to collapse.
+ * @param includeDots Should we include the dots in the collapsed form?
+ *
+ * @return The collapsed form.
+ */
+ public static String collapseQualifier(String qualifier, boolean includeDots) {
+ StringTokenizer tokenizer = new StringTokenizer( qualifier, "." );
+ String collapsed = Character.toString( tokenizer.nextToken().charAt( 0 ) );
+ while ( tokenizer.hasMoreTokens() ) {
+ if ( includeDots ) {
+ collapsed += '.';
+ }
+ collapsed += tokenizer.nextToken().charAt( 0 );
+ }
+ return collapsed;
+ }
+
+ /**
+ * Partially unqualifies a qualified name. For example, with a base of 'org.hibernate' the name
+ * 'org.hibernate.util.StringHelper' would become 'util.StringHelper'.
+ *
+ * @param name The (potentially) qualified name.
+ * @param qualifierBase The qualifier base.
+ *
+ * @return The name itself, or the partially unqualified form if it begins with the qualifier base.
+ */
+ public static String partiallyUnqualify(String name, String qualifierBase) {
+ if ( ! name.startsWith( qualifierBase ) ) {
+ return name;
+ }
+ return name.substring( qualifierBase.length() + 1 ); // +1 to include the following '.'
+ }
+
public static String[] suffix(String[] columns, String suffix) {
if ( suffix == null ) return columns;
String[] qualified = new String[columns.length];
15 years, 10 months
Hibernate SVN: r16088 - core/trunk/core/src/main/java/org/hibernate/util.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-03-05 16:50:15 -0500 (Thu, 05 Mar 2009)
New Revision: 16088
Modified:
core/trunk/core/src/main/java/org/hibernate/util/StringHelper.java
Log:
HHH-3800 - Allow chopping of class names in various logging scenarios
Modified: core/trunk/core/src/main/java/org/hibernate/util/StringHelper.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/util/StringHelper.java 2009-03-05 19:08:10 UTC (rev 16087)
+++ core/trunk/core/src/main/java/org/hibernate/util/StringHelper.java 2009-03-05 21:50:15 UTC (rev 16088)
@@ -162,6 +162,75 @@
return ( loc < 0 ) ? "" : qualifiedName.substring( 0, loc );
}
+ /**
+ * Collapses a name. Mainly intended for use with classnames, where an example might serve best to explain.
+ * Imagine you have a class named <samp>'org.hibernate.util.StringHelper'</samp>; calling collapse on that
+ * classname will result in <samp>'o.h.u.StringHelper'<samp>.
+ *
+ * @param name The name to collapse.
+ * @return The collapsed name.
+ */
+ public static String collapse(String name) {
+ int breakPoint = name.lastIndexOf( '.' );
+ if ( breakPoint < 0 ) {
+ return name;
+ }
+ return collapseQualifier( name.substring( 0, breakPoint ), true ) + name.substring( breakPoint ); // includes last '.'
+ }
+
+ /**
+ * Given a qualifier, collapse it.
+ *
+ * @param qualifier The qualifier to collapse.
+ * @param includeDots Should we include the dots in the collapsed form?
+ *
+ * @return The collapsed form.
+ */
+ public static String collapseQualifier(String qualifier, boolean includeDots) {
+ StringTokenizer tokenizer = new StringTokenizer( qualifier, "." );
+ String collapsed = Character.toString( tokenizer.nextToken().charAt( 0 ) );
+ while ( tokenizer.hasMoreTokens() ) {
+ if ( includeDots ) {
+ collapsed += '.';
+ }
+ collapsed += tokenizer.nextToken().charAt( 0 );
+ }
+ return collapsed;
+ }
+
+ /**
+ * Partially unqualifies a qualified name. For example, with a base of 'org.hibernate' the name
+ * 'org.hibernate.util.StringHelper' would become 'util.StringHelper'.
+ *
+ * @param name The (potentially) qualified name.
+ * @param qualifierBase The qualifier base.
+ *
+ * @return The name itself, or the partially unqualified form if it begins with the qualifier base.
+ */
+ public static String partiallyUnqualify(String name, String qualifierBase) {
+ if ( ! name.startsWith( qualifierBase ) ) {
+ return name;
+ }
+ return name.substring( qualifierBase.length() + 1 ); // +1 to start after the following '.'
+ }
+
+ /**
+ * Cross between {@link #collapse} and {@link #partiallyUnqualify}. Functions much like {@link #collapse}
+ * except that only the qualifierBase is collapsed. For example, with a base of 'org.hibernate' the name
+ * 'org.hibernate.util.StringHelper' would become 'o.h.util.StringHelper'.
+ *
+ * @param name The (potentially) qualified name.
+ * @param qualifierBase The qualifier base.
+ *
+ * @return The name itself if it does not begin with the qualifierBase, or the properly collapsed form otherwise.
+ */
+ public static String collapseQualifierBase(String name, String qualifierBase) {
+ if ( ! name.startsWith( qualifierBase ) ) {
+ return collapse( name );
+ }
+ return collapseQualifier( qualifierBase, true ) + name.substring( qualifierBase.length() );
+ }
+
public static String[] suffix(String[] columns, String suffix) {
if ( suffix == null ) return columns;
String[] qualified = new String[columns.length];
15 years, 10 months
Hibernate SVN: r16087 - in search/trunk: src/java/org/hibernate/search/store and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: sannegrinovero
Date: 2009-03-05 14:08:10 -0500 (Thu, 05 Mar 2009)
New Revision: 16087
Added:
search/trunk/src/java/org/hibernate/search/store/LockFactoryFactory.java
search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockFactoryFactory.java
search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockProviderTest.java
Modified:
search/trunk/doc/reference/en/modules/configuration.xml
search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java
search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
Log:
HSEARCH-345
Modified: search/trunk/doc/reference/en/modules/configuration.xml
===================================================================
--- search/trunk/doc/reference/en/modules/configuration.xml 2009-03-05 18:55:28 UTC (rev 16086)
+++ search/trunk/doc/reference/en/modules/configuration.xml 2009-03-05 19:08:10 UTC (rev 16087)
@@ -859,7 +859,9 @@
even on RAM based indexes, but this is not recommended and of no practical use.</para>
<para>To select a locking factory, set the <literal>hibernate.search.<index>.locking_strategy</literal> option to
one of <literal>simple</literal>, <literal>native</literal>, <literal>single</literal>
- or <literal>none</literal>.
+ or <literal>none</literal>, or set it to the fully qualified name of an implementation of
+ <literal>org.hibernate.search.store.LockFactoryFactory</literal>; Implementing this interface you can provide
+ a custom <literal>org.apache.lucene.store.LockFactory</literal>.
<table id="search-configuration-directory-lockfactories-table">
<title>List of available LockFactory implementations</title>
@@ -915,13 +917,12 @@
</table>
</para>Configuration example:
- <programlisting>hibernate.search.default simple
-hibernate.search.Animals native</programlisting>
+ <programlisting>hibernate.search.default.locking_strategy simple
+hibernate.search.Animals.locking_strategy native
+hibernate.search.Books.locking_strategy org.custom.components.MyLockingFactory</programlisting>
<para>
</para>
- <para>If you need more flexibility it is possible to use your own LockFactory when implementing a custom DirectoryProvider.</para>
-
</section>
</chapter>
Modified: search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java 2009-03-05 18:55:28 UTC (rev 16086)
+++ search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java 2009-03-05 19:08:10 UTC (rev 16087)
@@ -20,6 +20,7 @@
import org.hibernate.search.SearchException;
import org.hibernate.search.util.FileHelper;
import org.hibernate.search.util.LoggerFactory;
+import org.hibernate.util.ReflectHelper;
/**
* @author Emmanuel Bernard
@@ -95,7 +96,7 @@
* Creates a LockFactory as selected in the configuration for the
* DirectoryProvider.
* The SimpleFSLockFactory and NativeFSLockFactory need a File to know
- * were to stock the filesystem based locks; other implementations
+ * where to stock the filesystem based locks; other implementations
* ignore this parameter.
* @param indexDir the directory to use to store locks, if needed by implementation
* @param dirConfiguration the configuration of current DirectoryProvider
@@ -103,13 +104,29 @@
* in case of configuration errors or as a default.
* @throws IOException
*/
- public static LockFactory createLockFactory(File indexDir, Properties dirConfiguration) throws IOException {
- String lockFactoryName = dirConfiguration.getProperty( "locking_strategy", "simple" );
+ public static LockFactory createLockFactory(File indexDir, Properties dirConfiguration) {
+ //For FS-based indexes default to "simple", default to "single" otherwise.
+ String defaultStrategy = indexDir==null ? "single" : "simple";
+ String lockFactoryName = dirConfiguration.getProperty( "locking_strategy", defaultStrategy );
if ( "simple".equals( lockFactoryName ) ) {
- return new SimpleFSLockFactory( indexDir );
+ if ( indexDir==null ) {
+ throw new SearchException( "To use \"simple\" as a LockFactory strategy an indexBase path must be set");
+ }
+ try {
+ return new SimpleFSLockFactory( indexDir );
+ } catch (IOException e) {
+ throw new SearchException( "Could not initialize SimpleFSLockFactory", e);
+ }
}
else if ( "native".equals( lockFactoryName ) ) {
- return new NativeFSLockFactory( indexDir );
+ if ( indexDir==null ) {
+ throw new SearchException( "To use \"native\" as a LockFactory strategy an indexBase path must be set");
+ }
+ try {
+ return new NativeFSLockFactory( indexDir );
+ } catch (IOException e) {
+ throw new SearchException( "Could not initialize NativeFSLockFactory", e);
+ }
}
else if ( "single".equals( lockFactoryName ) ) {
return new SingleInstanceLockFactory();
@@ -118,9 +135,27 @@
return new NoLockFactory();
}
else {
- log.warn( "Invalid configuration setting for option locking_strategy \"{}\"; option ignored!",
- lockFactoryName );
- return new SimpleFSLockFactory( indexDir );
+ LockFactoryFactory lockFactoryFactory;
+ try {
+ Class lockFactoryClass = ReflectHelper.classForName( lockFactoryName, dirConfiguration.getClass() );
+ lockFactoryFactory = (LockFactoryFactory) lockFactoryClass.newInstance();
+ }
+ catch (ClassNotFoundException e) {
+ throw new SearchException( "Unable to find LockFactoryFactory class " + lockFactoryName, e );
+ }
+ catch (IllegalAccessException e) {
+ throw new SearchException( "Unable to create instance of LockFactoryFactory class " + lockFactoryName
+ + " Be sure to have a no-arg constructor", e );
+ }
+ catch (InstantiationException e) {
+ throw new SearchException( "Unable to create instance of LockFactoryFactory class " + lockFactoryName
+ + " Be sure to have a no-arg constructor", e );
+ }
+ catch (ClassCastException e) {
+ throw new SearchException( "Class does not implement LockFactoryFactory: "
+ + lockFactoryName, e );
+ }
+ return lockFactoryFactory.createLockFactory( indexDir, dirConfiguration );
}
}
Added: search/trunk/src/java/org/hibernate/search/store/LockFactoryFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/LockFactoryFactory.java (rev 0)
+++ search/trunk/src/java/org/hibernate/search/store/LockFactoryFactory.java 2009-03-05 19:08:10 UTC (rev 16087)
@@ -0,0 +1,30 @@
+// $Id$
+package org.hibernate.search.store;
+
+import java.io.File;
+import java.util.Properties;
+
+import org.apache.lucene.store.LockFactory;
+
+/**
+ * To use a custom implementation of org.apache.lucene.store.LockFactory
+ * you need to implement this interface and define the fully qualified
+ * classname of the factory implementation as a DirectoryProvider parameter
+ * for the locking_strategy key.
+ * The implementation must have a no-arg constructor.
+ *
+ * @author Sanne Grinovero
+ */
+public interface LockFactoryFactory {
+
+ /**
+ * Creates a LockFactory implementation.
+ * A different LockFactory is created for each DirectoryProvider.
+ * @param indexDir path to the indexBase setting, or null for
+ * DirectoryProviders which don't rely on filesystem
+ * @param dirConfiguration the properties set on the current DirectoryProvider
+ * @return the created LockFactory
+ */
+ LockFactory createLockFactory(File indexDir, Properties dirConfiguration);
+
+}
Property changes on: search/trunk/src/java/org/hibernate/search/store/LockFactoryFactory.java
___________________________________________________________________
Name: svn:keywords
+ Id
Modified: search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java 2009-03-05 18:55:28 UTC (rev 16086)
+++ search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java 2009-03-05 19:08:10 UTC (rev 16087)
@@ -18,15 +18,15 @@
*/
public class RAMDirectoryProvider implements DirectoryProvider<RAMDirectory> {
- private RAMDirectory directory;
+ private final RAMDirectory directory = new RAMDirectory();
private String indexName;
public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
indexName = directoryProviderName;
+ directory.setLockFactory( DirectoryProviderHelper.createLockFactory( null, properties ) );
}
public void start() {
- directory = new RAMDirectory();
try {
IndexWriter.MaxFieldLength fieldLength = new IndexWriter.MaxFieldLength( IndexWriter.DEFAULT_MAX_FIELD_LENGTH );
IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), true, fieldLength );
@@ -42,7 +42,9 @@
return directory;
}
- public void stop() {}
+ public void stop() {
+ directory.close();
+ }
@Override
public boolean equals(Object obj) {
Added: search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockFactoryFactory.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockFactoryFactory.java (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockFactoryFactory.java 2009-03-05 19:08:10 UTC (rev 16087)
@@ -0,0 +1,21 @@
+// $Id$
+package org.hibernate.search.test.directoryProvider;
+
+import java.io.File;
+import java.util.Properties;
+
+import org.apache.lucene.store.LockFactory;
+import org.apache.lucene.store.SingleInstanceLockFactory;
+import org.hibernate.search.store.LockFactoryFactory;
+
+public class CustomLockFactoryFactory implements LockFactoryFactory {
+
+ // A real implementation would probably not use a static field; useful to keep the test simple.
+ static String optionValue;
+
+ public LockFactory createLockFactory(File indexDir, Properties dirConfiguration) {
+ optionValue = dirConfiguration.getProperty( "locking_option" );
+ return new SingleInstanceLockFactory();
+ }
+
+}
Added: search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockProviderTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockProviderTest.java (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/directoryProvider/CustomLockProviderTest.java 2009-03-05 19:08:10 UTC (rev 16087)
@@ -0,0 +1,46 @@
+// $Id$
+package org.hibernate.search.test.directoryProvider;
+
+import junit.framework.TestCase;
+
+import org.hibernate.search.test.util.FullTextSessionBuilder;
+
+/**
+ * @author Sanne Grinovero
+ */
+public class CustomLockProviderTest extends TestCase {
+
+ public void testUseOfCustomLockingFactory() {
+ assertNull( CustomLockFactoryFactory.optionValue );
+ FullTextSessionBuilder builder = new FullTextSessionBuilder();
+ builder
+ .addAnnotatedClass( SnowStorm.class )
+ .setProperty( "hibernate.search.default.locking_option", "somethingHere" )
+ .setProperty( "hibernate.search.default.locking_strategy", "org.hibernate.search.test.directoryProvider.CustomLockFactoryFactory")
+ .build();
+ builder.close();
+ assertEquals( "somethingHere", CustomLockFactoryFactory.optionValue );
+ }
+
+ public void testFailOnInexistentLockingFactory() {
+ FullTextSessionBuilder builder = new FullTextSessionBuilder();
+ try {
+ builder
+ .addAnnotatedClass( SnowStorm.class )
+ .setProperty( "hibernate.search.default.locking_option", "somethingHere" )
+ .setProperty( "hibernate.search.default.locking_strategy", "org.hibernate.NotExistingFactory")
+ .build();
+ builder.close();
+ fail();
+ }
+ catch (org.hibernate.HibernateException e) {
+ Throwable causeSearch = e.getCause();
+ assertNotNull( causeSearch );
+ assertTrue( causeSearch instanceof org.hibernate.search.SearchException );
+ Throwable causeLockin = causeSearch.getCause();
+ assertNotNull( causeLockin );
+ assertTrue( causeLockin.getMessage().startsWith("Unable to find LockFactory") );
+ }
+ }
+
+}
15 years, 10 months
Hibernate SVN: r16086 - search/trunk/src/java/org/hibernate/search/store.
by hibernate-commits@lists.jboss.org
Author: sannegrinovero
Date: 2009-03-05 13:55:28 -0500 (Thu, 05 Mar 2009)
New Revision: 16086
Modified:
search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
Log:
trivial fix in exception messages: IndexShardingStrategy still called as ShardingStrategy
Modified: search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java 2009-03-05 15:36:46 UTC (rev 16085)
+++ search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java 2009-03-05 18:55:28 UTC (rev 16086)
@@ -82,18 +82,18 @@
shardingStrategy = (IndexShardingStrategy) shardigStrategyClass.newInstance();
}
catch (ClassNotFoundException e) {
- throw new SearchException( "Unable to find ShardingStrategy class " + shardingStrategyName + " for " + directoryProviderName, e );
+ throw new SearchException( "Unable to find IndexShardingStrategy class " + shardingStrategyName + " for " + directoryProviderName, e );
}
catch (IllegalAccessException e) {
- throw new SearchException( "Unable to create instance of ShardingStrategy class " + shardingStrategyName
+ throw new SearchException( "Unable to create instance of IndexShardingStrategy class " + shardingStrategyName
+ " Be sure to have a no-arg constructor", e );
}
catch (InstantiationException e) {
- throw new SearchException( "Unable to create instance of ShardingStrategy class " + shardingStrategyName
+ throw new SearchException( "Unable to create instance of IndexShardingStrategy class " + shardingStrategyName
+ " Be sure to have a no-arg constructor", e );
}
catch (ClassCastException e) {
- throw new SearchException( "ShardingStrategy class does not implements DirecotryProviderShardingStrategy: "
+ throw new SearchException( "ShardingStrategy class does not implement IndexShardingStrategy: "
+ shardingStrategyName, e );
}
}
15 years, 10 months
Hibernate SVN: r16085 - core/trunk/documentation/envers/src/main/docbook/en-US/content.
by hibernate-commits@lists.jboss.org
Author: adamw
Date: 2009-03-05 10:36:46 -0500 (Thu, 05 Mar 2009)
New Revision: 16085
Modified:
core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml
core/trunk/documentation/envers/src/main/docbook/en-US/content/exceptions.xml
Log:
Documentation updates
Modified: core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml
===================================================================
--- core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml 2009-03-05 14:19:28 UTC (rev 16084)
+++ core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml 2009-03-05 15:36:46 UTC (rev 16085)
@@ -189,6 +189,11 @@
</para>
<para>
+ If you'd like to override auditing behaviour of some fields/properties in an embedded component, you can use
+ the <literal>@AuditOverride(s)</literal> annotation on the place where you use the component.
+ </para>
+
+ <para>
If you want to audit a relation mapped with <literal>@OneToMany+@JoinColumn</literal>,
please see <xref linkend="exceptions"/> for a description of the additional
<literal>@AuditJoinTable</literal> annotation that you'll probably want to use.
Modified: core/trunk/documentation/envers/src/main/docbook/en-US/content/exceptions.xml
===================================================================
--- core/trunk/documentation/envers/src/main/docbook/en-US/content/exceptions.xml 2009-03-05 14:19:28 UTC (rev 16084)
+++ core/trunk/documentation/envers/src/main/docbook/en-US/content/exceptions.xml 2009-03-05 15:36:46 UTC (rev 16085)
@@ -71,11 +71,6 @@
collections of components
</para>
</listitem>
- <listitem>
- <para>
- relations in components
- </para>
- </listitem>
</orderedlist>
</sect1>
15 years, 10 months
Hibernate SVN: r16084 - tags.
by hibernate-commits@lists.jboss.org
Author: max.andersen(a)jboss.com
Date: 2009-03-05 09:19:28 -0500 (Thu, 05 Mar 2009)
New Revision: 16084
Added:
tags/TOOLS_3_2_4_GA/
Log:
3.2.4.GA tools release.
Copied: tags/TOOLS_3_2_4_GA (from rev 16083, branches/Branch_3_2/HibernateExt)
15 years, 10 months
Hibernate SVN: r16083 - tags.
by hibernate-commits@lists.jboss.org
Author: max.andersen(a)jboss.com
Date: 2009-03-05 09:18:44 -0500 (Thu, 05 Mar 2009)
New Revision: 16083
Removed:
tags/TOOLS_3_2_4_GA/
Log:
15 years, 10 months
Hibernate SVN: r16082 - tags.
by hibernate-commits@lists.jboss.org
Author: max.andersen(a)jboss.com
Date: 2009-03-05 09:09:15 -0500 (Thu, 05 Mar 2009)
New Revision: 16082
Added:
tags/TOOLS_3_2_4_GA/
Log:
15 years, 10 months