Today, a ColdFusion stack trace, on ".NET Developer's Journal". Compared to JSP, there's not much of an improvement, since ColdFusion is unable to track the line where the error happened. But at least it details some useful information with a specialized error-handler (SQL error in that case). I put below a copy of the page, in case of the source error is corrected. Of course, such information should never be displayed to the customer on a production site.
Another interesting thing is the approach taken by ColdFusion : pipelining with filters. We see in the stack trace the following steps: DataSource, Globals, Browser, ClientScopePersistence, Exception, Path, RequestMonitor, Application, Include. Some people may think "overkill", and some days I may be one of those. Right now I think "clean, very procedural but clean". After all, building websites with Java following the SUN way has never been object-oriented, so why not. And in fact, whereas some people see in a so called Model 2X an evolution which would be good to integrate in JSP engines, I can't help thinking it fits nicely with the kludgy evolution JSP has always had since its birth. J2EE 1.3 Filters are of course from a least advanced engineering, but they are predictable, which is something very important while debugging.
[Ecoute en cours: Eye to eye with you - Nancy Danino - Xavier Jamaux - (4:05)]
|
Error Occurred While Processing Request
|
Error Executing Database Query.
|
|
General error: Table 'content.dotnetspecial' doesn't exist
|
| |
The error occurred in E:\Inetpub\wwwroot\dotnet\readmessage.cfm: line 1
|
-1 : Unable to display error's location in a CFML template.
|
|
| SQL |
select *
FROM dotnetspecial
order by id desc
|
| DATASOURCE |
content |
| VENDORERRORCODE |
1146 |
| SQLSTATE |
S1000 |
|
|
Please try the following:
|
| Browser |
Mozilla/5.0 (Windows; U; Windows NT 5.0; fr-FR; rv:1.5) Gecko/20031007 |
| Remote Address |
xxx.xxx.xxx.xxx |
| Referrer |
http://sys-con.com/dotnet/articleprint.cfm?id=356 |
| Date/Time |
08-Jan-04 06:18 PM |
|
|
Stack Trace
|
at cfreadmessage2ecfm205899276.runPage(E:\Inetpub\wwwroot\dotnet\readmessage.cfm:1)
at cfreadmessage2ecfm205899276.runPage(E:\Inetpub\wwwroot\dotnet\readmessage.cfm:1)
java.sql.SQLException: General error: Table 'content.dotnetspecial' doesn't exist
at org.gjt.mm.mysql.MysqlIO.sendCommand(Unknown Source)
at org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(Unknown Source)
at org.gjt.mm.mysql.MysqlIO.sqlQuery(Unknown Source)
at org.gjt.mm.mysql.Connection.execSQL(Unknown Source)
at org.gjt.mm.mysql.Connection.execSQL(Unknown Source)
at org.gjt.mm.mysql.Statement.execute(Unknown Source)
at org.gjt.mm.mysql.jdbc2.Statement.execute(Unknown Source)
at coldfusion.server.j2ee.sql.JRunStatement.execute(JRunStatement.java:212)
at coldfusion.sql.Executive.executeQuery(Executive.java:974)
at coldfusion.sql.Executive.executeQuery(Executive.java:886)
at coldfusion.sql.SqlImpl.execute(SqlImpl.java:229)
at coldfusion.tagext.sql.QueryTag.setupCachedQuery(QueryTag.java:603)
at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:443)
at cfreadmessage2ecfm205899276.runPage(E:\Inetpub\wwwroot\dotnet\readmessage.cfm:1)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:147)
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:357)
at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:62)
at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:107)
at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:43)
at coldfusion.filter.PathFilter.invoke(PathFilter.java:80)
at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:47)
at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:35)
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:43)
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
at coldfusion.CfmServlet.service(CfmServlet.java:105)
at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91)
at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:252)
at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:527)
at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:192)
at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:348)
at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:451)
at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:294)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) |
|
(Cyberpunk, 2004/01/08 18:17)
lien permanent
En tout cas, sympa pour une premiere application Java.
Perso, ce fut un moteur 3D...
http://jyperion.com/java/3d_1 et http://jyperion.com/java/3d_2
Thierry
http://janaudy.com/
Posté par Thierry Janaudy, le dimanche 11 janvier 2004 à 13:33 #
Il aurait fallu fusionner les deux pour faire la visualisation de l'atelier en 3D
Posté par Damien, le dimanche 11 janvier 2004 à 15:51 #