LoadedConfig config = loadConfig(configLoader);
if (config != null)
properties.putAll(config.getConfigurationValues());
- ParsedPersistenceXmlDescriptor unit =
- loadPersistenceUnit(classLoaderService, properties);
+ ParsedPersistenceXmlDescriptor unit = loadPersistenceUnit(properties);
if (unit != null)
properties.putAll(unit.getProperties());
{
thread.setContextClassLoader(classLoader);
build((MetadataImplementor)metadataBuilder.build(), options, target);
+ if (handler.getExceptions().size() > 0)
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("Hibernate failed:");
+ for (Exception e : handler.getExceptions())
+ {
+ builder.append("\n * ");
+ builder.append(e.getMessage());
+ AbstractSchemaMojo.printStrackTrace(builder, e);
+ builder.append("\n");
+ }
+ String error = builder.toString();
+ getLog().error(error);
+ throw new MojoFailureException(error);
+ }
}
finally
{
thread.setContextClassLoader(contextClassLoader);
- for (Exception e : handler.getExceptions())
- getLog().error(e.getMessage());
/** Track, the content of the generated script */
checkOutputFile(output, tracker);
}
* switched to "true", the genearation fo the schema should be forced!
*/
if (tracker.check(EXECUTE, execute.toString()) && execute)
+ {
+ getLog().info(
+ "hibernate.schema.execute was switched on: " +
+ "forcing generation/execution of SQL"
+ );
tracker.touch();
+ }
+ configure(properties, execute, EXECUTE);
/**
* Configure the generation of the SQL.
configure(properties, createNamespaces, HBM2DLL_CREATE_NAMESPACES);
configure(properties, implicitNamingStrategy, IMPLICIT_NAMING_STRATEGY);
configure(properties, physicalNamingStrategy, PHYSICAL_NAMING_STRATEGY);
- tracker.track(OUTPUTDIRECTORY, outputDirectory); // << not reflected in hibernate configuration!
- tracker.track(SCAN_DEPENDENCIES, scanDependencies); // << not reflected in hibernate configuration!
- tracker.track(SCAN_TESTCLASSES, scanTestClasses.toString()); // << not reflected in hibernate configuration!
- tracker.track(TEST_OUTPUTDIRECTORY, testOutputDirectory); // << not reflected in hibernate configuration!
+ configure(properties, outputDirectory, OUTPUTDIRECTORY);
+ configure(properties, scanDependencies, SCAN_DEPENDENCIES);
+ configure(properties, scanTestClasses, SCAN_TESTCLASSES);
+ configure(properties, testOutputDirectory, TEST_OUTPUTDIRECTORY);
/**
* Special treatment for the configuration-value "show": a change of its
throw new MojoFailureException("Hibernate configuration is missing!");
}
- getLog().info("Gathered hibernate-configuration (turn on debugging for details):");
+ getLog().info("Gathered configuration:");
for (Entry<Object,Object> entry : properties.entrySet())
getLog().info(" " + entry.getKey() + " = " + entry.getValue());
}
{
try
{
- File dir = new File(outputDirectory);
+ File dir = new File(path);
if (dir.exists())
{
getLog().info("Adding " + dir.getAbsolutePath() + " to the list of roots to scan...");
urls.add(dir.toURI().toURL());
}
+ else
+ getLog().warn(
+ "the directory cannot be scanned for annotated classes, " +
+ "because it does not exist: " +
+ dir.getAbsolutePath()
+ );
}
catch (MalformedURLException e)
{
}
private ParsedPersistenceXmlDescriptor loadPersistenceUnit(
- ClassLoaderService classLoaderService,
Properties properties
)
throws
MojoFailureException
{
- PersistenceXmlParser parser =
- new PersistenceXmlParser(
- classLoaderService,
- PersistenceUnitTransactionType.RESOURCE_LOCAL
- );
-
- Map<String, ParsedPersistenceXmlDescriptor> units =
- parser.doResolve(properties);
+ List<ParsedPersistenceXmlDescriptor> units =
+ PersistenceXmlParser.locatePersistenceUnits(properties);
if (persistenceUnit == null)
{
- Iterator<String> names = units.keySet().iterator();
- if (!names.hasNext())
+ if (units.isEmpty())
{
getLog().info("Found no META-INF/persistence.xml.");
return null;
}
- String name = names.next();
- if (!names.hasNext())
+ if (units.size() == 1)
{
- getLog().info("Using persistence-unit " + name);
- return units.get(name);
+ ParsedPersistenceXmlDescriptor descriptor = units.get(0);
+ getLog().info("Using persistence-unit " + descriptor.getName());
+ return descriptor;
}
StringBuilder builder = new StringBuilder();
builder.append("No name provided and multiple persistence units found: ");
- builder.append(name);
- while(names.hasNext())
+ Iterator<ParsedPersistenceXmlDescriptor> it = units.iterator();
+ while(it.hasNext())
{
- builder.append(", ");
- builder.append(names.next());
+ builder.append(it.next().getName());
+ if (it.hasNext())
+ builder.append(", ");
}
builder.append('.');
throw new MojoFailureException(builder.toString());
}
- if (units.containsKey(persistenceUnit))
+ Iterator<ParsedPersistenceXmlDescriptor> it = units.iterator();
+ while(it.hasNext())
{
- getLog().info("Using configured persistence-unit " + persistenceUnit);
- return units.get(persistenceUnit);
+ ParsedPersistenceXmlDescriptor descriptor = it.next();
+ if (descriptor.getName().equals(persistenceUnit))
+ {
+ getLog().info("Using configured persistence-unit " + persistenceUnit);
+ return descriptor;
+ }
}
throw new MojoFailureException("Could not find persistence-unit " + persistenceUnit);
}
+
+
+ public static void printStrackTrace(StringBuilder builder, Throwable t)
+ {
+ while (t != null)
+ {
+ builder.append("\n\tCause: ");
+ builder.append(t.getMessage() == null ? "" : t.getMessage().replaceAll("\\s+", " "));
+ for (StackTraceElement trace : t.getStackTrace())
+ {
+ builder.append("\n\t");
+ builder.append(trace.getClassName());
+ builder.append(".");
+ builder.append(trace.getMethodName());
+ builder.append("():");
+ builder.append(trace.getLineNumber());
+ }
+ t = t.getCause();
+ }
+ }
}