I'm having trouble getting a connection through tapestry-hibernate.  Any
help would be appreciated!  I imagine I'm not seeing some small thing I've
overlooked.

I'm configuring the hibernate connection in code, to use a DataSource
provided by the servlet container.

The data source is available - I can tell, because I'm using it in my
tapestry module to run Flyway database migration scripts, which do modify
the database - but any tapestry-hibernate action (e.g. invoking a method on
a DAO) produces:

*java.lang.UnsupportedOperationException*
*The user must supply a JDBC connection*

   -
   
org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
   -
   
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
   -
   
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
   - org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)
   -
   org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81)
   - org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
   -
   
org.apache.tapestry5.internal.hibernate.HibernateSessionManagerImpl.startNewTransaction(HibernateSessionManagerImpl.java:38)
   -
   
org.apache.tapestry5.internal.hibernate.HibernateSessionManagerImpl.<init>(HibernateSessionManagerImpl.java:33)
   - ...

Attached are the relevant lines out of my module:


public void contributeApplicationDefaults(
MappedConfiguration<String, String> configuration) {

// There's no hibernate.cfg.xml file
configuration.add(HibernateSymbols.DEFAULT_CONFIGURATION, "false");
 }

@EagerLoad
public DatabaseMigrator buildDatabaseMigrator() {
 DataSource dataSource = (DataSource) lookup(datasourceName);
FlywayDatabaseMigrator migrator = new FlywayDatabaseMigrator(dataSource);
 migrator.updateDatabase();
return migrator;
}

public void contributeHibernateSessionSource(
OrderedConfiguration<HibernateConfigurer> config) {

HibernateConfigurer hibernateConfigurer = new HibConfig(datasourceName);

config.add("hibconfig", hibernateConfigurer);
 }

public void contributeHibernateEntityPackageManager(
Configuration<String> configuration) {
 // Specifies the package
configuration.add("com.tsg.configtool.domain");
 }

private static final class HibConfig implements HibernateConfigurer {
 private String datasourceName;

HibConfig(String datasourceName) {
 this.datasourceName = datasourceName;
}

@Override
 public void configure(org.hibernate.cfg.Configuration configuration) {
configuration.setProperty("hibernate.dialect", DB_DIALECT);
 configuration.setProperty("connection.datasource", datasourceName);
}
 }

private Object lookup(String resourceName) {
try {
 return new InitialContext().lookup(resourceName);
} catch (NamingException e) {
 throw new RuntimeException("Unable to lookup resource \""
+ resourceName + "\".", e);
 }
}



Michael

Reply via email to