720 likes | 917 Views
Getting to Know ColdFusion MX. Rob Brooks-Bilson Web Technology Manager Author, Programming ColdFusion (O’Reilly) 05/21/2002 Presented to the MD CFUG http://www.cfug-md.org. Agenda. More than we can cover in 1 hour Getting started Infrastructure changes
E N D
Getting to Know ColdFusion MX Rob Brooks-Bilson Web Technology Manager Author, Programming ColdFusion (O’Reilly) 05/21/2002Presented to the MD CFUGhttp://www.cfug-md.org
Agenda • More than we can cover in 1 hour • Getting started • Infrastructure changes • Deprecated and obsolete tags/functions • Language changes • New features • Resources • Q&A
Getting Started • Installation Planning • System requirements generally greater than CF 5 • Will only upgrade from CF 5 • Two installation options: • Standard • Removes CF 5 • Uses existing web server • Stand-alone • Uses internal web server • Port 8500 by defualt • Not recommended for production • Many config options in\CFusionMX\runtime\servers\default\SERVER-INF\jrun.xml
Getting Started • Supported Operating Systems • Windows • 98 • ME (except CF Enterprise) • NT 4 • 2000 • XP • Linux • ReaHat 6.2-7.2 • SuSE 7.2-7.3 • Unix • Solaris 7, 8 • UPUX 11.00
Getting Started • Supported Web Servers • CF MX internal web server • Apache 1.32x and 2.x • IIS 4 and 5 • Netscape 3.6x • iPlanet 4.x and 6.x • Zeus 4.1 (Linux SuSE) • Not officially supported – but it works! • WebSite Pro (forthcoming TechNote)
Getting Started • Nervous about upgrading? • Initial install can be done “stand-alone”, allowing you to run CF 5 and CF MX on the same server • Point both CF 5 and CF MX to the same web root • When you are satisfied, you can reconfigure MX to use your web server instead • Code compatibility analyzer in CF Admin does a good job of identifying potential issues
Infrastructure Changes - Java • ColdFusion MX is completely rewritten in Java • Ships with the Sun 1.3.1_03 JRE (1.3.1_01 on HP-UX) • You can also use the IBM JVM 1.2.2 or later • JDBC drivers for most popular databases • You can still use ODBC for DBs without JDBC drivers • J2EE under the hood • Now shipping • Professional and Enterprise (embedded JRun) • Available later this year • CF MX for J2EE App Servers • JRun (full version) • IBM WebSphere • BEA WebLogic • Sun One
Infrastructure Changes - Java • CFML is compiled to Java byte code • Many operations execute faster than previous versions of CF • DB operations should perform about the same. JDBC is NOT inherently faster than ODBC • More access to underlying Java architecture – if you want it! • JSP pages • JSP tag libraries • Servlets • EJBs • Class files
Infrastructure Changes - Registry • CF MX no longer uses the registry (Windows and *nix) to store config information. Majority is now in XML config files: • The XML is WDDX • Located in \CFusionMX\lib • Examples • Scheduled tasks: neo-cron.xml • DSN info: neo-query.xml • Verity info: neo-verity.xml
Example: Neo-cron.xml <wddxPacket version='1.0'><header/><data><array length='2'><struct type='coldfusion.server.ConfigMap'><var name='test'><struct type='coldfusion.scheduling.CronTabEntry'><var name='path'><string></string></var><var name='file'><string></string></var><var name='resolveurl'><boolean value='false'/></var><var name='url'><string>http://test.com</string></var><var name='publish'><boolean value='false'/></var><var name='password'><string></string></var><var name='operation'><string>HTTPRequest</string></var><var name='username'><string></string></var><var name='interval'><string>ONCE</string></var><var name='start_date'><string>5/9/2002</string></var><var name='http_port'><string>80</string></var><var name='task'><string>test</string></var><var name='http_proxy_port'><string>23</string></var><var name='proxy_server'><string></string></var><var name='start_time'><string>10:24:15 PM</string></var><var name='request_time_out'><string></string></var></struct></var></struct><boolean value='false'/></array></data></wddxPacket>
Infrastructure Changes - Clustering • Hardware load-balancers are no longer supported within the CF Admin • Cisco’s DFP supported via ClusterCATS • ClusterCATS updated for CF MX • For new features and configuration, see new Using ClusterCATS book in the CF Docs
Deprecated (works now, but wont in future releases) CFGRAPH CFGRAPHDATA CFREGISTRY (*nix only) CFSERVLET CFSERVLETPARAM Obsolete (these no longer work in MX) CFINTERNALADMINSECURITY CFAUTHENTICATE CFIMPERSONATE CFINTERNALDEBUG CFNEWINTERNALADMINSECURITY Deprecated and Obsolete Tags
Deprecated GetTemplatePath() ParameterExists() Obsolete AuthenticatedContext() AuthenticatedUser() CF_GetDataSourceUserName() CF_IsColdFusionDataSource() CF_SetDataSourcePassword() CF_SetDataSourceUserName() CFusion_DBConnections_Flush() CFusion_Disable_DBConnections() CFusion_GetODBCDSN() CFusion_GetODBCINI() CFusion_SetODBCINI() CFusion_Settings_Refresh() CFusion_VerifyMail() IsAuthenticated() IsAuthorized() IsProtected Deprecated and Obsolete Functions
Language Changes - Comments • New comment rules • Within tags • Inside custom tag calls • Within function parameters (not inside string quotes) • Between pound signs • Nested comments
Example: Comments <CFSET x = 1 <!--- I am valid --->> <CFSET y = DateFormat(Now(), 'mm/dd/yyyy' <!--- I'm valid too --->)> <CFSET z = (1 + 2<!--- still valid --->)> <CF_MyTag VAR="x" <!--- I'm valid too --->> <CFOUTPUT> #y<!---I'm valid as well, although this looks weird---># </CFOUTPUT> <H2>Open the file Comments.cfm to see what I'm doing</H2>
Language Changes – Variable Scope Structs • New “scope” structures: • Variables (local) scope • Server • Caller (custom tags) • Use CFDUMP to see the contents of any of the scope structures • Be careful when calling variable names that are also scope structures such as URL, FILE, etc.
Example: Variable Scope Structs <CFSET VARIABLES.x=1> <CFSET CALLER.y="test the caller"> <CFDUMP VAR="#VARIABLES#"> <P> <CFDUMP VAR="#CALLER#"> <P> <CFDUMP VAR="#SERVER#">
Language Changes – Variable Names • Additional structure changes • Compound variable names delimited with periods now auto create structures:In CF 5:<CFSET Employee.Name=“Joe”>Created a variable called Employee.NameIn CF MX, it creates a structure called Employee and a key called Name with the value “Employee” • Auto generated structures like this can’t be more than 3 levels deep: my.var.name
Example: Auto Generating a Structure <CFSET Employee.Name = "Joe Blow"> <CFSET Employee.Age = "30"> <CFDUMP VAR="#Employee#">
Language Changes – Variables • Duplicate URL parameters now come across as a comma delimited list of values. • ?a=2&a=2 returns 1,2 in MX • In CF 5, only the last value is passed • Compound expressions can now be evaluated inline without the use of the Evaluate() function:<CFSET a=1+2><CFSET b=(10*5)+32>
Example: Duplicate URL Variable Names <CFIF IsDefined('URL.a')> a=<CFOUTPUT>#URL.a#</CFOUTPUT> <P> </CFIF> <CFOUTPUT> <A HREF="#CGI.Script_Name#?a=1&a=2">Click me</A> </CFOUTPUT>
Language Changes – Dates and Times • New Short, Medium, Long, and Full masks in DateFormat() and TimeFormat() • “gg” mask (era) is now supported in DateFormat() • Date functions support years in the range 100 AD – 9999 AD • Two digit years: • JRE and current locale determine how to process • For most locales, two digit years are processed relative to the current century. • Two digit years are interpreted to within 80 years before the current date and 20 years after. • Exceptions • Within 72 years before the current date, and 28 years after: English (Australian), English (New Zealand), German (Austrian), German (Standard), German (Swiss), Portuguese (Brazilian), Portuguese (Standard), Swedish.
Example: DateFormat() <CFSET TheDate = Now()> <CFOUTPUT> TheDate = #DateFormat(TheDate, 'mm/dd/yyyy')# <P> These formats are new in ColdFusion MX:<BR> short: #DateFormat(TheDate, 'short')#<BR> medium: #DateFormat(TheDate, 'medium')#<BR> long: #DateFormat(TheDate, 'long')#<BR> full: #DateFormat(TheDate, 'full')#<BR> </CFOUTPUT>
Example: TimeFormat() <CFSET TheTime = Now()> <CFOUTPUT> TheTime = #TimeFormat(TheTime,'hh:mm:ss tt')#<P> <P> These formats are new in ColdFusion MX:<BR> short: #TimeFormat(TheTime, 'short')#<BR> medium: #TimeFormat(TheTime, 'medium')#<BR> long: #TimeFormat(TheTime, 'long')#<BR> full: #TimeFormat(TheTime, 'full')#<BR> </CFOUTPUT>
Language Changes - RequestTimeOut • RequestTimeOut URL parameter is no longer supported in MX • Instead, CFSETTING now has a REQUESTTIMEOUT parameter • Allows you to set timeouts on a page-by-page basis • Place in your Application.cfm for application wide setting • You can support “legacy” code like this:<CFIF IsDefined(‘URL.RequestTimeOut’)> <CFSETTING REQUESTTIMEOUT = “#URL.RequestTimeOut#”></CFIF>
Language Changes - CFQUERY • TIMEOUT attribute is now in seconds and not milliseconds as in CF 5. Also applies to each part of query, not the whole operation. • CONNECTSTRING attribute is no longer supported due to JDBC issues. This means you can no longer make DSN-less connections. • DNNAME, DBSERVER, PROVIDER, and PROVIDERDSN are all obsolete • DBTYPE attribute is no longer supported except for DBTYPE=“Query” • CF now properly escapes single quotes in values passed to CFQUERY
Language Changes - Query Objects • Query objects created manually (via QueryNew()) can contain complex data types as individual cell values • Can’t be used for query of queries • Can’t be saved to DB without first serializing compex data types into WDDX or other string format • Invalid names passed to QueryAddNew() now throw an error (CF 5 let them go)
Example: Query Cell Containing an Array <CFSET Colors = ArrayNew(1)> <CFSET Colors[1]="Red"> <CFSET Colors[2]="Silver"> <CFSET Colors[3]="Blue"> <CFSET Products = QueryNew("ProductName, Color, Price, Qty")> <CFSET NewRows = QueryAddRow(Products, 2)> <CFSET QuerySetCell(Products, "ProductName", "Widget", 1)> <CFSET QuerySetCell(Products, "Color", Colors, 1)> <CFSET QuerySetCell(Products, "Price", "19.99", 1)> <CFSET QuerySetCell(Products, "Qty", "46", 1)> <CFSET QuerySetCell(Products, "ProductName", "Thingy", 2)> <CFSET QuerySetCell(Products, "Color", Colors, 2)> <CFSET QuerySetCell(Products, "Price", "34.99", 2)> <CFSET QuerySetCell(Products, "Qty", "12", 2)> <CFDUMP VAR="#Products#">
Language Changes – Query of Queries • Improved performance • Orders of magnitude for many operations • Recommended upper limit for records is now 50,000 rows. CF 5 was 10,000 • Column aliases in ORDER BY, GROUP BY, and HAVING • Neither MX nor CF 5 support table aliases • Full support for LIKE • Arbitrary expressions can be: • Grouped • In aggregate functions • Additionally, arbitrary functions are allowed in aggregate functions
Language Changes – Query of Queries • Upper() and Lower() scalar functions for case insensitive matching • Addition and subtraction can be performed on DATE types • Improved error messages • != may be used instead of <> for comparisons
Language Changes - CFMAIL • New SPOOLENABLE attribute – two options • Yes (default): Copy of message is queued to disk until it can be sent. Same behavior as CF 5. • No: Messages are queued in memory until they can be sent • GROUP attribute now works correctly
Language Changes – Binary • Binary strings are now represented as byte-arrays • You can use standard CF string functions for manipulating binary data without having to Base 64 encode • CFDUMP can dump the contents of binary objects, or you can use CFLOOP to iterate over the byte-array
Example: Manipulating Binary <CFINCLUDE TEMPLATE="_TwosCompToDec.cfm"> <CFSET flnm="d:\cfusionmx\wwwroot\cfide\administrator\images\cfmx.gif"> <CFFILE ACTION="ReadBinary" FILE="#flnm#" VARIABLE="TheFile"> <CFSET Width = TwosCompToDec((TheFile[7]) + (TheFile[8] * 256), 8)> <CFSET Height = TwosCompToDec((TheFile[9]) + (TheFile[10] * 256), 8)> <H2>GIF Dimensions</H2> <CFOUTPUT> Width: #Width#<BR> Height: #Height#<BR> </CFOUTPUT> <CFDUMP VAR="#TheFile#">
Language Changes - CFSCRIPT • Try/Catch exception handling added • Syntax a bit different than CFTRY/CFCATCH • Catch statements coded outside Try block • No CFCATCH structure. You get to define your own to hold error information • No CFTHROW or CFRETHROW equivalent • For-in loop can now be used to loop over COM collections
Example: Try/Catch in CFScript <CFSCRIPT> try { x=y+1; } catch("Expression" exception) { writeOutput("Expression Error: " & exception.Message); } catch("Any" exception) { writeOutput("General Error: " & exception.Message); } </CFSCRIPT>
Example: For-in Loop over COM in CFScript <cfscript> fso = CreateObject("COM", "Scripting.FileSystemObject"); for (i in fso.drives) { WriteOutput(i.DriveLetter &"<br>"); } </cfscript>
Language Changes – Regular Expressions • MX Introduces a totally new regular expression engine • “Perl” compatible • More special characters and escape sequences • Case conversion in replacement strings • Minimal matching
Example: Regular Expressions <CFSET String="I want to go to to the park."> <CFOUTPUT> From the CF Docs:<BR> #REReplaceNoCase(String, "([A-Za-z]+)[ ]+\1","\1","ALL")# <P> Should be:<BR> #ReReplaceNoCase(String, "\b([a-z]+)[ ]+\1", "\1", "All")# </CFOUTPUT>
Language Changes - Unicode • CF MX Supports Unicode! • MX supports Java UCS-2 character code values in the range 0-65535 • CF 5 only supported characters in the range 1-255 • Character set support is a function of the underlying JRE • Default encoding is UTF-8
Language Changes - Unicode • CFPROCESSINGDIRECTIVE tag can now set the encoding for a page • The most common character sets are UTF-8, UTF-16, UTF-16BE, UTF-16LE, US-ASCII, and ISO-8859-1 • You may use any character set supported by your JRE • Many tags and functions have a new CHARSET attribute/prameter • CFCONTENT • CFFILE • CFHTTP • ToBase64() • ToString() • UrlDecode() • UrlEncodedFormat()
Language Changes – LS Functions • Locales are defined by your JRE • Locales may be different than in CF 5 • LSEuroCurrencyFormat() now only returns EUR as the currency symbol for locales that support it • LSCurrencyFormat() does not return EUR as the currency symbol for any locale – even those supporting the Euro • There are several other changes to LS functions. Consult the CF Docs for more info.
Language Changes - Locking • Contrary to rumor, CFLOCK is not gone – just different • If you don’t lock access to shared scope variables (application, session, server), CF MX won’t experience the memory corruption that could occur in previous versions • However, race conditions as well as overwriting of values can still occur. • In many (most?) cases, you’ll continue to want to lock
Language Changes - Verity • All Tags (CFCOLLECTION, CFINDEX, CFSEARCH): • Collection names may now contain spaces • New SearchEngine exception type is thrown when an error occurs with CFINDEX, CFCOLLECTION, and CFSEARCH
Language Changes - Verity • Changes to CFCOLLECTION • ACTION is now required • New ACTION=“List”. Returns query with names of all registered collections – VDK and K2 • ACTION=“Map” is no longer necessary as MX automatically detects mapped collections
Language Changes - Verity • Changes to CFINDEX • ACTION=“Optimize” is obsolete in MX • EXTERNAL attribute is no longer necessary as MX automatically detects mapped collections. Do not use it.
Language Changes - Verity • Changes to CFSEARCH • Now allows fully qualified (absolute) path names in the COLLECTION attribute • EXTERNAL attribute is no longer necessary as MX automatically detects mapped collections. Do not use it.
Language Changes - Verity • New K2 Server functions • GetK2ServerDocCount() • GetK2ServerDocCountLimit() • IsK2ServerABroker() • IsK2ServerOnline()
New Features - CFHTTP • Can now post raw XML using new “XML” CFHTTPPARAM Type • New FIRSTROWASHEADERS attribute solves problem with first row in delimited file always being lost • CFHTTP follows a maximum of 4 redirects. CF 5 would follow up to 5 • Response headers return structures when multiple keys have same name. CF 5 returned arrays • Certain behaviors such as SSL support vary depending on your JRE • See the Release Notes for more info
New Features - Security • Advanced Security (SiteMinder) is gone • Replaced with new security framework • Application based security • New tags • CFLOGIN • CFLOGINUSER • CFLOGOUT • New Functions • IsUserInRole() • GetAuthUser() • Sandbox Security • Lock-down tags, functions, databases, files, directoriesm and IP addresses and ports based on directory
New Features – Charting and Graphing • CFGRAPH and CFGRAPHDATA are deprecated. • Still functional. However, may produce unexpected output. • Run the code compatibility analyzer in the CF Admin to find templates containing these tags • Replaced by CFCHART, CFCHARTSERIES, and CFCHARTDATA