Copy link to clipboard
Copied
This question was posted in response to the following article: http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSbfbbf049491c37b01e63e3d129fe0a8552-7ffd.html
Copy link to clipboard
Copied
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?
Copy link to clipboard
Copied
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"?
Copy link to clipboard
Copied
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>