SlideShare a Scribd company logo
Gold Nuggets in Oracle ADF (Faces)Lucas Jellema – AMIS (Nieuwegein, The Netherlands)ADF EMG Community Day - Oracle  Open World 2011
ADF Gold Nuggets (Oracle Open World 2011)
OverviewIDE favoritesFool’s GoldUI (tw)HighlightsThe Whole Wide World
What is a gold nugget?Unexpected benefitUnderused, overlooked featureSmall – frequently usefulHuge – unexplored concept or area of infrastructurePotentially useful to large communityNot too much a niche option
Nugget cloudSkin editorVO Updateable LookupELTree SelectHot ReloadChange PersistenceRich TableAuto SuggestCustomizationsetPropertyListenerRefresh after insertPanelCollectionDecoupled Development & ReuseTaskFlow, Region, UIShell, Declarative Components, ADF Library, …Java/JEEBean Data ControlPopupPPRJHeadstartMobileFusion ApplicationsGroovyEMG and wider communityserver event & listenerMulti Browser SupportSeleniumso aDFDVTactive rowkeyProgrammatic VOActive Data Service for PushOraFormsFacesPanelDashboardList validatorprepareSessionADFContextPage TemplateWebLogic ServerSave PointsFormatStringOPSS/ADF Security
ADF in Larry’s Keynote on Oracle Open World 2009 and 2010
Fusion Applications – biggest proof point in the world
ADF powers the user interface of almost any Oracle product
ADF powers the user interface of almost any Oracle product (2)
the tableADF Faces Rich Table (& Panel Collection)Displays ADF Model data bound collection, bean array, List, ResultSet, RowSet and more Dynamic Table Configuration & Change PersistenceRearrange, resize, hide/show columns, freeze columnsPost-load or Lazy Data FetchFetch data rows upon scrollFilter & SortRead-Only and Click-to-edit[single or multiple] Row and Column SelectionHeader, Footer, Column Grouping, DetailStampMany, many predefined facetsExport data set, Email & Print mode
Active row keyProperty on table that is ‘click to edit’EL expression that resolves to the primary key of the row that should be displayed as editableTable will scroll that row into view
"Smart" Completion InsightCtrl-Space (x 2)
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }}
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {  }}
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {this.  }}Ctrl Space
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {this.  }}
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {this.getB  }}
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {this.getBookingView1Impl()  }}
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {    ? = this.getBookingView1Impl()  }}Ctrl Space x 1
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {this.getB  }}Ctrl Space x 1Ctrl Space x 2
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {this.getB  }}
publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1");  }publicvoiddoSomething() {BookingsViewImplbookingsView = this.getBookingsView1();  }}
Jdeveloper Go to ShortcutsGo to Class: CTRL  -Go to File: CTRL ALT -Find usages: CTRL ALT u For class, method, EO and VO Attribute, …
More best short cuts…CTRL Shift Space: parameter insightCTRL = : list of recently opened filesCTRL Space: completion insightCTRL Space (2x): declaration insertCTRL /: selection commentedCTRL Shift C:copy file path toClipboardAlt Home : selectfile in ‘tree’
Data Visualization
The Right Mouse ClickContextMenu client listener and Popup (menu and window)
Popup magic
Example: Adding fancy balloon helpCreate a popup with a noteWindow child to contain the fancy help contentAdd a showPopupBehavior tag to the inputTextthat we want to add the help to
Fusion Apps – ‘UI design pattern’
Expression LanguageIoC: Injection of Value and Listener into pageDynamic, context sensitive behaviorExtension pointsCustom Functions invoked from ELIntegration of Spring BeansCustom EL ResolverTo resolve values from property files, ….#{user.settings['NAME']}
Extend EL to support custom functions with multiple parametersCreate the static methods that implement the custom EL functionsConfigure <function> elements in a custom tag library descriptorAssociate the tag library to the JSF pageUse the function in expressions such as:
Create the static methods
Configure the function elements in a Tag Library Descriptor file
Associate tag library with page and use tag library’s functions
No coding quick start adf - leveraging best practices & uniform UI patterns
Even more Declarative ADF development – with JHeadstart
Programmatic cross tier interaction Web BrowserJEE Application Server
ClientJavaScriptComponentsmanipulatecomponentuser actionJavaScript FunctioncomponentclientListenercomponentuserorprogrammaticactionpartialSubmitautoSubmitLoad JSON, CSS, Image, XML, JSproperty changeRequestdata orPush messagepollsetPropertyListenerpartial triggers, added targetsQueue Custom EventserverListeneractiveOutputTextERKS ‘ppr script’partial page refreshFull pagereloadpushadd JS toexecute (ERKS)Server (middle tier)componentactiveOutputTextcomponentadd componentsas partial targetactionListener, valueChangeListener, …ListenerBeanserverListenerActive DataModelObjectComponentsBeans & Objectspush (DB QRCN)DatabaseClient Server interactions vv.
Use setPropertyListenerto push data to the serverThe setPropertyListener will pass from value to the to target when type event occurs on parentA very simple way to inform the server about an event and the data associated with the eventSupported types: action, focus, poll, query, rangeChange, selection, sort, rowDisclosure, valueChange and many more<af:image id="removeFromSetImage“          source="/images/removeFromSet.png“shortDesc="Remove from Shopping Basket"/><af:setPropertyListener from="#{item}“                       to="#{shoppingBasket.itemToRemove}"                       type="action"/></af:commandLink>
ServerListener for custom AJAX (background client to server push)A serverListener associates a server side method with a client side custom eventThis allows JavaScript functionsto call a server side method by queuing an eventA custom event carries a payload
ADF Active data service – server push to clientPush: server sends messages to clientADF Active Data Service enables UI components to be ‘automaticallyrefreshed’ when server sideeventsoccurActive UI ComponentsincludeTable, Image, OutputText, DVT ComponentsBasedon BAM Data ControlBasedonCustomBeansthatextendActiveAdapterNudge: push-to-refreshNote: client-2-client pushcaneasilybeimplementedas client-to-server-followed-by-server-to-client pushWeb BrowserJEE Application Server
Auto-PPR for immediate refresh of Data Bound componentsTo have ADF automatically refresh data bound components when underlying value binding has changed its valueSet changeEventPolicy=ppr on iteratorRefresh as piggy back on any request cycleNo partialTriggers attribute required!
Cross Tier PushWeb BrowsertableactiveOTCache refresherJEE Application ServerevtlsnrservletRDBMSjobtrg
Push to the limit – rich and pro-active user interfaces with ADFSession Plug – Session Plug – Session Plug – Session PlWednesday, 5-6 PM, Mariott Marquis, Golden Gate A Oracle Open World 2011
The “History” feature in JDeveloperQuick comparison of file with previous statesCan leverage Source Code Control system (Subversion, CVS) but also maintains local file historyThe compare feature is ‘XML aware’Revert to a previous state of a file
Marrying forms and ADF together – migrate with (i/o from) forms to adfOraFormsFaces leveraging the JavaScript-Applet bridge for two-way event exchange
ADF BC PropertiesProperty Inspector
Library Private
The World wide Advanced Developers Family
The World wide Advanced Developers FamilyADF Enterprise Methodology GroupOTN Discussion ForumOTN and ADF ResourcesDocumentation, samples, tutorials, testimonials, virtual developer days, rea.oracle.comBlog-o-sphereConferences around the globeOOW, ODTUG Kaleidoscope, UKOUG, OBUG, AUSOUG/OAUG/ODTUG 20:20, DOAG, …Books and articlesOracle Press, Packt Publishing, … Oracle Magazine, ODTUG Technical Journal, …Also: Leverage Java/JEE community and resources
Java and JEE ADF is a framework on top of Java, JEE and JVMAnything that is/extends/runs on one of these is potentially usable with and relevant for ADFZillion frameworks and librariesiText (PDF), Apache POI (Excel), Jasper Reports, BIRTSpring (IoC, AOP, Acegi/Security, Social, ..)Apache Commons, Google Collections, Joda TimeSoftware EngineeringTest (Junit, EasyMock), build (Ant, Maven), check/QA (FindBugs, CheckStyle, Sonar),  JEE facilities in WLS including JMS, WS* & RS, JMX… Dynamic JVM languages: Groovy, Scala, JRuby, …Java 7 SE and beyondJava FX?
Prepare sessionBefore any other database communication is performed during the processing of a request …ADF BC will execute the prepareSession() method that you can override in ApplicationModuleImplThis is the perfect place toReset package stateSet application and client infoSet application contextUser details, current session context, view filter conditions(real or poor man VPD)Fetch any events published inside the databaseADF BCAppModDatabase
ChallengeCreate a Sliding Tile puzzle that tiles up an image in a configurable number of tilesUsing drag and drop, the user can reassemble the image
The PanelDashboard componentRenders a ‘portal-like’ dashboard – as a grid of PanelBox-componentsConfigurable number of columnsrow heightCollapsible (boxes)Supports drag & drop for reorganizationAnd change persistence to remember (per user)Very easy to use
StepsCreate Servlet that produces tiles from a JPEG imageParameters: image name, tile factor, x and yCreate PanelDashboard with panelBoxes with richImage componentsThat request their source from the servlet corresponding to their position in the gridBind the PanelDashboard and dynamically create the panelBox componentsAllow user to set the tile factor and choose the imageUse a Carousel for image selection
demo
EDNSDO EntityTask UIEDN EventsSO ADFEDN Events from ADF BC
BAM Data Control
Human Task UI
ADF BC SDO Service
WebService Proxy and Data ControlADF to SOA Interactions in FAPPSOrchestrationHuman interactionPolicy evaluationMonitoringBusiness LogicViewDataUser InterfaceADF Faces componentsBusiness ServicesADF Business ComponentsDatabaseSchemaDataBindingWebCenterSDO ServicesEventsMediator /BPEL ProcessHuman WorkflowServiceRulesEngineBusinessActivityMonitoringfactsAssign TaskresultsTaskComplete
Programmatic View ObjectIt walks, talks and looks like a ‘regular’ View Object(regular being based on Entity Objects or SQL Query)But it is entirely fueled by custom written overridden Java methods – possibly without database connectionA bit like a View with Instead Of trigger – against a Collection based Table Function and PL/SQL APIProgrammatic View Objects can be used as normal in a Data Control for binding ADF Faces componentsNormal rich declarative ADF BC data binding can be provided to UI developers for data sources such asWebService, JMS Queue, Memory Grid, Document Management System, Email, cross session data, …Note: with the evolution of the Bean Data Control, some of the use cases will fade away
the root of AjaxSuggestions
Auto SuggestionsUser is entering a fieldAs she types characters, suggestions can be presented for what the full entry should readBased on a list of allowable values, based on previous (popular) entries or anything reallyUser can pick a suggestion for ‘short-cut typing’Auto suggestions can be model-driven (declarative) or customAnd can do things beyond plain list based suggestions
IntroGoogle Suggest set off the AJAX hype in angerMany implementations for a ‘suggestions’ feature in ADF 10g and 11g have been createdUsing custom JavaScript or libraries like JqueryWith PS1, ADF 11g introduced a native component for ‘auto suggestions’The <af:autoSuggestBehavior> component, to be included in inputText or inputListOfValues orinputComboboxListOfValues
Model Driven SuggestionsThe suggestions can be derived declaratively from List of Values reference on a VO AttributeSteps:On ViewObjectCreate ViewAccessor (for list values)Create List of Values for AttributeLink LoV to ViewAccessorIn PageAdd InputListOfValues component based on attributeAdd af:autoSuggestBehavior with suggestions based on List of Values Binding’s suggestedItems
ADF Gold Nuggets (Oracle Open World 2011)
ADF Gold Nuggets (Oracle Open World 2011)
In Page:
Custom SuggestionsAuto Suggestions can be provided by managed bean that implements signature: List getSuggestions( String currentValue)And the List returned is really List<SelectItem>Potential use casesBased on some (application wide) cached collection (of previously entered ?) valuesRetrieve values from WebService, file, …Use common abbreviations, codesCountry code, airportShow translations in other languages
Static List of CountriesSuggestions

More Related Content

PPTX
Rest with Java EE 6 , Security , Backbone.js
PDF
Automated Testing ADF with Selenium
PPTX
Integration of Backbone.js with Spring 3.1
PDF
Spring mvc
ODP
springmvc-150923124312-lva1-app6892
PDF
L12: REST Service
PPTX
Spring 3.x - Spring MVC - Advanced topics
PPTX
Spring MVC
Rest with Java EE 6 , Security , Backbone.js
Automated Testing ADF with Selenium
Integration of Backbone.js with Spring 3.1
Spring mvc
springmvc-150923124312-lva1-app6892
L12: REST Service
Spring 3.x - Spring MVC - Advanced topics
Spring MVC

What's hot (20)

PPT
Going Offline with Gears And GWT
ODP
Java Spring MVC Framework with AngularJS by Google and HTML5
PDF
HTML5 New and Improved
PPTX
Data Access Options in SharePoint 2010
PDF
Azure Durable Functions (2019-03-30)
PDF
Easing offline web application development with GWT
PDF
Parse: A Mobile Backend as a Service (MBaaS)
KEY
MVC on the server and on the client
PDF
Hopsworks MLOps World talk june 21
PDF
Serverless APIs, the Good, the Bad and the Ugly (2019-09-19)
PPT
Backbone js
ODP
Spray - Build RESTfull services in scala
PDF
Lecture 3: Servlets - Session Management
PDF
How to disassemble one monster app into an ecosystem of 30
PDF
Durable functions 2.0 (2019-10-10)
PPTX
APIs, APIs Everywhere!
PDF
Java Web Programming [3/9] : Servlet Advanced
PPTX
Kubernetes Operators With Scala
PDF
Suportando Aplicações Multi-tenancy com Java EE
PDF
Building Android apps with Parse
Going Offline with Gears And GWT
Java Spring MVC Framework with AngularJS by Google and HTML5
HTML5 New and Improved
Data Access Options in SharePoint 2010
Azure Durable Functions (2019-03-30)
Easing offline web application development with GWT
Parse: A Mobile Backend as a Service (MBaaS)
MVC on the server and on the client
Hopsworks MLOps World talk june 21
Serverless APIs, the Good, the Bad and the Ugly (2019-09-19)
Backbone js
Spray - Build RESTfull services in scala
Lecture 3: Servlets - Session Management
How to disassemble one monster app into an ecosystem of 30
Durable functions 2.0 (2019-10-10)
APIs, APIs Everywhere!
Java Web Programming [3/9] : Servlet Advanced
Kubernetes Operators With Scala
Suportando Aplicações Multi-tenancy com Java EE
Building Android apps with Parse
Ad

Viewers also liked (9)

PPTX
DOAG 2011 - Upgrade Guide for Oracle ADF on WebLogic Server
PPTX
The Five Ways of Building Oracle Applications
PPSX
Oracle ADF Overview for Beginners
PDF
Building a custom Oracle ADF Component
PDF
Oracle ADF Architecture TV - Development - Error Handling
PDF
Guidelines for moving from Oracle Forms to Oracle ADF and SOA
PPT
Talking Services with Oracle ADF and Oracle SOA Suite
PDF
Oracle ADF Task Flows for Beginners
PPTX
Oracle APEX or ADF? From Requirements to Tool Choice
DOAG 2011 - Upgrade Guide for Oracle ADF on WebLogic Server
The Five Ways of Building Oracle Applications
Oracle ADF Overview for Beginners
Building a custom Oracle ADF Component
Oracle ADF Architecture TV - Development - Error Handling
Guidelines for moving from Oracle Forms to Oracle ADF and SOA
Talking Services with Oracle ADF and Oracle SOA Suite
Oracle ADF Task Flows for Beginners
Oracle APEX or ADF? From Requirements to Tool Choice
Ad

Similar to ADF Gold Nuggets (Oracle Open World 2011) (20)

PPTX
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
PPTX
Oracle ADF Training| Oracle ADF Developer Training
DOCX
Best Weblogic Server Online Training
PPTX
Push to the limit - rich and pro-active user interfaces with ADF (Oracle Ope...
PDF
ADF Introduction By Sandeep Sharda
PDF
Oracle fusion adf_online_training_in_africa
DOC
Best Oracle adf online training
PDF
Oracle ADF Quick Handy Reference
PPTX
An Oracle ADF Introduction
PPT
oracle adf training | oracle adf course | oracle adf certification training
PPT
Greate Introduction to Oracle Fusion Middleware and ADF
PDF
Oracle ADF Tutorial
PDF
A guide to ADF fusion development
PPTX
Oracel ADF Introduction
PDF
Oracle ADF Tutorial/Training Study Guide
PPTX
ADF Mobile - an intro for Developers
PDF
Oracle® Fusion Middleware
PDF
Oracle ADF Architecture TV - Development - Programming Best Practices
PPT
Oracle ADF Overview
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
Oracle ADF Training| Oracle ADF Developer Training
Best Weblogic Server Online Training
Push to the limit - rich and pro-active user interfaces with ADF (Oracle Ope...
ADF Introduction By Sandeep Sharda
Oracle fusion adf_online_training_in_africa
Best Oracle adf online training
Oracle ADF Quick Handy Reference
An Oracle ADF Introduction
oracle adf training | oracle adf course | oracle adf certification training
Greate Introduction to Oracle Fusion Middleware and ADF
Oracle ADF Tutorial
A guide to ADF fusion development
Oracel ADF Introduction
Oracle ADF Tutorial/Training Study Guide
ADF Mobile - an intro for Developers
Oracle® Fusion Middleware
Oracle ADF Architecture TV - Development - Programming Best Practices
Oracle ADF Overview

More from Lucas Jellema (20)

PPTX
Introduction to web application development with Vue (for absolute beginners)...
PPTX
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
PPTX
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
PPTX
Apache Superset - open source data exploration and visualization (Conclusion ...
PPTX
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
PPTX
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
PPTX
Op je vingers tellen... tot 1000!
PPTX
IoT - from prototype to enterprise platform (DigitalXchange 2022)
PPTX
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
PPTX
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
PPTX
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
PPTX
Introducing Dapr.io - the open source personal assistant to microservices and...
PPTX
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
PPTX
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
PPTX
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
PPTX
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
PPTX
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
PPTX
Tech Talks 101 - DevOps (jan 2022)
PPTX
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
PPTX
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Introduction to web application development with Vue (for absolute beginners)...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Apache Superset - open source data exploration and visualization (Conclusion ...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Op je vingers tellen... tot 1000!
IoT - from prototype to enterprise platform (DigitalXchange 2022)
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Introducing Dapr.io - the open source personal assistant to microservices and...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Tech Talks 101 - DevOps (jan 2022)
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...

Recently uploaded (20)

PDF
Machine learning based COVID-19 study performance prediction
PDF
Advanced IT Governance
PDF
KodekX | Application Modernization Development
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPT
Teaching material agriculture food technology
PDF
Modernizing your data center with Dell and AMD
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Big Data Technologies - Introduction.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
cuic standard and advanced reporting.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Machine learning based COVID-19 study performance prediction
Advanced IT Governance
KodekX | Application Modernization Development
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
“AI and Expert System Decision Support & Business Intelligence Systems”
Teaching material agriculture food technology
Modernizing your data center with Dell and AMD
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Unlocking AI with Model Context Protocol (MCP)
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
NewMind AI Monthly Chronicles - July 2025
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Big Data Technologies - Introduction.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
cuic standard and advanced reporting.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf

ADF Gold Nuggets (Oracle Open World 2011)

  • 1. Gold Nuggets in Oracle ADF (Faces)Lucas Jellema – AMIS (Nieuwegein, The Netherlands)ADF EMG Community Day - Oracle Open World 2011
  • 3. OverviewIDE favoritesFool’s GoldUI (tw)HighlightsThe Whole Wide World
  • 4. What is a gold nugget?Unexpected benefitUnderused, overlooked featureSmall – frequently usefulHuge – unexplored concept or area of infrastructurePotentially useful to large communityNot too much a niche option
  • 5. Nugget cloudSkin editorVO Updateable LookupELTree SelectHot ReloadChange PersistenceRich TableAuto SuggestCustomizationsetPropertyListenerRefresh after insertPanelCollectionDecoupled Development & ReuseTaskFlow, Region, UIShell, Declarative Components, ADF Library, …Java/JEEBean Data ControlPopupPPRJHeadstartMobileFusion ApplicationsGroovyEMG and wider communityserver event & listenerMulti Browser SupportSeleniumso aDFDVTactive rowkeyProgrammatic VOActive Data Service for PushOraFormsFacesPanelDashboardList validatorprepareSessionADFContextPage TemplateWebLogic ServerSave PointsFormatStringOPSS/ADF Security
  • 6. ADF in Larry’s Keynote on Oracle Open World 2009 and 2010
  • 7. Fusion Applications – biggest proof point in the world
  • 8. ADF powers the user interface of almost any Oracle product
  • 9. ADF powers the user interface of almost any Oracle product (2)
  • 10. the tableADF Faces Rich Table (& Panel Collection)Displays ADF Model data bound collection, bean array, List, ResultSet, RowSet and more Dynamic Table Configuration & Change PersistenceRearrange, resize, hide/show columns, freeze columnsPost-load or Lazy Data FetchFetch data rows upon scrollFilter & SortRead-Only and Click-to-edit[single or multiple] Row and Column SelectionHeader, Footer, Column Grouping, DetailStampMany, many predefined facetsExport data set, Email & Print mode
  • 11. Active row keyProperty on table that is ‘click to edit’EL expression that resolves to the primary key of the row that should be displayed as editableTable will scroll that row into view
  • 13. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }}
  • 14. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() { }}
  • 15. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() {this. }}Ctrl Space
  • 16. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() {this. }}
  • 17. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() {this.getB }}
  • 18. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() {this.getBookingView1Impl() }}
  • 19. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() { ? = this.getBookingView1Impl() }}Ctrl Space x 1
  • 20. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() {this.getB }}Ctrl Space x 1Ctrl Space x 2
  • 21. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() {this.getB }}
  • 22. publicclassAppModuleImplextendsApplicationModuleImpl {publicBookingsViewImpl getBookingsView1() {return (BookingsViewImpl)findViewObjects("BookingsView1"); }publicvoiddoSomething() {BookingsViewImplbookingsView = this.getBookingsView1(); }}
  • 23. Jdeveloper Go to ShortcutsGo to Class: CTRL -Go to File: CTRL ALT -Find usages: CTRL ALT u For class, method, EO and VO Attribute, …
  • 24. More best short cuts…CTRL Shift Space: parameter insightCTRL = : list of recently opened filesCTRL Space: completion insightCTRL Space (2x): declaration insertCTRL /: selection commentedCTRL Shift C:copy file path toClipboardAlt Home : selectfile in ‘tree’
  • 26. The Right Mouse ClickContextMenu client listener and Popup (menu and window)
  • 28. Example: Adding fancy balloon helpCreate a popup with a noteWindow child to contain the fancy help contentAdd a showPopupBehavior tag to the inputTextthat we want to add the help to
  • 29. Fusion Apps – ‘UI design pattern’
  • 30. Expression LanguageIoC: Injection of Value and Listener into pageDynamic, context sensitive behaviorExtension pointsCustom Functions invoked from ELIntegration of Spring BeansCustom EL ResolverTo resolve values from property files, ….#{user.settings['NAME']}
  • 31. Extend EL to support custom functions with multiple parametersCreate the static methods that implement the custom EL functionsConfigure <function> elements in a custom tag library descriptorAssociate the tag library to the JSF pageUse the function in expressions such as:
  • 33. Configure the function elements in a Tag Library Descriptor file
  • 34. Associate tag library with page and use tag library’s functions
  • 35. No coding quick start adf - leveraging best practices & uniform UI patterns
  • 36. Even more Declarative ADF development – with JHeadstart
  • 37. Programmatic cross tier interaction Web BrowserJEE Application Server
  • 38. ClientJavaScriptComponentsmanipulatecomponentuser actionJavaScript FunctioncomponentclientListenercomponentuserorprogrammaticactionpartialSubmitautoSubmitLoad JSON, CSS, Image, XML, JSproperty changeRequestdata orPush messagepollsetPropertyListenerpartial triggers, added targetsQueue Custom EventserverListeneractiveOutputTextERKS ‘ppr script’partial page refreshFull pagereloadpushadd JS toexecute (ERKS)Server (middle tier)componentactiveOutputTextcomponentadd componentsas partial targetactionListener, valueChangeListener, …ListenerBeanserverListenerActive DataModelObjectComponentsBeans & Objectspush (DB QRCN)DatabaseClient Server interactions vv.
  • 39. Use setPropertyListenerto push data to the serverThe setPropertyListener will pass from value to the to target when type event occurs on parentA very simple way to inform the server about an event and the data associated with the eventSupported types: action, focus, poll, query, rangeChange, selection, sort, rowDisclosure, valueChange and many more<af:image id="removeFromSetImage“ source="/images/removeFromSet.png“shortDesc="Remove from Shopping Basket"/><af:setPropertyListener from="#{item}“ to="#{shoppingBasket.itemToRemove}" type="action"/></af:commandLink>
  • 40. ServerListener for custom AJAX (background client to server push)A serverListener associates a server side method with a client side custom eventThis allows JavaScript functionsto call a server side method by queuing an eventA custom event carries a payload
  • 41. ADF Active data service – server push to clientPush: server sends messages to clientADF Active Data Service enables UI components to be ‘automaticallyrefreshed’ when server sideeventsoccurActive UI ComponentsincludeTable, Image, OutputText, DVT ComponentsBasedon BAM Data ControlBasedonCustomBeansthatextendActiveAdapterNudge: push-to-refreshNote: client-2-client pushcaneasilybeimplementedas client-to-server-followed-by-server-to-client pushWeb BrowserJEE Application Server
  • 42. Auto-PPR for immediate refresh of Data Bound componentsTo have ADF automatically refresh data bound components when underlying value binding has changed its valueSet changeEventPolicy=ppr on iteratorRefresh as piggy back on any request cycleNo partialTriggers attribute required!
  • 43. Cross Tier PushWeb BrowsertableactiveOTCache refresherJEE Application ServerevtlsnrservletRDBMSjobtrg
  • 44. Push to the limit – rich and pro-active user interfaces with ADFSession Plug – Session Plug – Session Plug – Session PlWednesday, 5-6 PM, Mariott Marquis, Golden Gate A Oracle Open World 2011
  • 45. The “History” feature in JDeveloperQuick comparison of file with previous statesCan leverage Source Code Control system (Subversion, CVS) but also maintains local file historyThe compare feature is ‘XML aware’Revert to a previous state of a file
  • 46. Marrying forms and ADF together – migrate with (i/o from) forms to adfOraFormsFaces leveraging the JavaScript-Applet bridge for two-way event exchange
  • 49. The World wide Advanced Developers Family
  • 50. The World wide Advanced Developers FamilyADF Enterprise Methodology GroupOTN Discussion ForumOTN and ADF ResourcesDocumentation, samples, tutorials, testimonials, virtual developer days, rea.oracle.comBlog-o-sphereConferences around the globeOOW, ODTUG Kaleidoscope, UKOUG, OBUG, AUSOUG/OAUG/ODTUG 20:20, DOAG, …Books and articlesOracle Press, Packt Publishing, … Oracle Magazine, ODTUG Technical Journal, …Also: Leverage Java/JEE community and resources
  • 51. Java and JEE ADF is a framework on top of Java, JEE and JVMAnything that is/extends/runs on one of these is potentially usable with and relevant for ADFZillion frameworks and librariesiText (PDF), Apache POI (Excel), Jasper Reports, BIRTSpring (IoC, AOP, Acegi/Security, Social, ..)Apache Commons, Google Collections, Joda TimeSoftware EngineeringTest (Junit, EasyMock), build (Ant, Maven), check/QA (FindBugs, CheckStyle, Sonar), JEE facilities in WLS including JMS, WS* & RS, JMX… Dynamic JVM languages: Groovy, Scala, JRuby, …Java 7 SE and beyondJava FX?
  • 52. Prepare sessionBefore any other database communication is performed during the processing of a request …ADF BC will execute the prepareSession() method that you can override in ApplicationModuleImplThis is the perfect place toReset package stateSet application and client infoSet application contextUser details, current session context, view filter conditions(real or poor man VPD)Fetch any events published inside the databaseADF BCAppModDatabase
  • 53. ChallengeCreate a Sliding Tile puzzle that tiles up an image in a configurable number of tilesUsing drag and drop, the user can reassemble the image
  • 54. The PanelDashboard componentRenders a ‘portal-like’ dashboard – as a grid of PanelBox-componentsConfigurable number of columnsrow heightCollapsible (boxes)Supports drag & drop for reorganizationAnd change persistence to remember (per user)Very easy to use
  • 55. StepsCreate Servlet that produces tiles from a JPEG imageParameters: image name, tile factor, x and yCreate PanelDashboard with panelBoxes with richImage componentsThat request their source from the servlet corresponding to their position in the gridBind the PanelDashboard and dynamically create the panelBox componentsAllow user to set the tile factor and choose the imageUse a Carousel for image selection
  • 56. demo
  • 57. EDNSDO EntityTask UIEDN EventsSO ADFEDN Events from ADF BC
  • 60. ADF BC SDO Service
  • 61. WebService Proxy and Data ControlADF to SOA Interactions in FAPPSOrchestrationHuman interactionPolicy evaluationMonitoringBusiness LogicViewDataUser InterfaceADF Faces componentsBusiness ServicesADF Business ComponentsDatabaseSchemaDataBindingWebCenterSDO ServicesEventsMediator /BPEL ProcessHuman WorkflowServiceRulesEngineBusinessActivityMonitoringfactsAssign TaskresultsTaskComplete
  • 62. Programmatic View ObjectIt walks, talks and looks like a ‘regular’ View Object(regular being based on Entity Objects or SQL Query)But it is entirely fueled by custom written overridden Java methods – possibly without database connectionA bit like a View with Instead Of trigger – against a Collection based Table Function and PL/SQL APIProgrammatic View Objects can be used as normal in a Data Control for binding ADF Faces componentsNormal rich declarative ADF BC data binding can be provided to UI developers for data sources such asWebService, JMS Queue, Memory Grid, Document Management System, Email, cross session data, …Note: with the evolution of the Bean Data Control, some of the use cases will fade away
  • 63. the root of AjaxSuggestions
  • 64. Auto SuggestionsUser is entering a fieldAs she types characters, suggestions can be presented for what the full entry should readBased on a list of allowable values, based on previous (popular) entries or anything reallyUser can pick a suggestion for ‘short-cut typing’Auto suggestions can be model-driven (declarative) or customAnd can do things beyond plain list based suggestions
  • 65. IntroGoogle Suggest set off the AJAX hype in angerMany implementations for a ‘suggestions’ feature in ADF 10g and 11g have been createdUsing custom JavaScript or libraries like JqueryWith PS1, ADF 11g introduced a native component for ‘auto suggestions’The <af:autoSuggestBehavior> component, to be included in inputText or inputListOfValues orinputComboboxListOfValues
  • 66. Model Driven SuggestionsThe suggestions can be derived declaratively from List of Values reference on a VO AttributeSteps:On ViewObjectCreate ViewAccessor (for list values)Create List of Values for AttributeLink LoV to ViewAccessorIn PageAdd InputListOfValues component based on attributeAdd af:autoSuggestBehavior with suggestions based on List of Values Binding’s suggestedItems
  • 70. Custom SuggestionsAuto Suggestions can be provided by managed bean that implements signature: List getSuggestions( String currentValue)And the List returned is really List<SelectItem>Potential use casesBased on some (application wide) cached collection (of previously entered ?) valuesRetrieve values from WebService, file, …Use common abbreviations, codesCountry code, airportShow translations in other languages
  • 71. Static List of CountriesSuggestions
  • 72. Suggestions … or?Suggested Values do not need to be suggestions in a very literal senseWhat you see may not be what you getThe SelectItem as a label (WYS) and a value (ISWYG)Examples:Add words to field instead of replacing valuePerform selected operation on valueShow an updated indicator based on the value
  • 73. Mix Model Driven with CustomCreate a managed bean that accesses ViewObject to retrieve valuesUse custom code to execute special queries using INSTR, LIKE or other conditionsHave managed bean return items to display in the list of suggestionsBased on special ordering or fuzzy logic, Suggestions
  • 74. Candidate Managers filtered on First Name, Last Name & JobSuggestions
  • 76. Page templateTurns page layout inside out: the page references the templatethe page template determines the overall structure the page provides the content for the designated areas in the template (through the facets)Can be dynamically, context-sensitively selected using an EL expressionCan also be used for areas within a pageWith multiple page templates used within the same pageMore an area template than a page template to define UI Design PatternsTree-with-Detail-Form, Table-and-Chart, Master-Form-Detail-Table, Search block-Resultstable…
  • 77. Using multiple page templatesTwo templates: mainpage and Table-Form template
  • 78. Other page consuming the template(s)
  • 80. SummaryTwinkle, twinkle little stars…#1 nugget#2 nugget#3 nuggetDon’t give up [too soon]There is more in ADF than meets the eyeThere is a world of Java/JEE to leverageThere is a community to lean onScan release notes and monitor blog-o-sphere for valuable new (and re-discovered) nuggetsShare! Yes, you too! Your findings are just as valuable.Participate in EMG and OTN Forum discussions, write blog articles, present in conferences, …
  • 81. Session PluggingTuesday – Reaching Out from PL/SQL (S08625 )10.15-11.15, Mariott Marquis, Salon 7Tuesday – (JavaOne) Cross Tier Push Architecture (Don’t call us, we’ll push you) (S24722)4.30-5.15 PM, Hotel Nikko, Monterey I/IIWednesday – Push to the Limit: Rich and Proactive User Interfaces with Oracle ADF (S08620)5-6 PM, Mariott Marquis, Golden Gate AThursday –Instant Agility in Oracle Fusion Middleware through Design Time @ Run Time (S08623)4-5 PM, Moscone West – 2020

Editor's Notes

  • #2: Process
  • #4: ADFBCGroovy, groovy, groovy.List validators die je definieert op view assessors. Bij een entityObjectAttribute Business rule kun je een Listvalidator baseren op een view accessor. Dit kan handig zijn.LibraryShared property voor EO&apos;s en VO&apos;s. In verband met ADF BC Libraries. Alleen de objecten met LibrarySharedproperty = true kunnen worden gebruikt in de projecten die deze library importeren. Default staat deze property op true, dus zullen alle objecten altijd zichtbaar zijn. Door selectiever gebruik te maken van deze property blijven je libraries schoner. ADFFACESIn ADF 11g-R2 heb je de activeRowKeyproperty. Deze stelt je in staat om in een tabel met de click to edit mode een rij programmatisch editable te maken (zonder te clicken). Als de rij niet zichtbaar is dan wordt hier automatisch naar toe gescrolled. Zie ook : http://technology.amis.nl/blog/13314/adf-11g-r2-using-the-activerowkey-propertyIn ADF 11g-R2 heb je af:formatString en af:formatNamed. Daarmee kun je parameters (maximaal 4) gebruiken in EL expressies. formatString heeft 1 parameter, formatString2 heeft er 2, en zo verder tot formatString4. Hetzelfde geldt voor formatNamed; zie ook http://download.oracle.com/docs/cd/E16162_01/web.1112/e16181/gs_jdev.htm#CHDDAICC&lt;af:outputText value=&quot;#{af:formatString(&apos;The current user is: {0}, someBean.currentUser)}&quot; /&gt;
  • #12: In ADF 11g-R2 heb je de activeRowKeyproperty. Deze stelt je in staat om in een tabel met de click to edit mode een rij programmatisch editable te maken (zonder te clicken). Als de rij niet zichtbaar is dan wordt hier automatisch naar toe gescrolled. Zie ook : http://technology.amis.nl/blog/13314/adf-11g-r2-using-the-activerowkey-property
  • #13: Some developers don&apos;t know the Completion Insight has 2 modes
  • #20: Problem here is it hasn&apos;t filled in the left hand side of the assignment .... what types was it meant to return?In this examples it&apos;s easy to guess, but what if the function was declared in some other class? It&apos;s painful to have to navigate to that class and come back
  • #21: Instead if the user presses Ctrl – Space twice
  • #22: ....the Completion Insight changes modes
  • #23: On selecting an entry, it will now do both sides of the expression+ bonus it completes the statement too with a semicolon
  • #30: http://technology.amis.nl/blog/6583/adf-11g-contextinfo-to-implement-a-common-fusion-applications-pattern
  • #45: Push to the limit - rich and pro-active user interfaces with ADF Visual appeal and desktop-like reaction to user input were key elements in Web 2.0, powered by AJAX. The next generation user interface is active - presenting data and events in real time, driven by server push technology. This session demonstrates how ADF Active Data Service (ADS) and the BAM Data Control are leveraged to create an active UI. Messages arriving on JMS, through HTTP, from Complex Event Processing and from email servers are pushed to the browser, updating charts, tables and even causing popups to open. The session demonstrates a Chat implementation integrated in a Fusion Web application. It also shows how Database Query Result Change Notification and ADS allow events to be pushed from database all the way to user interface.Demo: http://technology.amis.nl/blog/12353/leveraging-html-5-navigator-api-to-show-the-browsers-current-location-on-an-adf-faces-11gr2-thematic-map-component
  • #49: Even though we have a rich editor for business components, there are hidden properties only revealed in the Property InspectorThe highlighted option when used, with the ADF BC components are deployed as an ADF Library, if this is set to true, the component will not be available to the consuming application.
  • #61: http://technology.amis.nl/blog/6581/adf-11g-the-native-autosuggest-behaviorhttp://www.gebs.ro/blog/oracle/oracle-adf-autosuggest-behavior/
  • #72: ViewObject for Candidate Managers (ViewCriteria with one bind parameter PartialName) Application Module Impl method (in Client Interface): findCandidateManagers(partialName) return row[]Action (Operation) Binding for that method in pageManaged bean that implements suggestions signature, executes operation binding and returns the results(pretty serious: database access after each key stroke!)