SlideShare a Scribd company logo
Hidden rocks in Oracle ADF
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   2	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   3	
  
Sailing	
  Route	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   4	
  

Recommended for you

The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42

The document discusses issues with testing business logic in Orleans grains that access grain state. Specifically, the business logic code is duplicated across grain methods and calling the logic directly in tests fails because the grain state is null. The solution is to use Orleans' declarative persistence by defining a grain state interface and inheriting from Grain, which allows the state to be initialized for tests.

orleans api c#
Testing your javascript code with jasmine
Testing your javascript code with jasmineTesting your javascript code with jasmine
Testing your javascript code with jasmine

This document discusses using Jasmine to test JavaScript code. It describes Jasmine as a behavior driven development framework for JavaScript testing. It then provides instructions on installing Jasmine, creating spec files to contain test cases, and including source code files. The document uses an example of testing a master-slave checkbox relationship to demonstrate how to set up tests, DOM elements, and code the tests against the actual code implementation.

bddjavascriptjasmine
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards

The document provides an overview of JavaScript, including that it is used to make web pages interactive, runs in browsers, and supports built-in. It discusses the DOM, common events, using the console, variables, operators, comments, conditionals, loops, arrays, objects, type checking, functions, events, timers, accessing and manipulating DOM elements, working with CSS/classes, and AJAX requests.

javascriptperpetuumburningkeyboards
public	
  class	
  VBoatImpl	
  extends	
  ViewObjectImpl	
  implements	
  VBoat	
  {	
  
	
  	
  
public	
  void	
  setupOfficeName(String	
  officeName)	
  {	
  	
  	
  
	
  	
  	
  En0tyDefImpl	
  boatEn0tyDef	
  =	
  getEn0tyDef(BOAT);	
  	
  	
  	
  	
  
	
  	
  	
  AQributeDefImpl	
  ad	
  =	
  (AQributeDefImpl)	
  boatEn0tyDef.findAQributeDef("RegisterOffice");	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  ad.setDefaultValue(officeName);	
  	
  
}	
  	
  
	
  
5	
  
Default	
  AQribute	
  Value.	
  Bad	
  Idea	
  
	
  
	
  
	
  
Ø  Setup office name as default attribute value
Ø  Invoke the VO method on task flow entry
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<af:inputText	
  	
  value="#{bindings.Length.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visible="#{bindings.Length.hints.viewableOnInsert}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label="#{bindings.Length.hints.label}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
6	
  
Custom	
  AQribute	
  Proper0es	
  
	
  
	
  
	
  
Ø  Define a custom entity attribute property
Ø  Use the property in the JSF visible attribute as UI hint
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
 	
  public	
  void	
  setBoatclass(String	
  value)	
  {	
  
	
  	
  	
  	
  	
  	
  setAQributeInternal(BOATCLASS,	
  value);	
  
	
  	
  	
  	
  	
  	
  setupViewableOnInsert(value);	
  	
  	
  	
  	
  
	
  	
  }	
  
	
  
	
  
	
  	
  
	
  	
  private	
  void	
  setupViewableOnInsert(String	
  boatClass)	
  {	
  
	
  	
  	
  	
  	
  	
  for	
  (int	
  aQr	
  :	
  SIZE_ATTRIBUTES)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  AQributeDefImpl	
  aQrDef	
  =	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (AQributeDefImpl)	
  getDefini0onObject().getAQributeDef(aQr);	
  
	
  	
  	
  	
  	
  	
  	
  	
  aQrDef.setProperty(VIEWABLE_ON_INSERT,	
  !SMALL.equals(boatClass));	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  	
  	
  	
  	
  
	
  	
  }	
  	
  
	
  
7	
  
Custom	
  AQribute	
  Proper0es.	
  Bad	
  Idea	
  
	
  	
  
	
  
	
  
Ø  Update custom property value in the Boat Class setter
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   8	
  
En0ty	
  Defini0on	
  Reef	
  

Recommended for you

06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards

This document provides an introduction to jQuery, including examples of how to use jQuery. It discusses jQuery plugins, performance tips for jQuery, and jQuery deferreds/promises. Some key points: - jQuery is a JavaScript library that allows DOM manipulation and event handling via JavaScript - jQuery code uses $ as an alias for jQuery functions - Plugins can extend jQuery's functionality - For performance, cache selections, append outside loops, detach/reattach elements being modified - Deferreds/promises allow asynchronous functions to be chained together

burningkeyboardsjavascriptjquery
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing

Workshop JavaScript Testing. Frameworks. Client vs Server Testing. Jasmine. Chai. Nock. Sinon. Spec Runners: Karma. TDD. Code coverage. Building a testable JS app. Presentado por ing: Raúl Delgado y Mario García

visualengintestingjavascript
To Err Is Human
To Err Is HumanTo Err Is Human
To Err Is Human

Building complex async applications is really hard. Whether you use callbacks, Promises, or EventEmitters, Error objects should have a place in your utility belt. They are indispensable when it comes to managing work flows in a highly asynchronous environment. This talk covers patterns for using JavaScript Error (with a capital E) objects to build resilient applications, and introduce some modules that can be used to build errors with an elegant history of stack traces even through multiple asynchronous operations. Try/catch, callbacks, and other error handling mechanisms will be examined, revealing some potential deficiencies in the JavaScript language for dealing with errors. Video: https://www.youtube.com/watch?v=PyCHbi_EqPs

javascriptexceptionserrors
 
public	
  void	
  setupOfficeName(String	
  officeName)	
  {	
  	
  	
  
	
  	
  	
  Applica0onModule	
  am	
  =	
  getApplica0onModule();	
  
	
  	
  	
  am.getSession().getUserData().put("officeName",	
  officeName);	
  
}	
  	
  
	
  
9	
  
Default	
  AQribute	
  Value.	
  Good	
  Idea	
  
	
  
	
  
	
  
Ø  Keep office name in a user session data map
Ø  Use a Groovy expression in the Default Value
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
 
	
  	
  	
  @Override	
  
	
  	
  	
  	
  protected	
  Object	
  getHistoryContextForAQribute(AQributeDefImpl	
  aQr)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (aQr.getHistoryKind()	
  ==	
  AQributeDefImpl.HISTORY_CREATE_USER)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  getDBTransac0on().getSession().getUserData().get("officeName");	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  super.getHistoryContextForAQribute(aQr);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  	
  
	
  
10	
  
Tracking	
  Change	
  History	
  
	
  
	
  
	
  
Ø  Mark the attribute as ”Created By” history column
Ø  Override getHistoryContextForAttribute in the EntityImpl
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
protected	
  En0tyAQrHintsImpl	
  createEn0tyAQrHints(AQributeDefImpl	
  aQrDef)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  return	
  new	
  CustomEn0tyAQrHintsImpl(aQrDef,	
  this);	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  }	
  
	
  
	
  
	
  
public	
  class	
  CustomEn0tyAQrHintsImpl	
  extends	
  En0tyAQrHintsImpl	
  {	
  
	
  
	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  public	
  String	
  getHint(LocaleContext	
  locale,	
  String	
  sHintName)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (VIEWABLE_ON_INSERT.equals(sHintName))	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  boatClass	
  =	
  ((BoatImpl)	
  getEn0tyImpl()).getBoatclass();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  Boolean.toString(!SMALL.equals(boatClass));	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  super.getHint(locale,	
  sHintName);	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  }	
  
	
  
	
  
	
  	
   11	
  
Custom	
  AQribute	
  Proper0es.	
  Good	
  Idea	
  
	
  	
  
	
  
	
  
Ø  Create a custom Entity Attribute Hints implementation class
Ø  Override createEntityAttrHints in the EntityImpl
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
 	
  
	
  	
  @Override	
  
	
  	
  	
  	
  public	
  void	
  resolveDefObject()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  super.resolveDefObject();	
  
	
  	
  	
  	
  	
  	
  	
  setupViewableOnInsert();	
  
	
  	
  	
  	
  }	
  
	
  
	
  
	
  
	
  	
  	
  	
  private	
  void	
  setupViewableOnInsert()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  for	
  (String	
  aQr	
  :	
  SIZE_ATTRIBUTES)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  AQributeDefImpl	
  aQrDef	
  =	
  	
  (AQributeDefImpl)	
  findAQributeDef(aQr);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  aQrDef.setPropertyExpression(VIEWABLE_ON_INSERT,	
  "Boatclass	
  !=	
  '1'");	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  
	
  
12	
  
Custom	
  AQribute	
  Proper0es.	
  Groovy	
  Expressions	
  
	
  	
  
	
  
	
  
Ø  Create a custom Entity Definition class
Ø  Override resolveDefObject method
Ø  Setup a Groovy expression with setPropertyExpression method
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with Jasmine

This document discusses JavaScript unit testing with Jasmine. It provides an overview of Jasmine's syntax including describes, contexts, matches, spies and stubs. It also discusses tools that can be used with Jasmine like jasmine-jquery for DOM testing and jasmine-given for behavior-driven development style tests.

javascriptjasminetesting
HATARI: Raising Risk Awareness
HATARI: Raising Risk AwarenessHATARI: Raising Risk Awareness
HATARI: Raising Risk Awareness

The document discusses a tool called HATARI that helps identify risky locations in code based on past fix-inducing changes. HATARI calculates a risk score for each location based on the number of past fix-inducing changes compared to the total number of changes. It visualizes risk scores with annotations to show developers potentially risky areas. HATARI will be made open source on November 1st and is available at http://www.st.cs.uni-sb.de/softevo/.

Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC

How do you create applications with an incredible level of extendability without losing readability in the process? What if there's a way to separate concerns not only on the code, but on the service definition level? This talk will explore structural and behavioural patterns and ways to enrich them through tricks of powerful dependency injection containers such as Symfony2 DIC component.

phpsoftware designsymfony
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   13	
  
LOV	
  Archipelago	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   14	
  
VO	
  based	
  View	
  Accessor	
  vs	
  En0ty	
  based	
  View	
  Accessor	
  	
  
	
  
15	
  
LOVs	
  in	
  a	
  Search	
  Form	
  
	
  
	
  
	
  
Ø  Define a separate LOV for a search form
Ø  Add a LOV-switcher attribute
Ø  Use adf.isCriteriaRow expression to switch the LOVs
JBO-­‐35111:	
  LOV	
  in	
  a	
  search	
  form	
  cannot	
  use	
  a	
  view	
  accessor	
  defined	
  on	
  an	
  En0ty.	
  Change	
  
LOV_En0ty_BoaQype	
  to	
  use	
  a	
  view	
  accessor	
  defined	
  in	
  the	
  view	
  object	
  
	
  	
  
(adf.isCriteriaRow)	
  ?	
  
"LOV_VO_BoaQype"	
  :	
  
"LOV_En0ty_BoaQype”	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
16	
  
LOVs	
  in	
  a	
  Search	
  Form	
  
	
  
	
  
	
  
SELECT	
  *	
  
FROM	
  BOAT	
  Boat	
  WHERE	
  Boat.BoatClass	
  =	
  :boatClass	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  public	
  String	
  getBoatClass()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  return	
  someCalculatedBoatClass;	
  
	
  	
  }	
  
	
  
if	
  	
  (adf.isCriteriaRow)	
  	
  	
  	
  	
  
	
  	
  return	
  dataProvider.viewCriteria.viewObject.boatClass;	
  	
  	
  	
  
else	
  
	
  	
  return	
  viewObject.boatClass;	
  	
  	
  
	
  
	
  
JBO-­‐25077:	
  Name	
  boatClass	
  not	
  found	
  in	
  the	
  given	
  
object:	
  oracle.adf.model.bean.DCDataVO.	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

Redux for ReactJS Programmers
Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers

This is the support of a course to teach mainly Redux, and Redux with React for Java and C# programmers. It is the third part of the course to recycle programmers from desktop app programming to web app programming. This course covers from history of Redux, its origin, step by step what is a reducer, and later concepts like reducer splitting, action handling, async and many more. You also can use repositories: - https://github.com/drpicox/learn-redux-bytesting - https://github.com/drpicox/learn-redux-zoo-bytesting To improve your skills.

programmersreduxcourse
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology

Presentation i gave at londonweb august on building a site on what turned out to be 12 preview, 5 beta, 6 RC and a final release of Symfony 2.

phpsymfony2symfony
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts

A lot of people using PHPunit for testing their source code. While I was observing my team I recognized most of them are only using the standard assertions like 'assertEquals()' and are complaining about how hard it is to test the code even when the tests are written first. This talk is about all the stuff not used on a daily basis and it digs deep into uncommon features of PHPUnit.

phpannotationsmocking
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   17	
  
Shared	
  VO	
  Instance	
  	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   18	
  
Session	
  Shared	
  AM	
  vs	
  Applica0on	
  Shared	
  AM	
  	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   19	
  
Row	
  Level	
  Binds	
  	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   20	
  
Master/Detail	
  Pirates	
  

Recommended for you

Backbone js
Backbone jsBackbone js
Backbone js

The document appears to be notes on Backbone.js. It includes summaries of Backbone models, events, views and how to bind events. It demonstrates creating a model with defaults, getting/setting attributes, and binding event handlers. It also shows creating a view with tagName, className and attributes, and logging the generated HTML element.

mvcjavascriptjquery
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets

This document contains a summary of jQuery secrets presented by Bastian Feder. It discusses various techniques including saving and removing state from DOM elements using jQuery.data() and jQuery.removeData(), extending jQuery functionality through plugins, and customizing AJAX requests and event handling. The presentation provides code examples for working with jQuery's data storage methods, namespaces, promises/deferreds, global AJAX settings, and extending jQuery.

Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications

The document discusses refactoring legacy PHP code, specifically dealing with code that has no separation between PHP and HTML. It recommends separating code into controllers and views by gathering all code, separating controller and view code, assigning variables to a view object, changing variable references in the view code, and splitting the files. Specific problems in legacy PHP code like no separation of concerns, global variables, and reliance on includes can be addressed through techniques like creating view classes, encapsulating logic in objects, and wrapping includes in functions to untangle dependency webs. The goal is to safely change code implementation without changing behavior through refactoring.

Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   21	
  
Master/Detail	
  Pirates	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
 
public	
  class	
  VBoatImpl	
  extends	
  ViewObjectImpl	
  {	
  
	
  	
  	
  	
  protected	
  void	
  create()	
  {	
  
	
  	
  	
  	
  	
  	
  super.create();	
  
	
  	
  	
  	
  	
  	
  addListener(new	
  DetailRowSetsListener());	
  
	
  	
  	
  	
  }	
  	
  	
  
	
  
	
  
public	
  class	
  DetailRowSetsListener	
  implements	
  RowSetListener	
  {	
  
	
  	
  
	
  @Override	
  
	
  public	
  void	
  navigated(Naviga0onEvent	
  event)	
  {	
  
	
  	
  	
  	
  ViewObject	
  vo	
  =	
  (ViewObject)	
  event.getSource();	
  
	
  	
  	
  	
  for	
  (RowSet	
  detail	
  :	
  vo.getDetailRowSets())	
  {	
  
	
  	
  	
  	
  	
  	
  detail.closeRowSet();	
  
	
  	
  	
  	
  }	
  
	
  }	
  
	
  
22	
  
Master/Detail	
  Pirates	
  
	
  	
  
	
  
	
  
Ø  Use separate VO instances for different use-cases
Ø  Add RowSetListener to the master VO instance
Ø  Reproduced only when AM pooling is enabled
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   23	
  
Ac0va0on/Passiva0on	
  Vortex	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   24	
  
Ac0va0on/Passiva0on	
  Vortex	
  

Recommended for you

Why ruby
Why rubyWhy ruby
Why ruby

The document discusses Ruby and Ruby on Rails. It notes that Ruby is an object-oriented programming language created by Yukihiro Matsumoto in 1995. Ruby on Rails is a web application framework built on Ruby that was created by David Heinemeier Hansson in 2004. It follows the model-view-controller architectural pattern, separating applications into models, views, and controllers.

railsruby
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails

- Ruby is an interactive, object-oriented programming language created by Yukihiro Matsumoto in 1995. - Ruby on Rails is a web application framework built on Ruby that emphasizes convention over configuration and is optimized for programmer happiness. - The document discusses Ruby and Ruby on Rails, providing an overview of their history, key principles like MVC, REST, and conventions used in Rails. It also provides examples of modeling data with classes and ActiveRecord in Rails.

ruby on railsruby
Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration
Oracle ADF Architecture TV - Design - Architecting for PLSQL IntegrationOracle ADF Architecture TV - Design - Architecting for PLSQL Integration
Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

Slides from Oracle's ADF Architecture TV series covering the Design phase of ADF projects, considering integrating PLSQL into your ADF applications. Like to know more? Check out: - Subscribe to the YouTube channel - http://bit.ly/adftvsub - Design Playlist - http://www.youtube.com/playlist?list=PLJz3HAsCPVaSemIjFk4lfokNynzp5Euet - Read the episode index on the ADF Architecture Square - http://bit.ly/adfarchsquare

planningdesignarchitecture
25	
  
Ac0va0on/Passiva0on	
  Vortex	
  
	
  	
  
	
  
	
  
Ø  Retain View Link Accessor Rowset
Ø  Passivated transient VO attributes
Ø  Dynamic VO attributes
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   26	
  
Ac0va0on/Passiva0on	
  Vortex	
  
27	
  
Ac0va0on/Passiva0on	
  Vortex	
  
	
  	
  
	
  
	
  
Ø  Retain View Link Accessor Rowset
Ø  Passivated transient VO attributes
Ø  Dynamic VO attributes
Ø  Close VO row set when it is not needed anymore
	
  
	
  	
  
public	
  void	
  flowFinalizer()	
  {	
  	
  	
  	
  
	
  	
  	
  	
  	
  BindingContext	
  bc	
  =	
  BindingContext.getCurrent();	
  
	
  	
  	
  	
  	
  Applica0onModule	
  am	
  =	
  bc.findDataControl("SampleModelServiceDataControl").getApplica0onModule();	
  
	
  	
  	
  	
  	
  ViewObject	
  vo	
  =	
  am.findViewObject("VBoat");	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  vo.closeRowSet();	
  	
  	
  	
  	
  	
  
	
  	
  }	
  
	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
28	
  
Enabling	
  AM	
  Pooling	
  Programma0cally	
  
	
  	
  
	
  
	
  
Ø  Create custom ApplicationPool implementation class
Ø  Specify PoolClassName in the AM Configuration
Ø  Override isAMPoolingEnabled method
public	
  class	
  CustomApplica0onPoolImpl	
  extends	
  Applica0onPoolImpl	
  {	
  
	
  
	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  public	
  boolean	
  isAMPoolingEnabled()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  getYourOwnAMPoolingEnabled();	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  	
  …	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

Malware Facts & Statistics
Malware Facts & StatisticsMalware Facts & Statistics
Malware Facts & Statistics

Discover all of the latest statistics and trends in the malware industry. See the infographic here: http://anti-virus-software-review.toptenreviews.com/how-infected-are-we.html

malwarecomputer virusantivirus
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep dive

This document provides an overview of the key components of Cloud Foundry, including: - The Cloud Controller which manages application deployments, services, user roles, and more. - Buildpacks which stage and compile applications to create droplets run by DEAs on VMs. - DEAs which manage application container lifecycles using Warden containers for isolation. - Routers which route traffic to applications and maintain dynamic routing tables. - Services which provide interfaces to both native and 3rd party services running on Service Nodes. - UAA which handles user authentication, authorization, and manages OAuth access credentials. It also describes how organizations and spaces segment the platform and how domains

bluemixcloudfoundryibm
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   29	
  
Associa0on	
  Consistency	
  Piyall	
  
30	
  
Separate	
  View	
  Objects	
  for	
  Different	
  Use-­‐Cases	
  
	
  	
  
	
  
	
  
Ø  Different sets of attributes
Ø  Different View Links, View Accessors, LOVs, View Crierias, etc.
Ø  Different attributes UI hints
Ø  Different SQL execution tuning options
VSailorBrowse VSailorInsert
Sailor
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
31	
  
Associa0on	
  (View	
  Link)	
  Consistency	
  
	
  
	
  
	
  
Ø  View Objects are based on the same entity
Ø  Only one primary entity usage
Ø  All secondary entity usages are references
VSailorBrowse VSailorInsert
Sailor
Entity Cache
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
32	
  
Associa0on	
  Consistency	
  Piyall	
  
	
  
	
  
	
  
Ø  New row should fit with memory filter
Ø  rowQualifies()	
  	
  
Ø  RowMatch	
  
Ø  Disabled when Where Clause is applied at runtime
Ø  Use setAssociationConsistent(true) to enable
	
  protected	
  void	
  executeQueryForCollec0on(Object	
  qc,	
  Object[]	
  params,	
  int	
  noUserParams)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  super.executeQueryForCollec0on(qc,	
  params,	
  noUserParams);	
  
	
  	
  	
  	
  	
  	
  	
  setAssocia0onConsistent(true);	
  	
  	
  
	
  	
  	
  	
  }	
  
	
  	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation

Cloudfoundry is the open platform as a service providing a faster and easier way to build, test, deploy and scale applications.Deploy & Scale in seconds on your choice of clouds.

cloudfoundrycloud computingplatform as a service
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overview

This presentation covers both the Cloud Foundry Elastic Runtime (known by many as just "Cloud Foundry") as well as the Operations Manager (known by many as BOSH). For each, the main components are covered with interactions between them.

boshcloud foundryarchitecture
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle

JavaFX 8 est disponible depuis mars 2014 et apporte son lot de nouveautés. Gradle est en version 2 depuis juillet 2014. Deux technologies plus que prometteuses: JavaFX donne un coup de jeune au développement d’applications desktop en Java en apportant un navigateur web intégré, le support des WebSockets, de la 3D, et bien d’autres. Gradle est l’outil de d’automatisation de build à la mode, apportant de superbes possibilités par rapport rapport à maven, outil vieillissant, grâce à l’engouement de la communauté vis à vis de cet outil mais aussi par le fait de la technologie utilisée en son sein: groovy. Venez découvrir comment il est possible de réaliser rapidement une application à la mode en JavaFX avec un outil à la mode également. Bref venez à une session trendy.

bindinggradlejavafx
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   33	
  
View	
  Criteria	
  Rocks	
  
34	
  
Controlling	
  VC	
  items	
  UI	
  hints	
  
	
  
	
  
	
  
Ø  Declarative approach for basic UI hints
Ø  Label,	
  Tool0p,	
  Display	
  Width,	
  Format,	
  etc.	
  	
  
Ø  Override getCriteriaItemAttributeHints in ViewObjectImpl class
	
  	
  	
  @Override	
  
	
  	
  	
  	
  public	
  AQributeHints	
  getCriteriaItemAQributeHints(ViewCriteriaItem	
  vci)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (vci.getAQributeDef().getName().equals("Boat"))	
  {	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (getPredefinedBoat()	
  !=	
  null)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  vci.setProperty(ViewCriteriaItem.RENDERED_MODE,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ViewCriteriaItem.CRITERIA_RENDERED_MODE_NEVER);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  vci.setProperty(ViewCriteriaItem.RENDERED_MODE,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ViewCriteriaItem.CRITERIA_RENDERED_MODE_BOTH);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  super.getCriteriaItemAQributeHints(vci);	
  
	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   35	
  
Managed	
  Bean	
  Scope	
  Gorgon	
  
36	
  
UI	
  Component	
  Binding	
  Challenge	
  
	
  
	
  
	
  
Ø  UI components are not serializable
Ø  High	
  Availability	
  mode	
  
Ø  ADF	
  Controller	
  save	
  points	
  
Ø  Transient variable is not an option
Ø  UI component tree should not be hard referenced
	
  
	
  <af:table	
  value="#{bindings.VBoat.collec0onModel}"	
  var="row"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  binding="#{BrowseBean.table}"	
  	
  	
  	
  	
  
	
  
	
  
	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  public	
  RichTable	
  getTable()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  table;	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  void	
  setTable(RichTable	
  table)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.table	
  =	
  table;	
  
	
  	
  	
  	
  }	
  
	
  
	
  
Request or Backing Bean
Scope!
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation

Some examples of using Reflections and automatic code generation to reduce the amount of code developers have to write.

Swift - One step forward from Obj-C
Swift -  One step forward from Obj-CSwift -  One step forward from Obj-C
Swift - One step forward from Obj-C

Rewrite few familiar Cocoa Touch code examples from Obj-C to Swift by learning to use Closures, Enums, Switch-Case with Pattern matching, Singleton, GCD, CoreGraphics. Presented at Tel Aviv iOS Developers Meetup.

swiftnissan tsafrirswift singleton
Phactory
PhactoryPhactory
Phactory

Phactory is an alternative to database fixtures for defining test data in PHP unit tests. It allows developers to define database objects in code and dynamically create them, rather than loading static datasets. Phactory provides a lightweight ORM and works with MySQL, SQLite, and MongoDB. It supports defining object blueprints, creating objects with associations, retrieving objects, and integrating with PHPUnit for testing database code.

fixturephptesting
37	
  
UI	
  Component	
  Binding	
  Example	
  
	
  
	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  binding="#{BrowseBean.table}"	
  
	
  
headerText="#{BrowseBean.searchTitle}"	
  
	
  
	
  
	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseBoats	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  boats";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  binding="#{BrowseBean.table}”	
  
	
  
headerText="#{BrowseBean.searchTitle}"	
  
	
  
	
  
	
  	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseSailors	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  sailors";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
38	
  
Request	
  Scope	
  Managed	
  Beans	
  
	
  
	
  
	
  
Ø  One instance of the bean within request
	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseSailors	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  sailors";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseBoats	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  boats";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
39	
  
Backing	
  Bean	
  Scope	
  Managed	
  Beans	
  
	
  
	
  
	
  
Ø  One instance of the bean per region within request
	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseSailors	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  sailors";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  
	
  	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseBoats	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  boats";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
40	
  
Backing	
  Bean	
  Scope	
  Managed	
  Beans	
  
	
  
	
  
	
  
Ø  One instance of the bean per region within request
	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseBoats	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  boats";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  	
  	
  	
  public	
  class	
  BrowseSailors	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  private	
  RichTable	
  table;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  String	
  getSearchTitle()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Search	
  sailors";	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

Clean code via dependency injection + guice
Clean code via dependency injection + guiceClean code via dependency injection + guice
Clean code via dependency injection + guice

The document discusses various code smells related to dependency injection and constructor usage, such as constructors doing real work instead of just setting fields, digging into collaborator objects instead of using their interfaces, and relying on global state and singletons. It provides examples of these code smells and proposes fixes using dependency injection and interfaces to make the code more testable and flexible.

guiceunit testingdependency injection
Dependency Injection in PHP
Dependency Injection in PHPDependency Injection in PHP
Dependency Injection in PHP

Slides from my talk during PHPCon Poland. Szczyrk 25/10/2013 More Domain-Driven Design related content at: https://domaincentric.net/

phpdesigndependency
The IoC Hydra
The IoC HydraThe IoC Hydra
The IoC Hydra

Slides from my talk presented during SymfonyLive London - 18 September 2015. More Domain-Driven Design related content at: https://domaincentric.net/

phpeventssymfony2
41	
  
View	
  Scope	
  Managed	
  Beans	
  
	
  
	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
42	
  
UI	
  Component	
  Reference	
  
	
  
	
  
	
  
Ø  Use ComponentReference to hold the UI component reference
Ø  Serializable	
  	
  
Ø  Avoids	
  hard	
  references	
  to	
  UI	
  components	
  
Ø  Good enough for any memory scope
public	
  class	
  BrowseSailors	
  {	
  
	
  	
  	
  	
  private	
  ComponentReference	
  tableReference;	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  public	
  void	
  setTable(RichTable	
  table)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  tableReference	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ComponentReference.newUIComponentReference(table);	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  RichTable	
  getTable()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  return	
  (tableReference	
  ==	
  null	
  ?	
  null	
  :	
  (RichTable)	
  tableReference.getComponent());	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  }	
  
	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   43	
  
Excep0on	
  Handling	
  Stone	
  
44	
  
Controller	
  Excep0on	
  Handler	
  
	
  
	
  
	
  
Ø  Mark a task flow activity as an Exception Handler
Ø  Handle exceptions related to the task flow navigation
Ø  Method	
  Call,	
  Router,	
  Task	
  Flow	
  Call,	
  	
  Ini0alizer,	
  Finalizer,	
  etc.	
  	
  
Ø  Not	
  a	
  View	
  Ac0vity	
  
	
  public	
  void	
  excep0onHandler()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  ControllerContext	
  context	
  =	
  ControllerContext.getInstance();	
  
	
  	
  	
  	
  	
  	
  	
  	
  ViewPortContext	
  currentRootViewPort	
  =	
  context.getCurrentViewPort();	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (currentRootViewPort.isExcep0onPresent())	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Excep0on	
  ex	
  =	
  currentRootViewPort.getExcep0onData();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  FacesContext	
  fc	
  =	
  FacesContext.getCurrentInstance();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  FacesMessage	
  facesMessage	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  new	
  FacesMessage(FacesMessage.SEVERITY_ERROR,	
  ex.getMessage(),	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  null);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fc.addMessage(null,	
  facesMessage);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fc.renderResponse();	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

Javascript call ObjC
Javascript call ObjCJavascript call ObjC
Javascript call ObjC

The document discusses techniques for enabling communication between JavaScript and Objective-C in iOS applications, including setting global variables accessible to both, making Objective-C selectors and properties available to JavaScript, and handling callbacks from JavaScript to Objective-C such as when the web view location changes or a form is submitted. Code snippets provide examples of implementing these techniques.

objcjavascriptuiwebview
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF

This document discusses integrating Java Contexts and Dependency Injection (CDI) with other Java technologies like Spring and JavaServer Faces (JSF). It covers CDI concepts like the Inversion of Control pattern and dependency injection. It also provides examples of using CDI with Spring, integrating CDI and JSF, and using CDI interceptors. The document recommends some libraries for CDI integration and provides sample code links.

java
Quick Fetch API Introduction
Quick Fetch API IntroductionQuick Fetch API Introduction
Quick Fetch API Introduction

The Fetch API is a modern replacement of the XMLHTTPRequest object. It is based on promises and makes making AJAX/API calls easier to manage and code. This slide deck is a quick introduction to the API.

pwajavascriptweb design and development
45	
  
Nested	
  Task	
  Flow	
  Call	
  
	
  
	
  
	
  
Sailors Task Flow
Create Sailor Task
Flow
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
46	
  
Must	
  Have	
  Excep0on	
  Handler	
  
	
  
	
  
	
  
Ø  Pop the task flow from the stack if there is no Exception Handler
Ø  Repeat until Exception Handler is located
Task Flow 0
Task Flow 1
No Exception HandlerTask Flow 2
No Exception HandlerTask Flow 3
TaskFlowStack
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   47	
  
UI	
  Mermaids	
  
48	
  
Immediate	
  aQribute	
  
	
  
	
  
	
  
Ø  Validation and ValueChangeEvent at Apply Request Values phase
Ø  The Lifecycle does not stop
Ø  The rest of phases are not skipped
	
  <af:inputText	
  value="#{bindings.Lengthh.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visible="#{bindings.Lengthh.hints.viewableOnInsert}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  par0alTriggers="socBoatClass"	
  
	
  
	
  	
  	
  	
  	
  
	
  <af:selectOneChoice	
  value="#{bindings.Boatclass.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  autoSubmit="true"	
  immediate="true"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="socBoatClass”	
  
	
  
	
  
public	
  void	
  valueChangeListenerBoatClass(ValueChangeEvent	
  valueChangeEvent)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  UIComponent	
  c	
  =	
  valueChangeEvent.getComponent();	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  c.processUpdates(FacesContext.getCurrentInstance());	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  FacesContext.getCurrentInstance().renderResponse();	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw

The document discusses integrating ReactJS and Webpack into Ruby on Rails applications. It covers using modules with CommonJS, RequireJS, and ECMAScript 6. It also discusses using Webpack for bundling assets, setting up entry points, loaders, and plugins. Webpack can be configured to work with Rails by defining webpack.config.js and using the assets:webpack task for deployment. This provides a modular approach for JavaScript development while still leveraging Rails.

webpackreactrails
Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15

Android and the Seven Dwarfs from Devox'15 Butterknife Dagger Volley / OkHttp / Retrofit GreenBus / Otto GreenDAO / Schematic Priority JobQueue Timber / Hugo Retrolambda

volleygreenbushugo
Test-driven Development with AEM
Test-driven Development with AEMTest-driven Development with AEM
Test-driven Development with AEM

The talk presents how we established a TDD cycle within the complex AEM technology stack using a "unified testing API". It illustrates how such an API can be built and discusses various advantages over other approaches such as the Sling Testing API.

#connect2015tddwebapp
49	
  
Programma0cally	
  Refreshing	
  Components	
  
	
  
	
  
	
  
Ø  Dependent components don’t participate in the request
Ø  Add components as partial targets to the AdfFacesContext
	
  <af:inputText	
  value="#{bindings.Lengthh.inputValue}"	
  id="itLength"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visible="#{bindings.Lengthh.hints.viewableOnInsert}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  <af:outputText	
  value="(meters)"	
  id="otLength"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visible="#{bindings.Lengthh.hints.viewableOnInsert}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  public	
  void	
  valueChangeListenerBoatClass(ValueChangeEvent	
  valueChangeEvent)	
  {	
  
	
  	
  	
  	
  	
  UIComponent	
  c	
  =	
  	
  JsfU0ls.findComponentInRoot("itLength");	
  
	
  	
  	
  	
  	
  AdfFacesContext.getCurrentInstance().addPar0alTarget(c);	
  
	
  	
  
	
  	
  	
  	
  	
  c	
  =	
  	
  JsfU0ls.findComponentInRoot("otLength");	
  
	
  	
  	
  	
  	
  AdfFacesContext.getCurrentInstance().addPar0alTarget(c);	
  
	
  	
  	
  	
  	
  	
  …	
  
	
  	
  	
  	
  }	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
50	
  
ClientComponent	
  aQribute	
  
	
  
	
  
	
  
<af:outputText	
  value="(meters)"	
  id="otLength”	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  HTML:	
  <span	
  id="pt1:dyntdc:reg:1:pt1:otLength”>	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  clientComponent=”true"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (meters)	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </span>	
  
document.getElementById("otLength")	
  =	
  HTMLSpanElement	
  
AdfPage.PAGE.findComponent("otLength")	
  =	
  AdfRichOutputText	
  
	
  
	
  
<af:outputText	
  value="(meters)"	
  id="otLength”	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  HTML:	
  <span	
  id="pt1:dyntdc:reg:1:pt1:otLength”>	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  par0alTriggers="socBoatClass"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (meters)	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </span>	
  
document.getElementById("otLength")	
  =	
  HTMLSpanElement	
  
AdfPage.PAGE.findComponent("otLength")	
  =	
  undefined	
  
	
  
	
  <af:outputText	
  value="(meters)"	
  id="otLength”	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  HTML:	
  	
  (meters)	
  	
  
	
  
document.getElementById("otLength")	
  =	
  undefined	
  
AdfPage.PAGE.findComponent("otLength")	
  =	
  undefined	
  
	
  
<no	
  PPR-­‐capable	
  ID	
  found	
  for	
  elements	
  of:	
  RichOutputText[UIXFacesBeanImpl,	
  id=otLength]>	
  
	
   Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
51	
  
SelectBooleanCheckBox	
  example	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
<af:switcher	
  facetName="#{SessionInfo.regaQaUpdatable	
  ?	
  'regaQaUpdatable'	
  :	
  'regaQaReadOnly'}">	
  
	
  	
  	
  	
  	
  	
  <f:facet	
  name="regaQaUpdatable">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:selectBooleanCheckbox	
  value="#{bindings.InregaQa.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  disabled="#{empty	
  bindings.Manufdate.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  par0alTriggers="idManufDate"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  	
  
	
  	
  	
  	
  	
  </f:facet>	
  
	
  	
  	
  	
  	
  <f:facet	
  name="regaQaReadOnly">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:outputText	
  value="#{bindings.InRegaQaName.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
	
  	
  	
  	
  	
  </f:facet>	
  
	
  	
  </af:switcher>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
52	
  
SelectBooleanCheckBox	
  piyall	
  
	
  
	
  
	
  
Ø  Invisible partially triggered components participate in the request
Ø  getSubmittedValue() never returns null for selection components
	
  	
  if	
  (component.isRendered()	
  &&	
  component.getSubmiQedValue()	
  !=	
  null)	
  {	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  processComponent(component);	
  	
  	
  
	
  	
  	
  }	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  skipComponent(component);	
  	
  
	
  	
  	
  }	
  
	
  
	
  
	
  <af:switcher	
  facetName="#{SessionInfo.regaQaUpdatable	
  ?	
  'regaQaUpdatable'	
  :	
  'regaQaReadOnly'}">	
  
	
  	
  	
  	
  	
  	
  <f:facet	
  name="regaQaUpdatable">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:selectBooleanCheckbox	
  value="#{bindings.InregaQa.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  disabled="#{empty	
  bindings.Manufdate.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  par0alTriggers="idManufDate"	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  …	
  
rendered="#{SessionInfo.regaQaUpdatable}"	
  	
  	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

NodeJS Spring style Inversifyjs
NodeJS Spring style InversifyjsNodeJS Spring style Inversifyjs
NodeJS Spring style Inversifyjs

This document discusses dependency injection (DI) and inversion of control (IOC) design patterns. It explains that DI allows defining dependencies externally rather than hardcoding them, improving testability. IOC builds on DI by having a lightweight container manage object construction and dependency graph. The document uses JavaScript examples to demonstrate an InversifyJS library that implements IOC for JavaScript applications in a similar way that Spring Framework does for Java apps.

software developmentjavascriptnodejs
A portlet-API based approach for application integration
A portlet-API based approach for application integrationA portlet-API based approach for application integration
A portlet-API based approach for application integration

This document discusses using a portlet API-based approach for integrating applications into Magnolia. It describes the portlet API concept of separate action and render phases. Implementing portlets as JSR-168 components allows seamless integration into Magnolia by adding a portlet filter and rendering portlets during page generation. Configuration is done through content types and portlet parameters can be accessed. Real-world use has shown this approach works well for small applications but has limitations for more complex integrations.

mconf
What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?

The document summarizes what's new and noteworthy in Java EE 8, including updates to CDI 2.0, Bean Validation 2.0, JPA 2.2, JSF 2.3, JSON-B 1.0, Servlet 4.0, JAX-RS 2.1, and odds and ends like JSON-P and the Java EE Security API. It also discusses the status of Java EE 8 implementations from GlassFish, Payara, and Open Liberty, as well as the future of Java EE.

53	
  
Automa0c	
  par0al	
  page	
  rendering	
  (Auto-­‐ppr)	
  	
  	
  
	
  
	
  
	
  
	
  <iterator	
  Binds="VBoat"	
  RangeSize="25"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DataControl="SampleModelServiceDataControl"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="VBoatIterator"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ChangeEventPolicy="ppr"	
  />	
  
	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
54	
  
Target	
  Tag	
  (JDeveloper	
  12c)	
  
	
  
	
  
	
  
Ø  Useful to skip validation while PPR execution
Ø  Available in ADF 12c
<af:selectOneChoice	
  value="#{bindings.Boatclass.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …>	
  
	
  	
  	
  	
  	
  	
  	
  <af:target	
  execute="@this"	
  render="it1	
  it2	
  it3"/>	
  
</af:selectOneChoice>	
  
	
  
<af:inputText	
  value="#{bindings.Lengthh.inputValue}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visible="#{bindings.Lengthh.hints.viewableOnInsert}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id=”it1”	
  required=”true”	
  
	
  
<af:inputText	
  value="#{bindings.Width.inputValue}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visible="#{bindings.Width.hints.viewableOnInsert}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id=”it2”	
  required=”true”	
  
	
  	
  	
  	
  	
  
<af:inputText	
  value="#{bindings.Capacity.inputValue}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visible="#{bindings.Capacity.hints.viewableOnInsert}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id=”it3”	
  required=”true”	
  
	
  	
  	
  	
  	
  
	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
55	
  
ValidateDateTimeRange	
  validator	
  
	
  
	
  
	
  
	
  
	
  <af:inputDate	
  value="#{bindings.RegaQastartdate.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …/>	
  	
  	
  
	
  
	
  <af:inputDate	
  value="#{bindings.RegaQafinishdate.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …/>	
  	
  	
  
	
  
	
  
	
  <af:inputDate	
  value="#{bindings.Firstracedate.inputValue}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …>	
  	
  
	
  	
  	
  	
  	
  <af:validateDateTimeRange	
  minimum="#{bindings.RegaQastartdate.inputValue.value}"	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  maximum="#{bindings.RegaQafinishdate.inputValue.value}"/>	
  
	
  </af:inputDate>	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
56	
  
ValidateDateTimeRange	
  piyall	
  
	
  
	
  
	
  
Ø  Maximum = 5/30/2014 23:59:59.999
<af:validateDateTimeRange	
  minimum="#{bindings.RegaQastartdate.inputValue.value}"	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  maximum="#{bindings.LimitRegaQaFinishDate.inputValue.value}"/>	
  
	
  
	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  

Recommended for you

JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...

Presented at GeeCON 2011: JavaFX Script is going away, but the JavaFX Platform is getting a new face with pure Java APIs. In this session, you will see how you can leverage the new JavaFX 2.0 APIs from a host of different JVM languages, including JRuby, Clojure, Groovy, and Scala.

javafxfantomclojure
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages

JavaFX is more than a language. It is also a platform for building immersive applications with graphics, animation, and rich media. In this session, you will see how you can leverage JavaFX from a host of different JVM languages, including Java, JRuby, Groovy, Scala, and Clojure.

javafxclojuregroovy
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin

Jenkins User Conference 2012 Only by the third plugin do you get the hang of writing a plugin. I thought as a developer coming to the build side of things it'd be easy to jump in and write some plugins. I was wrong. Don't be fooled by the extremely friendly Jenkins community, writing a plugin from scratch is harder than they let on. This talk will explain the hurdles that I had to cross to make writing plugins easy.

pluginsjenkinshudson
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   57	
  
Ques0ons	
  &	
  Answers	
  

More Related Content

What's hot

Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
Frank de Jonge
 
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs
Konstantin Kudryashov
 
meet.js - QooXDoo
meet.js - QooXDoomeet.js - QooXDoo
meet.js - QooXDoo
Radek Benkel
 
The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42
Yevhen Bobrov
 
Testing your javascript code with jasmine
Testing your javascript code with jasmineTesting your javascript code with jasmine
Testing your javascript code with jasmine
Rubyc Slides
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
Denis Ristic
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
Denis Ristic
 
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing
Visual Engineering
 
To Err Is Human
To Err Is HumanTo Err Is Human
To Err Is Human
Alex Liu
 
JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with Jasmine
Raimonds Simanovskis
 
HATARI: Raising Risk Awareness
HATARI: Raising Risk AwarenessHATARI: Raising Risk Awareness
HATARI: Raising Risk Awareness
Thomas Zimmermann
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
Konstantin Kudryashov
 
Redux for ReactJS Programmers
Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers
David Rodenas
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
Daniel Knell
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
Bastian Feder
 
Backbone js
Backbone jsBackbone js
Backbone js
rstankov
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
smueller_sandsmedia
 
Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications
Clinton Dreisbach
 
Why ruby
Why rubyWhy ruby
Why ruby
rstankov
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
rstankov
 

What's hot (20)

Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
 
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs
 
meet.js - QooXDoo
meet.js - QooXDoomeet.js - QooXDoo
meet.js - QooXDoo
 
The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42
 
Testing your javascript code with jasmine
Testing your javascript code with jasmineTesting your javascript code with jasmine
Testing your javascript code with jasmine
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
 
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing
 
To Err Is Human
To Err Is HumanTo Err Is Human
To Err Is Human
 
JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with Jasmine
 
HATARI: Raising Risk Awareness
HATARI: Raising Risk AwarenessHATARI: Raising Risk Awareness
HATARI: Raising Risk Awareness
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
 
Redux for ReactJS Programmers
Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
 
Backbone js
Backbone jsBackbone js
Backbone js
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
 
Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications
 
Why ruby
Why rubyWhy ruby
Why ruby
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
 

Viewers also liked

Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration
Oracle ADF Architecture TV - Design - Architecting for PLSQL IntegrationOracle ADF Architecture TV - Design - Architecting for PLSQL Integration
Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration
Chris Muir
 
Malware Facts & Statistics
Malware Facts & StatisticsMalware Facts & Statistics
Malware Facts & Statistics
pahansen
 
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep dive
Animesh Singh
 
Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation
Vivek Parihar
 
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overview
cornelia davis
 

Viewers also liked (6)

Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration
Oracle ADF Architecture TV - Design - Architecting for PLSQL IntegrationOracle ADF Architecture TV - Design - Architecting for PLSQL Integration
Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration
 
Ood 2013 copy
Ood 2013 copyOod 2013 copy
Ood 2013 copy
 
Malware Facts & Statistics
Malware Facts & StatisticsMalware Facts & Statistics
Malware Facts & Statistics
 
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep dive
 
Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation
 
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overview
 

Similar to Hidden rocks in Oracle ADF

Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
Thierry Wasylczenko
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation
Ivan Dolgushin
 
Swift - One step forward from Obj-C
Swift -  One step forward from Obj-CSwift -  One step forward from Obj-C
Swift - One step forward from Obj-C
Nissan Tsafrir
 
Phactory
PhactoryPhactory
Phactory
chriskite
 
Clean code via dependency injection + guice
Clean code via dependency injection + guiceClean code via dependency injection + guice
Clean code via dependency injection + guice
Jordi Gerona
 
Dependency Injection in PHP
Dependency Injection in PHPDependency Injection in PHP
Dependency Injection in PHP
Kacper Gunia
 
The IoC Hydra
The IoC HydraThe IoC Hydra
The IoC Hydra
Kacper Gunia
 
Javascript call ObjC
Javascript call ObjCJavascript call ObjC
Javascript call ObjC
Lin Luxiang
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
Jiayun Zhou
 
Quick Fetch API Introduction
Quick Fetch API IntroductionQuick Fetch API Introduction
Quick Fetch API Introduction
Chris Love
 
20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw
Tse-Ching Ho
 
Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15
Murat Yener
 
Test-driven Development with AEM
Test-driven Development with AEMTest-driven Development with AEM
Test-driven Development with AEM
Jan Wloka
 
NodeJS Spring style Inversifyjs
NodeJS Spring style InversifyjsNodeJS Spring style Inversifyjs
NodeJS Spring style Inversifyjs
Mathieu Breton
 
A portlet-API based approach for application integration
A portlet-API based approach for application integrationA portlet-API based approach for application integration
A portlet-API based approach for application integration
whabicht
 
What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?
gedoplan
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
Stephen Chin
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
Stephen Chin
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
Justin Ryan
 
Commencer avec le TDD
Commencer avec le TDDCommencer avec le TDD
Commencer avec le TDD
Eric Hogue
 

Similar to Hidden rocks in Oracle ADF (20)

Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation
 
Swift - One step forward from Obj-C
Swift -  One step forward from Obj-CSwift -  One step forward from Obj-C
Swift - One step forward from Obj-C
 
Phactory
PhactoryPhactory
Phactory
 
Clean code via dependency injection + guice
Clean code via dependency injection + guiceClean code via dependency injection + guice
Clean code via dependency injection + guice
 
Dependency Injection in PHP
Dependency Injection in PHPDependency Injection in PHP
Dependency Injection in PHP
 
The IoC Hydra
The IoC HydraThe IoC Hydra
The IoC Hydra
 
Javascript call ObjC
Javascript call ObjCJavascript call ObjC
Javascript call ObjC
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
 
Quick Fetch API Introduction
Quick Fetch API IntroductionQuick Fetch API Introduction
Quick Fetch API Introduction
 
20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw
 
Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15
 
Test-driven Development with AEM
Test-driven Development with AEMTest-driven Development with AEM
Test-driven Development with AEM
 
NodeJS Spring style Inversifyjs
NodeJS Spring style InversifyjsNodeJS Spring style Inversifyjs
NodeJS Spring style Inversifyjs
 
A portlet-API based approach for application integration
A portlet-API based approach for application integrationA portlet-API based approach for application integration
A portlet-API based approach for application integration
 
What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?What's new and noteworthy in Java EE 8?
What's new and noteworthy in Java EE 8?
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
 
Commencer avec le TDD
Commencer avec le TDDCommencer avec le TDD
Commencer avec le TDD
 

Recently uploaded

HERO.pdf hero company working cap management project
HERO.pdf hero company working cap management projectHERO.pdf hero company working cap management project
HERO.pdf hero company working cap management project
SambalpurTokaSatyaji
 
Call India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.pptCall India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.ppt
Best International calling app on the market
 
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITYTEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
AaSs197122
 
Effective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedinEffective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedin
DivyaMehta193660
 
Risks & Business Risks Reduce - investment.pdf
Risks & Business Risks Reduce  - investment.pdfRisks & Business Risks Reduce  - investment.pdf
Risks & Business Risks Reduce - investment.pdf
Home
 
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
NETWAYS
 
calcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptxcalcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptx
Skmch
 
A study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD methodA study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD method
Dr. Afreen Nasir
 
the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2
Rashi427200
 
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
ankitamarik05
 
2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx
Dale Wells
 
Building Digital Products & Content Leadership
Building Digital Products & Content LeadershipBuilding Digital Products & Content Leadership
Building Digital Products & Content Leadership
Rajesh Math
 
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC WorkshopWorkshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
saastr
 
Pengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anakPengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anak
DeviDamayanti53
 
At the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentationAt the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentation
Vanda Pokecz
 
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
NETWAYS
 
Biography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdfBiography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdf
AbdulSadickZutah
 
Recruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitmentRecruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitment
Rashi427200
 
stackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jesterstackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jester
NETWAYS
 
Destyney Duhon personal brand exploration
Destyney Duhon personal brand explorationDestyney Duhon personal brand exploration
Destyney Duhon personal brand exploration
minxxmaree
 

Recently uploaded (20)

HERO.pdf hero company working cap management project
HERO.pdf hero company working cap management projectHERO.pdf hero company working cap management project
HERO.pdf hero company working cap management project
 
Call India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.pptCall India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.ppt
 
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITYTEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
 
Effective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedinEffective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedin
 
Risks & Business Risks Reduce - investment.pdf
Risks & Business Risks Reduce  - investment.pdfRisks & Business Risks Reduce  - investment.pdf
Risks & Business Risks Reduce - investment.pdf
 
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
 
calcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptxcalcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptx
 
A study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD methodA study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD method
 
the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2
 
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
 
2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx
 
Building Digital Products & Content Leadership
Building Digital Products & Content LeadershipBuilding Digital Products & Content Leadership
Building Digital Products & Content Leadership
 
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC WorkshopWorkshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
 
Pengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anakPengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anak
 
At the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentationAt the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentation
 
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
 
Biography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdfBiography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdf
 
Recruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitmentRecruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitment
 
stackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jesterstackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jester
 
Destyney Duhon personal brand exploration
Destyney Duhon personal brand explorationDestyney Duhon personal brand exploration
Destyney Duhon personal brand exploration
 

Hidden rocks in Oracle ADF

  • 5. public  class  VBoatImpl  extends  ViewObjectImpl  implements  VBoat  {       public  void  setupOfficeName(String  officeName)  {            En0tyDefImpl  boatEn0tyDef  =  getEn0tyDef(BOAT);                AQributeDefImpl  ad  =  (AQributeDefImpl)  boatEn0tyDef.findAQributeDef("RegisterOffice");                          ad.setDefaultValue(officeName);     }       5   Default  AQribute  Value.  Bad  Idea         Ø  Setup office name as default attribute value Ø  Invoke the VO method on task flow entry Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 6. <af:inputText    value="#{bindings.Length.inputValue}"                                                      visible="#{bindings.Length.hints.viewableOnInsert}"                                                      label="#{bindings.Length.hints.label}"                                                    …   6   Custom  AQribute  Proper0es         Ø  Define a custom entity attribute property Ø  Use the property in the JSF visible attribute as UI hint Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 7.    public  void  setBoatclass(String  value)  {              setAQributeInternal(BOATCLASS,  value);              setupViewableOnInsert(value);              }              private  void  setupViewableOnInsert(String  boatClass)  {              for  (int  aQr  :  SIZE_ATTRIBUTES)  {                  AQributeDefImpl  aQrDef  =                              (AQributeDefImpl)  getDefini0onObject().getAQributeDef(aQr);                  aQrDef.setProperty(VIEWABLE_ON_INSERT,  !SMALL.equals(boatClass));                  }              }       7   Custom  AQribute  Proper0es.  Bad  Idea           Ø  Update custom property value in the Boat Class setter Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 8. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   8   En0ty  Defini0on  Reef  
  • 9.   public  void  setupOfficeName(String  officeName)  {            Applica0onModule  am  =  getApplica0onModule();        am.getSession().getUserData().put("officeName",  officeName);   }       9   Default  AQribute  Value.  Good  Idea         Ø  Keep office name in a user session data map Ø  Use a Groovy expression in the Default Value Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 10.        @Override          protected  Object  getHistoryContextForAQribute(AQributeDefImpl  aQr)  {                  if  (aQr.getHistoryKind()  ==  AQributeDefImpl.HISTORY_CREATE_USER)  {                          return  getDBTransac0on().getSession().getUserData().get("officeName");                  }                    else  {                          return  super.getHistoryContextForAQribute(aQr);                                    }          }       10   Tracking  Change  History         Ø  Mark the attribute as ”Created By” history column Ø  Override getHistoryContextForAttribute in the EntityImpl Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 11. protected  En0tyAQrHintsImpl  createEn0tyAQrHints(AQributeDefImpl  aQrDef)  {                return  new  CustomEn0tyAQrHintsImpl(aQrDef,  this);                      }         public  class  CustomEn0tyAQrHintsImpl  extends  En0tyAQrHintsImpl  {            @Override          public  String  getHint(LocaleContext  locale,  String  sHintName)  {                  if  (VIEWABLE_ON_INSERT.equals(sHintName))  {                        String  boatClass  =  ((BoatImpl)  getEn0tyImpl()).getBoatclass();                        return  Boolean.toString(!SMALL.equals(boatClass));                  }                    return  super.getHint(locale,  sHintName);                        }           11   Custom  AQribute  Proper0es.  Good  Idea           Ø  Create a custom Entity Attribute Hints implementation class Ø  Override createEntityAttrHints in the EntityImpl Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 12.        @Override          public  void  resolveDefObject()  {                super.resolveDefObject();                setupViewableOnInsert();          }                private  void  setupViewableOnInsert()  {                  for  (String  aQr  :  SIZE_ATTRIBUTES)  {                      AQributeDefImpl  aQrDef  =    (AQributeDefImpl)  findAQributeDef(aQr);                                          aQrDef.setPropertyExpression(VIEWABLE_ON_INSERT,  "Boatclass  !=  '1'");                      }          }       12   Custom  AQribute  Proper0es.  Groovy  Expressions           Ø  Create a custom Entity Definition class Ø  Override resolveDefObject method Ø  Setup a Groovy expression with setPropertyExpression method Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 14. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   14   VO  based  View  Accessor  vs  En0ty  based  View  Accessor      
  • 15. 15   LOVs  in  a  Search  Form         Ø  Define a separate LOV for a search form Ø  Add a LOV-switcher attribute Ø  Use adf.isCriteriaRow expression to switch the LOVs JBO-­‐35111:  LOV  in  a  search  form  cannot  use  a  view  accessor  defined  on  an  En0ty.  Change   LOV_En0ty_BoaQype  to  use  a  view  accessor  defined  in  the  view  object       (adf.isCriteriaRow)  ?   "LOV_VO_BoaQype"  :   "LOV_En0ty_BoaQype”     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 16. 16   LOVs  in  a  Search  Form         SELECT  *   FROM  BOAT  Boat  WHERE  Boat.BoatClass  =  :boatClass                    public  String  getBoatClass()  {                return  someCalculatedBoatClass;      }     if    (adf.isCriteriaRow)              return  dataProvider.viewCriteria.viewObject.boatClass;         else      return  viewObject.boatClass;           JBO-­‐25077:  Name  boatClass  not  found  in  the  given   object:  oracle.adf.model.bean.DCDataVO.     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 17. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   17   Shared  VO  Instance      
  • 18. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   18   Session  Shared  AM  vs  Applica0on  Shared  AM      
  • 19. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   19   Row  Level  Binds      
  • 20. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   20   Master/Detail  Pirates  
  • 21. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   21   Master/Detail  Pirates   Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 22.   public  class  VBoatImpl  extends  ViewObjectImpl  {          protected  void  create()  {              super.create();              addListener(new  DetailRowSetsListener());          }           public  class  DetailRowSetsListener  implements  RowSetListener  {        @Override    public  void  navigated(Naviga0onEvent  event)  {          ViewObject  vo  =  (ViewObject)  event.getSource();          for  (RowSet  detail  :  vo.getDetailRowSets())  {              detail.closeRowSet();          }    }     22   Master/Detail  Pirates           Ø  Use separate VO instances for different use-cases Ø  Add RowSetListener to the master VO instance Ø  Reproduced only when AM pooling is enabled Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 23. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   23   Ac0va0on/Passiva0on  Vortex  
  • 24. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   24   Ac0va0on/Passiva0on  Vortex  
  • 25. 25   Ac0va0on/Passiva0on  Vortex           Ø  Retain View Link Accessor Rowset Ø  Passivated transient VO attributes Ø  Dynamic VO attributes Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 26. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   26   Ac0va0on/Passiva0on  Vortex  
  • 27. 27   Ac0va0on/Passiva0on  Vortex           Ø  Retain View Link Accessor Rowset Ø  Passivated transient VO attributes Ø  Dynamic VO attributes Ø  Close VO row set when it is not needed anymore       public  void  flowFinalizer()  {                  BindingContext  bc  =  BindingContext.getCurrent();            Applica0onModule  am  =  bc.findDataControl("SampleModelServiceDataControl").getApplica0onModule();            ViewObject  vo  =  am.findViewObject("VBoat");                      vo.closeRowSet();                }       Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 28. 28   Enabling  AM  Pooling  Programma0cally           Ø  Create custom ApplicationPool implementation class Ø  Specify PoolClassName in the AM Configuration Ø  Override isAMPoolingEnabled method public  class  CustomApplica0onPoolImpl  extends  Applica0onPoolImpl  {            @Override          public  boolean  isAMPoolingEnabled()  {                  return  getYourOwnAMPoolingEnabled();          }              …   Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 29. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   29   Associa0on  Consistency  Piyall  
  • 30. 30   Separate  View  Objects  for  Different  Use-­‐Cases           Ø  Different sets of attributes Ø  Different View Links, View Accessors, LOVs, View Crierias, etc. Ø  Different attributes UI hints Ø  Different SQL execution tuning options VSailorBrowse VSailorInsert Sailor Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 31. 31   Associa0on  (View  Link)  Consistency         Ø  View Objects are based on the same entity Ø  Only one primary entity usage Ø  All secondary entity usages are references VSailorBrowse VSailorInsert Sailor Entity Cache Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 32. 32   Associa0on  Consistency  Piyall         Ø  New row should fit with memory filter Ø  rowQualifies()     Ø  RowMatch   Ø  Disabled when Where Clause is applied at runtime Ø  Use setAssociationConsistent(true) to enable  protected  void  executeQueryForCollec0on(Object  qc,  Object[]  params,  int  noUserParams)  {                super.executeQueryForCollec0on(qc,  params,  noUserParams);                setAssocia0onConsistent(true);              }         Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 33. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   33   View  Criteria  Rocks  
  • 34. 34   Controlling  VC  items  UI  hints         Ø  Declarative approach for basic UI hints Ø  Label,  Tool0p,  Display  Width,  Format,  etc.     Ø  Override getCriteriaItemAttributeHints in ViewObjectImpl class      @Override          public  AQributeHints  getCriteriaItemAQributeHints(ViewCriteriaItem  vci)  {                  if  (vci.getAQributeDef().getName().equals("Boat"))  {                            if  (getPredefinedBoat()  !=  null)  {                                  vci.setProperty(ViewCriteriaItem.RENDERED_MODE,                                                                  ViewCriteriaItem.CRITERIA_RENDERED_MODE_NEVER);                          }  else  {                                  vci.setProperty(ViewCriteriaItem.RENDERED_MODE,                                                                  ViewCriteriaItem.CRITERIA_RENDERED_MODE_BOTH);                          }                  }                  return  super.getCriteriaItemAQributeHints(vci);          }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 35. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   35   Managed  Bean  Scope  Gorgon  
  • 36. 36   UI  Component  Binding  Challenge         Ø  UI components are not serializable Ø  High  Availability  mode   Ø  ADF  Controller  save  points   Ø  Transient variable is not an option Ø  UI component tree should not be hard referenced    <af:table  value="#{bindings.VBoat.collec0onModel}"  var="row"                                      binding="#{BrowseBean.table}"                      private  RichTable  table;            public  RichTable  getTable()  {                  return  table;                          }            public  void  setTable(RichTable  table)  {                  this.table  =  table;          }       Request or Backing Bean Scope! Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 37. 37   UI  Component  Binding  Example                                                                                      binding="#{BrowseBean.table}"     headerText="#{BrowseBean.searchTitle}"                  public  class  BrowseBoats  {                      private  RichTable  table;                        public  String  getSearchTitle()  {                              return  "Search  boats";                      }                                                                                  binding="#{BrowseBean.table}”     headerText="#{BrowseBean.searchTitle}"                    public  class  BrowseSailors  {                        private  RichTable  table;                          public  String  getSearchTitle()  {                                return  "Search  sailors";                        }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 38. 38   Request  Scope  Managed  Beans         Ø  One instance of the bean within request            public  class  BrowseSailors  {                      private  RichTable  table;                        public  String  getSearchTitle()  {                              return  "Search  sailors";                      }                  public  class  BrowseBoats  {                        private  RichTable  table;                          public  String  getSearchTitle()  {                                return  "Search  boats";                        }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 39. 39   Backing  Bean  Scope  Managed  Beans         Ø  One instance of the bean per region within request            public  class  BrowseSailors  {                      private  RichTable  table;                                          public  String  getSearchTitle()  {                              return  "Search  sailors";                      }                    public  class  BrowseBoats  {                        private  RichTable  table;                          public  String  getSearchTitle()  {                                return  "Search  boats";                        }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 40. 40   Backing  Bean  Scope  Managed  Beans         Ø  One instance of the bean per region within request            public  class  BrowseBoats  {                      private  RichTable  table;                        public  String  getSearchTitle()  {                              return  "Search  boats";                      }                  public  class  BrowseSailors  {                        private  RichTable  table;                          public  String  getSearchTitle()  {                                return  "Search  sailors";                        }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 41. 41   View  Scope  Managed  Beans         Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 42. 42   UI  Component  Reference         Ø  Use ComponentReference to hold the UI component reference Ø  Serializable     Ø  Avoids  hard  references  to  UI  components   Ø  Good enough for any memory scope public  class  BrowseSailors  {          private  ComponentReference  tableReference;                    public  void  setTable(RichTable  table)  {                tableReference  =                              ComponentReference.newUIComponentReference(table);          }            public  RichTable  getTable()  {                return  (tableReference  ==  null  ?  null  :  (RichTable)  tableReference.getComponent());                          }       Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 43. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   43   Excep0on  Handling  Stone  
  • 44. 44   Controller  Excep0on  Handler         Ø  Mark a task flow activity as an Exception Handler Ø  Handle exceptions related to the task flow navigation Ø  Method  Call,  Router,  Task  Flow  Call,    Ini0alizer,  Finalizer,  etc.     Ø  Not  a  View  Ac0vity    public  void  excep0onHandler()  {                  ControllerContext  context  =  ControllerContext.getInstance();                  ViewPortContext  currentRootViewPort  =  context.getCurrentViewPort();                    if  (currentRootViewPort.isExcep0onPresent())  {                          Excep0on  ex  =  currentRootViewPort.getExcep0onData();                          FacesContext  fc  =  FacesContext.getCurrentInstance();                          FacesMessage  facesMessage  =                                  new  FacesMessage(FacesMessage.SEVERITY_ERROR,  ex.getMessage(),                                                                    null);                          fc.addMessage(null,  facesMessage);                          fc.renderResponse();                  }          }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 45. 45   Nested  Task  Flow  Call         Sailors Task Flow Create Sailor Task Flow Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 46. 46   Must  Have  Excep0on  Handler         Ø  Pop the task flow from the stack if there is no Exception Handler Ø  Repeat until Exception Handler is located Task Flow 0 Task Flow 1 No Exception HandlerTask Flow 2 No Exception HandlerTask Flow 3 TaskFlowStack Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 48. 48   Immediate  aQribute         Ø  Validation and ValueChangeEvent at Apply Request Values phase Ø  The Lifecycle does not stop Ø  The rest of phases are not skipped  <af:inputText  value="#{bindings.Lengthh.inputValue}"                                                      visible="#{bindings.Lengthh.hints.viewableOnInsert}"                                                      par0alTriggers="socBoatClass"                <af:selectOneChoice  value="#{bindings.Boatclass.inputValue}"                                                                                autoSubmit="true"  immediate="true"                                                                                id="socBoatClass”       public  void  valueChangeListenerBoatClass(ValueChangeEvent  valueChangeEvent)  {                  UIComponent  c  =  valueChangeEvent.getComponent();                      c.processUpdates(FacesContext.getCurrentInstance());                      FacesContext.getCurrentInstance().renderResponse();                                      }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 49. 49   Programma0cally  Refreshing  Components         Ø  Dependent components don’t participate in the request Ø  Add components as partial targets to the AdfFacesContext  <af:inputText  value="#{bindings.Lengthh.inputValue}"  id="itLength"                                                      visible="#{bindings.Lengthh.hints.viewableOnInsert}"                                                          <af:outputText  value="(meters)"  id="otLength"                                                            visible="#{bindings.Lengthh.hints.viewableOnInsert}”                                                                      public  void  valueChangeListenerBoatClass(ValueChangeEvent  valueChangeEvent)  {            UIComponent  c  =    JsfU0ls.findComponentInRoot("itLength");            AdfFacesContext.getCurrentInstance().addPar0alTarget(c);                c  =    JsfU0ls.findComponentInRoot("otLength");            AdfFacesContext.getCurrentInstance().addPar0alTarget(c);              …          }     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 50. 50   ClientComponent  aQribute         <af:outputText  value="(meters)"  id="otLength”                                    HTML:  <span  id="pt1:dyntdc:reg:1:pt1:otLength”>                                                                            clientComponent=”true"                                                                                                  (meters)                                                                                                                                                                                                                                                                                                            </span>   document.getElementById("otLength")  =  HTMLSpanElement   AdfPage.PAGE.findComponent("otLength")  =  AdfRichOutputText       <af:outputText  value="(meters)"  id="otLength”                                    HTML:  <span  id="pt1:dyntdc:reg:1:pt1:otLength”>                                                                            par0alTriggers="socBoatClass"                                                                            (meters)                                                                                                                                                                                                                                                                                                            </span>   document.getElementById("otLength")  =  HTMLSpanElement   AdfPage.PAGE.findComponent("otLength")  =  undefined      <af:outputText  value="(meters)"  id="otLength”                                                                    HTML:    (meters)       document.getElementById("otLength")  =  undefined   AdfPage.PAGE.findComponent("otLength")  =  undefined     <no  PPR-­‐capable  ID  found  for  elements  of:  RichOutputText[UIXFacesBeanImpl,  id=otLength]>     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 51. 51   SelectBooleanCheckBox  example                   <af:switcher  facetName="#{SessionInfo.regaQaUpdatable  ?  'regaQaUpdatable'  :  'regaQaReadOnly'}">              <f:facet  name="regaQaUpdatable">                        <af:selectBooleanCheckbox  value="#{bindings.InregaQa.inputValue}"                                                                                                                            disabled="#{empty  bindings.Manufdate.inputValue}"                                                                                                                            par0alTriggers="idManufDate"                                                                                                                            …/>                        …              </f:facet>            <f:facet  name="regaQaReadOnly">                        <af:outputText  value="#{bindings.InRegaQaName.inputValue}"                                                                                …/>                          …            </f:facet>      </af:switcher>                                                 Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 52. 52   SelectBooleanCheckBox  piyall         Ø  Invisible partially triggered components participate in the request Ø  getSubmittedValue() never returns null for selection components    if  (component.isRendered()  &&  component.getSubmiQedValue()  !=  null)  {                        processComponent(component);            }  else  {                    skipComponent(component);          }        <af:switcher  facetName="#{SessionInfo.regaQaUpdatable  ?  'regaQaUpdatable'  :  'regaQaReadOnly'}">              <f:facet  name="regaQaUpdatable">                        <af:selectBooleanCheckbox  value="#{bindings.InregaQa.inputValue}"                                                                                                                            disabled="#{empty  bindings.Manufdate.inputValue}"                                                                                                                            par0alTriggers="idManufDate"                                                                                                                              …/>                  …   rendered="#{SessionInfo.regaQaUpdatable}"       Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 53. 53   Automa0c  par0al  page  rendering  (Auto-­‐ppr)              <iterator  Binds="VBoat"  RangeSize="25"                                      DataControl="SampleModelServiceDataControl"                                      id="VBoatIterator"                                      ChangeEventPolicy="ppr"  />       Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 54. 54   Target  Tag  (JDeveloper  12c)         Ø  Useful to skip validation while PPR execution Ø  Available in ADF 12c <af:selectOneChoice  value="#{bindings.Boatclass.inputValue}"                                                                                …>                <af:target  execute="@this"  render="it1  it2  it3"/>   </af:selectOneChoice>     <af:inputText  value="#{bindings.Lengthh.inputValue}”                                                    visible="#{bindings.Lengthh.hints.viewableOnInsert}"                                                    id=”it1”  required=”true”     <af:inputText  value="#{bindings.Width.inputValue}”                                                    visible="#{bindings.Width.hints.viewableOnInsert}”                                                    id=”it2”  required=”true”             <af:inputText  value="#{bindings.Capacity.inputValue}”                                                    visible="#{bindings.Capacity.hints.viewableOnInsert}”                                                    id=”it3”  required=”true”                 Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 55. 55   ValidateDateTimeRange  validator            <af:inputDate  value="#{bindings.RegaQastartdate.inputValue}"                                                        …/>          <af:inputDate  value="#{bindings.RegaQafinishdate.inputValue}"                                                        …/>            <af:inputDate  value="#{bindings.Firstracedate.inputValue}"                                                        …>              <af:validateDateTimeRange  minimum="#{bindings.RegaQastartdate.inputValue.value}"                                                                                                                      maximum="#{bindings.RegaQafinishdate.inputValue.value}"/>    </af:inputDate>     Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 56. 56   ValidateDateTimeRange  piyall         Ø  Maximum = 5/30/2014 23:59:59.999 <af:validateDateTimeRange  minimum="#{bindings.RegaQastartdate.inputValue.value}"                                                                                                            maximum="#{bindings.LimitRegaQaFinishDate.inputValue.value}"/>       Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com  
  • 57. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   57   Ques0ons  &  Answers