SlideShare a Scribd company logo
1 of 29
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Rupesh Kumar July 25th 2010
http://www.rupeshk.org/ : rukumar
Extending Java with ColdFusion
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Agenda
 Objective
 Using Java from CFML
 Leveraging ColdFusion Features from Java
 Areas to watch out for
 ColdFusion as a Service (CFaaS)
 Q&A
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
ColdFusion is Java
3
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
ColdFusion is Java
 ColdFusion applications are developed in CFML (and likely take
advantage of Java, XML, SOAP, and more).
 At runtime ColdFusion applications are pure Java.
 A J2EE server (internal or external)
 … running a Java application (the ColdFusion engine)
 … invoking Java code (CFML code compiled to Java bytecode).
 CFML exists only at developer time, runtime is pure Java (and deployed
like any other Java application).
 CFML source need not be present at runtime.
 Applications may be packaged and deployed like any other Java
applications.
4
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
5
ColdFusion Leverages Underlying Java
Connectivity
Security
Management
Transactions
Directory
JEE Application
Server
Java App #1
ColdFusion
Java App #2
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 6
JEE Services
Java Runtime
Presentation
(HTML, Reporting, PDF Generation, AJAX, Flash Forms)
Database
Connectivity
Document
Services
PDF/Excel/P
PT/
Word
Network
Services
(http, ftp, mail
–
smtp/pop/ima
p)
Enterprise
Services
(Exchange,
Sharepoint)
SOA
connectivity
(WebServices
FDS, Flash
Remoting)
Event
Gateways
(IM, JMS
SMS)
ColdFusion Runtime
CFML Compiler
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
ColdFusion is Java…
ColdFusion Type Java Type
String String
Number Double
Boolean Boolean
Array List/Vector
Struct Map
Date Date
Query coldfusion.sql.QueryTable
7
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Why CF + Java?
 ColdFusion and Java complement each other
 ColdFusion  Java
 Take advantage of wide set of Java libraries available
 Extend ColdFusion features
 Functionalities that are not baked in ColdFusion could be available in Java
 J2SDK APIs
 There are tons of libraries shipped with ColdFusion – Apache POI, EhCache, Hibernate,
iText, webchart etc
 Other libraries -
 Java  ColdFusion
 Productivity
 Easy to learn.
 Rapid development.
 Huge number of Services available readymade.
 Leverages standards and existing IT and training investments.
8
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 9
ColdFusion Integrated Services
 Database connectivity
 Full text searching (Verity and Solr)
 Printing (PDF)
 Document Services (PDF, Excel,
Word, PPT)
 Reporting (PDF, FlashPaper, RTF,
Excel, HTML, XML)
 Graphing and Charting
 E-Mail (POP, IMAP and SMTP)
 Exchange
 XML manipulation
 Including XSL and XPath
 Imaging
 Sharepoint
 Flash Remoting
 Server-side HTTP and FTP
 LDAP client
 Windows NT/AD authentication
 Gateways
 Socket
 JMS
 Instant messaging (including XMPP)
 SMS
 Asynchronous processing
 S3 Storage Service
 RSS Feed
 Java, COM, .NET, CORBA client
 … and more
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
ColdFusion  Java
 Java CFX Tags
 JSP and Servlets
 JSP Tag Libraries
 Direct Invocation
10
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Direct Invocation
 Object Creation
createObject(“java”, className)
<CFOBJECT type=“Java” class=“className” name=“variable”>
 Method invocation
 obj.foo(arg1, arg2,..)
 Constructors – use init
<cfobject type=”java” class=”java.lang.StringBuffer” name=”buff”>
<cfset buff.init(“CFUnited”)>
 Calling methods
<cfset buff.append(“2010”)>
 Static method
 no need to init() to call static method
integer = createObject(“Java”, “java.lang.Integer”);
intval = integer.parseInt(“10”);
11
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Java Invocation – class loading ColdFusionJava
 ColdFusion’s java invocation needs class to be loaded by ColdFusion
classloader
 Classes need to be placed in a pre-defined directory
 CF Classloader will pick up from <cf_root>/lib folder
 Parent i.e web application classloader will pick up from <cf_root>/WEB-INF/lib
 One might not have permission to do this
 Classes cannot be changed at runtime.
 Server must be restarted to pick up the change
 They cannot be application specific
 You cannot have multiple versions of the same library in the server
12
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
JavaLoader ColdFusionJava
 Project by Mark Mandel :
 http://www.compoundtheory.com/?action=javaloader.index
 Dynamically loads java libraries using its own classloader
 Create JavaLoader object
 createObject("component","javaloader.JavaLoader").
init(loadPaths [,loadColdFusionClassPath]
[,parentClassLoader]);
 Loadpaths : Array of jars or class directories
 loadColdFusionClasspath : true|false whether ColdFusion classloader will be
the parent classloader
 parentClassLoader : the parent classloader object
 Create object
 javaloader.create(className).init(arg1, arg2...);
13
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Java Invocation.. ColdFusionJava
 Watch out for
 Overloaded constructors and methods
 Resolve ambiguity using javacast – javacast(“datatype”, data)
 Java is case sensitive. Classname must be in the correct case
 For method invocation, it is better to use the correct case.
14
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Demo
15
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Java  ColdFusion
 CFCProxy
 TemplateProxy
 Dynamic Proxy
 WebServices (SOAP and REST)
 CFC methods over HTTP
 ColdFusion as a Service (CFaaS)
 Event Gateway
16
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
CFC Proxy
 Allows Java to directly invoke CFC methods
 CFCProxy
 new CFCProxy(“path to cfc");
 invoke(String method, Object[] args)
 Example
CFCProxy myCFC = new CFCProxy("C:test.cfc");
Object[] args = {"CFUnited"};
Object greeting = myCFC.invoke("greet", args);
 ColdFusion classloader should be the context classloader
 Works with cfc’s absolute path
17
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
TemplatePoxy
 Use this when invoked from CF request
 Works with cfc’s absolute path as well as cfc’s fully qualified name.
 Create using TemplateProxyFactory
 TemplateProxy proxy = TemplateProxyFactory.resolveFile(pageContext, file)
 TemplateProxy proxy = TemplateProxyFactory.resolveName(cfcName,
pageContext)
 Invoke
 invoke(String method, Object[] args, PageContext ctx)
18
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Dynamic Proxy
 Part of JavaLoader 1.0
 Makes CFCs behave like Java classes or impl for Java interfaces
 Allows java objects to call cfc methods seamlessly
 Java Frameworks relying on certain contract can leverage CFC
 DynamicProxy = javaloader.create(
"com.compoundtheory.coldfusion.cfc.CFCDynamicProxy");
 DynamicProxy.createInstance(cfc, interfaces)
 DynamicProxy.createInstance(pathToCFC, interfaces)
19
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
CFC methods over HTTP
 A remote method can be invoked directly using http
Component
{
remote String function greet(arg)
{
return "Hello " & arg;
}
}
 Invoke using url
http://localhost:8500/cfunited/hello.cfc?method=greet&a
rg=cfunited
20
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
WebService
 CFC methods exposed as webservice
Component style="document" {
remote String function greet(arg){
return "Hello " & arg;
}
}
 Generate the Java proxies from wsdl
 Axis – Use WSDL2Java
 java org.apache.axis.wsdl.WSDL2Java –p cfunited.hello http://localhost:8500/Hello.cfc?wsdl
HelloServiceLocator locator = new HelloServiceLocator();
cfunited.axis.hello.Hello helloCfc = locator.getHelloCfc();
String msg = helloCfc.greet("CFUnited 2010");
 Java SE6 now natively supports webservices
 Wsimport
 wsimport http://localhost:8500/cfunited/hello.cfc?wsdl -d c:workcfunitedemoclasses -s
c:Workcfunitedemosrc -p cfunited.hello
HelloService helloService = new HelloService();
Hello helloCfc = helloService.getHelloCfc();
String msg = helloCfc.greet("CFUnited 2010");
21
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
ColdFusion as a Service
 CFChart
 CFDocument
 CFImage
 CFMail
 CFPop
 CFPdf
22
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Setup for CFaaS
 Enable services in the admin
 Define IPs for access
 Admin>>security >> Allowed IP Address
 Define users who have permission
 Admin>> security >> User Manager >> add User >> Exposed Services
23
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 24
CFImage
• negative()
• rotate()
• blur()
• grayScale()
• scaletoFit()
• resize()
• overlay()
• flip()
• sharpen()
• shear()
• crop()
• addBorder()
• batchOperation()
 getEXIFTAG()
 getHeight()
 getWidth()
 info()
 getIPTCTag()
 getIPTCMetadata()
 getEXIFMetaData()
http://localhost:8500/CFIDE/services/image.cfc?wsdl
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 25
CFPDF
 protect()
 thumbnail()
 processDDX()
 extractText()
 extractImage()
 setinfo()
 mergeFiles()
 addwatermark()
 extractPages()
 getinfo()
 mergespecificpages()
 deletepages()
 removewatermark()
http://localhost:8500/CFIDE/services/pdf.cfc?wsdl
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Other Services
 CFChart
 http://localhost:8500/cfide/services/cfchart.cfc?wsdl
 generate()
 CFDocument
 http://localhost:8500/cfide/services/document.cfc?wsdl
 Generate()
 CFMail
 http://localhost:8500/cfide/services/mail.cfc?wsdl
 Send()
 CFPOP
 http://localhost:8500/cfide/services/pop.cfc?wsdl
 delete()
 getAll()
 getHeaderOnly()
26
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Summary
27
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Q & A
Q & A
rukumar@adobe.com
http://www.rupeshk.org
rukumar
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

More Related Content

What's hot

Java Play Restful JPA
Java Play Restful JPAJava Play Restful JPA
Java Play Restful JPAFaren faren
 
Java Play RESTful ebean
Java Play RESTful ebeanJava Play RESTful ebean
Java Play RESTful ebeanFaren faren
 
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache CordovaHazem Saleh
 
JWT - Sécurisez vos APIs
JWT - Sécurisez vos APIsJWT - Sécurisez vos APIs
JWT - Sécurisez vos APIsAndré Tapia
 
TorqueBox for Rubyists
TorqueBox for RubyistsTorqueBox for Rubyists
TorqueBox for Rubyistsbobmcwhirter
 
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache CordovaHazem Saleh
 
EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)Montreal JUG
 
Web API Test Automation using Frisby & Node.js
Web API Test Automation using Frisby  & Node.jsWeb API Test Automation using Frisby  & Node.js
Web API Test Automation using Frisby & Node.jsChi Lang Le Vu Tran
 
Design Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John HardyDesign Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John HardyManageIQ
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...bobmcwhirter
 
[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In Action[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In ActionHazem Saleh
 
Introduction to nu soap
Introduction to nu soapIntroduction to nu soap
Introduction to nu soapvikash_pri14
 
Information security programming in ruby
Information security programming in rubyInformation security programming in ruby
Information security programming in rubyHiroshi Nakamura
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot WorldSchalk Cronjé
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf Conference
 

What's hot (20)

Java Play Restful JPA
Java Play Restful JPAJava Play Restful JPA
Java Play Restful JPA
 
Raj apache
Raj apacheRaj apache
Raj apache
 
Java Play RESTful ebean
Java Play RESTful ebeanJava Play RESTful ebean
Java Play RESTful ebean
 
Sql killedserver
Sql killedserverSql killedserver
Sql killedserver
 
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova
 
JWT - Sécurisez vos APIs
JWT - Sécurisez vos APIsJWT - Sécurisez vos APIs
JWT - Sécurisez vos APIs
 
TorqueBox for Rubyists
TorqueBox for RubyistsTorqueBox for Rubyists
TorqueBox for Rubyists
 
Hidden Gems in ColdFusion 2016
Hidden Gems in ColdFusion 2016Hidden Gems in ColdFusion 2016
Hidden Gems in ColdFusion 2016
 
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova
 
EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)
 
Web API Test Automation using Frisby & Node.js
Web API Test Automation using Frisby  & Node.jsWeb API Test Automation using Frisby  & Node.js
Web API Test Automation using Frisby & Node.js
 
Design Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John HardyDesign Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John Hardy
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
 
Devignition 2011
Devignition 2011Devignition 2011
Devignition 2011
 
[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In Action[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In Action
 
Apache Presentation
Apache PresentationApache Presentation
Apache Presentation
 
Introduction to nu soap
Introduction to nu soapIntroduction to nu soap
Introduction to nu soap
 
Information security programming in ruby
Information security programming in rubyInformation security programming in ruby
Information security programming in ruby
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot World
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
 

Similar to Extending Java From ColdFusion - CFUnited 2010

Leveraging BlazeDS, Java, and Flex: Dynamic Data Transfer
Leveraging BlazeDS, Java, and Flex: Dynamic Data TransferLeveraging BlazeDS, Java, and Flex: Dynamic Data Transfer
Leveraging BlazeDS, Java, and Flex: Dynamic Data TransferJoseph Labrecque
 
ColdFusion .NET integration - Adobe Max 2006
ColdFusion .NET integration - Adobe Max 2006ColdFusion .NET integration - Adobe Max 2006
ColdFusion .NET integration - Adobe Max 2006Rupesh Kumar
 
Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11ColdFusionConference
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
FATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex appsFATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex appsMichael Chaize
 
Apache Cordova In Action
Apache Cordova In ActionApache Cordova In Action
Apache Cordova In ActionHazem Saleh
 
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014Hazem Saleh
 
Oop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXFOop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXFAdrian Trenaman
 
Scala, Apache Spark, The PlayFramework and Docker in IBM Platform As A Service
Scala, Apache Spark, The PlayFramework and Docker in IBM Platform As A ServiceScala, Apache Spark, The PlayFramework and Docker in IBM Platform As A Service
Scala, Apache Spark, The PlayFramework and Docker in IBM Platform As A ServiceRomeo Kienzler
 
All about CFThread - CFUnited 2008
All about CFThread - CFUnited 2008All about CFThread - CFUnited 2008
All about CFThread - CFUnited 2008Rupesh Kumar
 
RESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 versionRESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 versionBertrand Delacretaz
 
Accelerate your ColdFusion Applications using Caching
Accelerate your ColdFusion Applications using CachingAccelerate your ColdFusion Applications using Caching
Accelerate your ColdFusion Applications using CachingColdFusionConference
 

Similar to Extending Java From ColdFusion - CFUnited 2010 (20)

ColdFusion Internals
ColdFusion InternalsColdFusion Internals
ColdFusion Internals
 
ColdFusion 10
ColdFusion 10ColdFusion 10
ColdFusion 10
 
Leveraging BlazeDS, Java, and Flex: Dynamic Data Transfer
Leveraging BlazeDS, Java, and Flex: Dynamic Data TransferLeveraging BlazeDS, Java, and Flex: Dynamic Data Transfer
Leveraging BlazeDS, Java, and Flex: Dynamic Data Transfer
 
ColdFusion .NET integration - Adobe Max 2006
ColdFusion .NET integration - Adobe Max 2006ColdFusion .NET integration - Adobe Max 2006
ColdFusion .NET integration - Adobe Max 2006
 
Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
How we rest
How we restHow we rest
How we rest
 
FATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex appsFATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex apps
 
This is how we REST
This is how we RESTThis is how we REST
This is how we REST
 
How we REST
How we RESTHow we REST
How we REST
 
Apache Felix Web Console
Apache Felix Web ConsoleApache Felix Web Console
Apache Felix Web Console
 
Selenium
SeleniumSelenium
Selenium
 
Apache Cordova In Action
Apache Cordova In ActionApache Cordova In Action
Apache Cordova In Action
 
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014
 
Java Cloud and Container Ready
Java Cloud and Container ReadyJava Cloud and Container Ready
Java Cloud and Container Ready
 
Oop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXFOop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXF
 
Scala, Apache Spark, The PlayFramework and Docker in IBM Platform As A Service
Scala, Apache Spark, The PlayFramework and Docker in IBM Platform As A ServiceScala, Apache Spark, The PlayFramework and Docker in IBM Platform As A Service
Scala, Apache Spark, The PlayFramework and Docker in IBM Platform As A Service
 
All about CFThread - CFUnited 2008
All about CFThread - CFUnited 2008All about CFThread - CFUnited 2008
All about CFThread - CFUnited 2008
 
RESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 versionRESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 version
 
Accelerate your ColdFusion Applications using Caching
Accelerate your ColdFusion Applications using CachingAccelerate your ColdFusion Applications using Caching
Accelerate your ColdFusion Applications using Caching
 

More from Rupesh Kumar

Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Rupesh Kumar
 
ColdFusion 11 Overview - CFSummit 2013
ColdFusion 11 Overview - CFSummit 2013ColdFusion 11 Overview - CFSummit 2013
ColdFusion 11 Overview - CFSummit 2013Rupesh Kumar
 
Keeping Current with ColdFusion - Adobe Max 2011
Keeping Current with ColdFusion - Adobe Max 2011Keeping Current with ColdFusion - Adobe Max 2011
Keeping Current with ColdFusion - Adobe Max 2011Rupesh Kumar
 
ColdFusion ORM - Advanced : Adobe Max 2009
ColdFusion ORM - Advanced : Adobe Max 2009ColdFusion ORM - Advanced : Adobe Max 2009
ColdFusion ORM - Advanced : Adobe Max 2009Rupesh Kumar
 
ColdFusion ORM - Part II
ColdFusion ORM - Part II  ColdFusion ORM - Part II
ColdFusion ORM - Part II Rupesh Kumar
 

More from Rupesh Kumar (6)

Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8
 
ColdFusion 11 Overview - CFSummit 2013
ColdFusion 11 Overview - CFSummit 2013ColdFusion 11 Overview - CFSummit 2013
ColdFusion 11 Overview - CFSummit 2013
 
Keeping Current with ColdFusion - Adobe Max 2011
Keeping Current with ColdFusion - Adobe Max 2011Keeping Current with ColdFusion - Adobe Max 2011
Keeping Current with ColdFusion - Adobe Max 2011
 
ColdFusion ORM - Advanced : Adobe Max 2009
ColdFusion ORM - Advanced : Adobe Max 2009ColdFusion ORM - Advanced : Adobe Max 2009
ColdFusion ORM - Advanced : Adobe Max 2009
 
ColdFusion ORM - Part II
ColdFusion ORM - Part II  ColdFusion ORM - Part II
ColdFusion ORM - Part II
 
ColdFusion 9 ORM
ColdFusion 9 ORMColdFusion 9 ORM
ColdFusion 9 ORM
 

Recently uploaded

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 

Recently uploaded (20)

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 

Extending Java From ColdFusion - CFUnited 2010

  • 1. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Rupesh Kumar July 25th 2010 http://www.rupeshk.org/ : rukumar Extending Java with ColdFusion
  • 2. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Agenda  Objective  Using Java from CFML  Leveraging ColdFusion Features from Java  Areas to watch out for  ColdFusion as a Service (CFaaS)  Q&A
  • 3. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. ColdFusion is Java 3
  • 4. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. ColdFusion is Java  ColdFusion applications are developed in CFML (and likely take advantage of Java, XML, SOAP, and more).  At runtime ColdFusion applications are pure Java.  A J2EE server (internal or external)  … running a Java application (the ColdFusion engine)  … invoking Java code (CFML code compiled to Java bytecode).  CFML exists only at developer time, runtime is pure Java (and deployed like any other Java application).  CFML source need not be present at runtime.  Applications may be packaged and deployed like any other Java applications. 4
  • 5. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 5 ColdFusion Leverages Underlying Java Connectivity Security Management Transactions Directory JEE Application Server Java App #1 ColdFusion Java App #2
  • 6. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 6 JEE Services Java Runtime Presentation (HTML, Reporting, PDF Generation, AJAX, Flash Forms) Database Connectivity Document Services PDF/Excel/P PT/ Word Network Services (http, ftp, mail – smtp/pop/ima p) Enterprise Services (Exchange, Sharepoint) SOA connectivity (WebServices FDS, Flash Remoting) Event Gateways (IM, JMS SMS) ColdFusion Runtime CFML Compiler
  • 7. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. ColdFusion is Java… ColdFusion Type Java Type String String Number Double Boolean Boolean Array List/Vector Struct Map Date Date Query coldfusion.sql.QueryTable 7
  • 8. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Why CF + Java?  ColdFusion and Java complement each other  ColdFusion  Java  Take advantage of wide set of Java libraries available  Extend ColdFusion features  Functionalities that are not baked in ColdFusion could be available in Java  J2SDK APIs  There are tons of libraries shipped with ColdFusion – Apache POI, EhCache, Hibernate, iText, webchart etc  Other libraries -  Java  ColdFusion  Productivity  Easy to learn.  Rapid development.  Huge number of Services available readymade.  Leverages standards and existing IT and training investments. 8
  • 9. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 9 ColdFusion Integrated Services  Database connectivity  Full text searching (Verity and Solr)  Printing (PDF)  Document Services (PDF, Excel, Word, PPT)  Reporting (PDF, FlashPaper, RTF, Excel, HTML, XML)  Graphing and Charting  E-Mail (POP, IMAP and SMTP)  Exchange  XML manipulation  Including XSL and XPath  Imaging  Sharepoint  Flash Remoting  Server-side HTTP and FTP  LDAP client  Windows NT/AD authentication  Gateways  Socket  JMS  Instant messaging (including XMPP)  SMS  Asynchronous processing  S3 Storage Service  RSS Feed  Java, COM, .NET, CORBA client  … and more
  • 10. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. ColdFusion  Java  Java CFX Tags  JSP and Servlets  JSP Tag Libraries  Direct Invocation 10
  • 11. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Direct Invocation  Object Creation createObject(“java”, className) <CFOBJECT type=“Java” class=“className” name=“variable”>  Method invocation  obj.foo(arg1, arg2,..)  Constructors – use init <cfobject type=”java” class=”java.lang.StringBuffer” name=”buff”> <cfset buff.init(“CFUnited”)>  Calling methods <cfset buff.append(“2010”)>  Static method  no need to init() to call static method integer = createObject(“Java”, “java.lang.Integer”); intval = integer.parseInt(“10”); 11
  • 12. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Java Invocation – class loading ColdFusionJava  ColdFusion’s java invocation needs class to be loaded by ColdFusion classloader  Classes need to be placed in a pre-defined directory  CF Classloader will pick up from <cf_root>/lib folder  Parent i.e web application classloader will pick up from <cf_root>/WEB-INF/lib  One might not have permission to do this  Classes cannot be changed at runtime.  Server must be restarted to pick up the change  They cannot be application specific  You cannot have multiple versions of the same library in the server 12
  • 13. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. JavaLoader ColdFusionJava  Project by Mark Mandel :  http://www.compoundtheory.com/?action=javaloader.index  Dynamically loads java libraries using its own classloader  Create JavaLoader object  createObject("component","javaloader.JavaLoader"). init(loadPaths [,loadColdFusionClassPath] [,parentClassLoader]);  Loadpaths : Array of jars or class directories  loadColdFusionClasspath : true|false whether ColdFusion classloader will be the parent classloader  parentClassLoader : the parent classloader object  Create object  javaloader.create(className).init(arg1, arg2...); 13
  • 14. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Java Invocation.. ColdFusionJava  Watch out for  Overloaded constructors and methods  Resolve ambiguity using javacast – javacast(“datatype”, data)  Java is case sensitive. Classname must be in the correct case  For method invocation, it is better to use the correct case. 14
  • 15. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Demo 15
  • 16. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Java  ColdFusion  CFCProxy  TemplateProxy  Dynamic Proxy  WebServices (SOAP and REST)  CFC methods over HTTP  ColdFusion as a Service (CFaaS)  Event Gateway 16
  • 17. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. CFC Proxy  Allows Java to directly invoke CFC methods  CFCProxy  new CFCProxy(“path to cfc");  invoke(String method, Object[] args)  Example CFCProxy myCFC = new CFCProxy("C:test.cfc"); Object[] args = {"CFUnited"}; Object greeting = myCFC.invoke("greet", args);  ColdFusion classloader should be the context classloader  Works with cfc’s absolute path 17
  • 18. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. TemplatePoxy  Use this when invoked from CF request  Works with cfc’s absolute path as well as cfc’s fully qualified name.  Create using TemplateProxyFactory  TemplateProxy proxy = TemplateProxyFactory.resolveFile(pageContext, file)  TemplateProxy proxy = TemplateProxyFactory.resolveName(cfcName, pageContext)  Invoke  invoke(String method, Object[] args, PageContext ctx) 18
  • 19. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Dynamic Proxy  Part of JavaLoader 1.0  Makes CFCs behave like Java classes or impl for Java interfaces  Allows java objects to call cfc methods seamlessly  Java Frameworks relying on certain contract can leverage CFC  DynamicProxy = javaloader.create( "com.compoundtheory.coldfusion.cfc.CFCDynamicProxy");  DynamicProxy.createInstance(cfc, interfaces)  DynamicProxy.createInstance(pathToCFC, interfaces) 19
  • 20. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. CFC methods over HTTP  A remote method can be invoked directly using http Component { remote String function greet(arg) { return "Hello " & arg; } }  Invoke using url http://localhost:8500/cfunited/hello.cfc?method=greet&a rg=cfunited 20
  • 21. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. WebService  CFC methods exposed as webservice Component style="document" { remote String function greet(arg){ return "Hello " & arg; } }  Generate the Java proxies from wsdl  Axis – Use WSDL2Java  java org.apache.axis.wsdl.WSDL2Java –p cfunited.hello http://localhost:8500/Hello.cfc?wsdl HelloServiceLocator locator = new HelloServiceLocator(); cfunited.axis.hello.Hello helloCfc = locator.getHelloCfc(); String msg = helloCfc.greet("CFUnited 2010");  Java SE6 now natively supports webservices  Wsimport  wsimport http://localhost:8500/cfunited/hello.cfc?wsdl -d c:workcfunitedemoclasses -s c:Workcfunitedemosrc -p cfunited.hello HelloService helloService = new HelloService(); Hello helloCfc = helloService.getHelloCfc(); String msg = helloCfc.greet("CFUnited 2010"); 21
  • 22. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. ColdFusion as a Service  CFChart  CFDocument  CFImage  CFMail  CFPop  CFPdf 22
  • 23. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Setup for CFaaS  Enable services in the admin  Define IPs for access  Admin>>security >> Allowed IP Address  Define users who have permission  Admin>> security >> User Manager >> add User >> Exposed Services 23
  • 24. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 24 CFImage • negative() • rotate() • blur() • grayScale() • scaletoFit() • resize() • overlay() • flip() • sharpen() • shear() • crop() • addBorder() • batchOperation()  getEXIFTAG()  getHeight()  getWidth()  info()  getIPTCTag()  getIPTCMetadata()  getEXIFMetaData() http://localhost:8500/CFIDE/services/image.cfc?wsdl
  • 25. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 25 CFPDF  protect()  thumbnail()  processDDX()  extractText()  extractImage()  setinfo()  mergeFiles()  addwatermark()  extractPages()  getinfo()  mergespecificpages()  deletepages()  removewatermark() http://localhost:8500/CFIDE/services/pdf.cfc?wsdl
  • 26. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Other Services  CFChart  http://localhost:8500/cfide/services/cfchart.cfc?wsdl  generate()  CFDocument  http://localhost:8500/cfide/services/document.cfc?wsdl  Generate()  CFMail  http://localhost:8500/cfide/services/mail.cfc?wsdl  Send()  CFPOP  http://localhost:8500/cfide/services/pop.cfc?wsdl  delete()  getAll()  getHeaderOnly() 26
  • 27. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Summary 27
  • 28. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Q & A Q & A rukumar@adobe.com http://www.rupeshk.org rukumar
  • 29. © 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.