Reputation: 3818
I'm trying to get a list of datasources off my server (Yes I am the server owner...this is not a hack).
I think I confused the issue by giving two examples - so I'm editing the post with ONE example and the stack trace.
Code
// Create Data Source Object
admin = new cfide.adminapi.Administrator();
admin.login("admin","[password]");
dbserv = createobject("java","coldfusion.server.ServiceFactory").getDatasourceService();
dblist = dbserv.getDatasources();
writedump(dblist);
Error Message
The error occurred in C:\wwwroot\[path]\[file].cfm: line 6
4 :
5 : dbserv = createobject("java","coldfusion.server.ServiceFactory").getDatasourceService();
6 : dblist = dbserv.getDatasources();
7 : writedump(dblist);
8 : </cfscript>
Stack Trace:
Check the ColdFusion documentation to verify that you are using the correct syntax.
Search the Knowledge Base to find a solution to your problem.
Browser Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Remote Address 127.0.0.1
Referrer
Date/Time 17-May-12 09:08 AM
Stack Trace
at cf[file]2ecfm302094979.runPage(C:\wwwroot\[path]\[file].cfm:6)
coldfusion.security.SecurityManager$UnauthenticatedCredentialsException
at coldfusion.security.SecurityManager.authenticateAdmin(SecurityManager.java:1958)
at coldfusion.sql.Executive.getDatasources(Executive.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at coldfusion.runtime.StructBean.invoke(StructBean.java:508)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2393)
at cf[file]2ecfm302094979.runPage(C:\wwwroot\[path]\[file].cfm:6)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:381)
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)
Debugging Information
ColdFusion Server Developer 9,0,1,274733
Template [path]/[file].cfm
Time Stamp 17-May-12 09:08 AM
Locale English (US)
User Agent Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Remote IP 127.0.0.1
Host Name 127.0.0.1
Execution Time
top level (16ms) C:\wwwroot\[path]\[file].cfm
· arrowtop level (0ms) CFC[ C:\wwwroot\CFIDE\adminapi\administrator.cfc | login(admin, [password]) ] from C:\wwwroot\CFIDE\adminapi\administrator.cfc @ line 3
(46 ms) STARTUP, PARSING, COMPILING, LOADING, & SHUTDOWN
(62 ms) TOTAL EXECUTION TIME
red = over 250 ms execution time
Exceptions
09:08:11.011 - coldfusion.security.SecurityManager$UnauthenticatedCredentialsException - in C:\wwwroot\[path]\[file].cfm : line 6
Upvotes: 1
Views: 3126
Reputation: 31
For others who may happen upon this post, another way to do what was wanted, without needing to authenticate with the CF Admin password is to use the getNames() function of the DataSourceService instead of getDatasources. It returns an array of all the datasource names registered on the server.
<cfscript>
dbserv3 = createobject("java","coldfusion.server.ServiceFactory").getDataSourceService();
dblist3 = dbserv3.getNames();
</cfscript>
This works on CF11
Upvotes: 1
Reputation: 361
dbserv = createobject("java","coldfusion.server.ServiceFactory").getDatasourceService();
dblist = dbserv.getDatasources();
writedump(dblist);
This works in ColdFusion. If you are getting securitycredential exception then you need to login as admin like
admin = new cfide.adminapi.Administrator();
admin.login("password","admin");
The following code will not work
dbserv2 = createobject("java","coldfusion.server.DataSourceService");
dblist2 = dbserv2.getDatasources();
And it is rightfully throwing method not found. Mainly because DataSourceService is a java Interface and doesn't have this method implemented. It is implemented by Executive class.
Upvotes: 4
Reputation: 9615
If you dump your dbserv2 variable you will see that it is not an object, it is a Java Interface, which cannot be instantiated.
To do what you want you need to request the datasource service from the service factory.
<cfscript>
dbserv2 = createobject("java","coldfusion.server.ServiceFactory").getDataSourceService();
dblist2 = dbserv2.getDatasources();
</cfscript>
Upvotes: 1