It seems that you might be setting the wrong hibernate configuration
property - at least this thread (
http://stackoverflow.com/questions/5303671/configure-hibernate-to-connect-to-database-via-jndi-datasource
)
on stack overflow indicates that the datasource property is
"hibernate.connection.datasource" and not "connection.datasource" .

The reason your migration works is that you manually look up the
datasource.

Cheers,

Alex K



On Fri, Jul 20, 2012 at 4:17 PM, Michael Prescott <
michael.r.presc...@gmail.com> wrote:

> The problem goes away if I provide a hibernate.cfg.xml file with all the
> database connection properties, and set
> HibernateSymbols.DEFAULT_CONFIGURATION to true.
>
> So I suppose my question is:
>
> What do I need to do to get rid of the hibernate.cfg.xml file?  I need to
> have my application use a data source whose name is itself specified by the
> container.  I can inject the name just fine, but my HibConfig class doesn't
> seem to be cutting the mustard.
>
> Michael
>
> On 20 July 2012 15:19, Michael Prescott <michael.r.presc...@gmail.com
> >wrote:
>
> > 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