Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Configuring the application to use multiple data sources

Explorer ,
Sep 20, 2012 Sep 20, 2012
627
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Sep 20, 2012 Sep 20, 2012

It appears that the datasource attribute of <cfcomponent> cannot be a variable and must be a static string.  For instance, datasource="#session.myDSN#" will not work.  It's too bad, as this would have been a good feature.  Is there a way around this?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Sep 21, 2012 Sep 21, 2012

I have functions inside components that take the datasource as an argument.  However, I don't use session variables inside components.

What are the details of, "will not work"?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Sep 21, 2012 Sep 21, 2012
LATEST

Sorry I was so vague, I hate it when people do that.  I also didn't realize this created a forum post in the adobe forums, so for context I am stating that the datasource attribute on a persistent component cannot be dynamic. If you try to set the datasource attribute using a variable or method it will fail with the error:

Message: Could not initialize class cfArt2ecfc384392074

StackTrace: java.lang.ClassCastException: java.lang.NoClassDefFoundError: Could not initialize class cfArt2ecfc384392074 at sun.misc.Unsafe.ensureClassInitialized(Native Method) at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25) at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122) at java.lang.reflect.Field.acquireFieldAccessor(Field.java:918) at java.lang.reflect.Field.getFieldAccessor(Field.java:899) at java.lang.reflect.Field.get(Field.java:358) at coldfusion.runtime.MetadataUtils.getBasicComponentMetadata(MetadataUtils.java:169) at coldfusion.orm.mapping.CFPropertyBinder.<init>(CFPropertyBinder.java:114) at coldfusion.orm.hibernate.HibernateConfiguration.generateHbmDocFromCFCs(HibernateConfiguration.java:974) at coldfusion.orm.hibernate.HibernateConfiguration.generateAndLoadHBMFilesFromCFCs(HibernateConfiguration.java:637) at coldfusion.orm.hibernate.HibernateConfiguration.buildConfiguration(HibernateConfiguration.java:530) at coldfusion.orm.hibernate.HibernateConfiguration.initHibernateConfiguration(HibernateConfiguration.java:179) at coldfusion.orm.hibernate.HibernateConfiguration.<init>(HibernateConfiguration.java:152) at coldfusion.orm.hibernate.ConfigurationManager.initConfiguration(ConfigurationManager.java:67) at coldfusion.orm.hibernate.HibernateProvider.InitializeORMForApplication(HibernateProvider.java:176) at coldfusion.orm.hibernate.HibernateProvider.beforeApplicationStart(HibernateProvider.java:79) at coldfusion.filter.ApplicationFilter.fireBeforeAppStartEvent(ApplicationFilter.java:504) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:239) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at coldfusion.filter.PathFilter.invoke(PathFilter.java:94) at coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:27) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) at coldfusion.CfmServlet.service(CfmServlet.java:200) at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at jrun.servlet.FilterChain.doFilter(FilterChain.java:86) at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) at jrun.servlet.FilterChain.service(FilterChain.java:101) at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286) at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

So for example, in your Application.cfc you set:

this.datasource = "SOME_DSN";

application.myDSN = "SOME_OTHER_DSN";

this.ormEnabled = "true";

....

Then, in Art.cfc (using the example in the docs):

<cfcomponent persistent="true" datasource="#application.myDSN#" table="Art">

  ...

</cfcomponent>

This will result in said error.  If I set the datasource to static text it works:

<cfcomponent persistent="true" datasource="SOME_OTHER_DSN" table="Art">

  ...

</cfcomponent>

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources