ADF Mobile : Data Services Java Beans Ma Ping ping.ma@oracle.com
Overview Topics covered in this lesson include: Roadmap and Best Practices Data Services Overview Data Objects and CRUD Objects Data Relationships Definition Data Change Events Bean Data Controls and Exposing Data to UI
Roadmap for Defining Java Bean Data Services Identify Application Data Requirement Data Objects Data Relationship CRUD (Create/Read/Update/Delete) Operations Requirement Implement Java Beans (POJOs) to support Data Objects and CRUD operations Expose Java Beans as Bean Data Controls Bean Data Controls can then be used to construct the user interface
Best Practices for Data Services and Application Development Always understand data processing requirement before implementing Data Services Start with implementing Java Beans that implement Data Objects and support CRUD operations Populate the Data Objects initially with local/stub data specified within the Java Beans So that client application can be developed in parallel with server-side logic Test and enhance ADF Mobile application iteratively using stub data
ADF Mobile Data Services Overview Device Native Container HTML5 & JavaScript ADF Mobile AMX View ADF Controller Local HTML Web View SOAP Web Services Java Beans Data Controls Local Data Java VM Mobile Device Server REST (XML w/ XSD) Services REST (JSON) Services
Beans and Data Controls Types Data Controls exposes Device Native Contaier data to User Interface: Bean Data Controls Web Services Data Controls URL Data Controls Java Beans Java Beans Data Controls Data Objects and CRUD Objects: contains core application logic to process data Java VM Managed Beans: Invoked by user interface/amx page to perform UI related functions This lesson focuses on Bean Data Control, Data Objects, and CRUD Objects
Embedded Java Virtual Machine ADF Mobile container embeds a light-weight, headless Java Virtual Machine Headless = no UI library as ADF Mobile leverages HTML5- based UI Based on Java version 1.4 No generics support such as typed collections like set<string> No annotation support Additional links/documentation on JVM: 1. CDC API comparison chart: http://www.oracle.com/technetwork/java/cdc-packages-150013.pdf (See especially column for "FP 1.1 JSR 219" which is the same as the ADF Mobile s embedded JVM) 2. Javadoc of APIs in CDC/Foundation Profile Libraries: http://docs.oracle.com/javame/config/cdc/ref-impl/fp1.1.2/jsr219/index.html
Java Bean Data Services Two types of POJOs need to be developed to process data: Data Objects: Represents a Data Object (e.g. Employees) Define attributes and types for each data object Contain getter/setter for the attributes Represent data object hierarchical relationships CRUD Objects: Instantiate and populates Data Objects Support CRUD (Create/Read/Update/Delete) operations Access web services or local database Expose data access methods to UI via Bean Data Control
Data Objects Definition Typically one Java class per data object Steps to create data object to hold data Create a Java Class Declare and initialize data attributes as variables Generate Accessors through context menu Check Notify Listener when Property Changes to add data change listeners to propagate changes to UI This adds propertychangesupport APIs to all the SET, ADD, and REMOVE methods in the Data Object Propagate attribute value changes to the user interface
CRUD Objects Definition Expose methods for CRUD operations Data may reside in CRUD object itself, flat files, local database, and/or web services Instantiate and populate one or more Data Objects May contain additional Property and Provider Data change notification logic
Steps to Create CRUD Objects Declare one or more collections to hold data within the CRUD Object In the Constructor, Instantiate the list variable (for example as ArrayList) Invoke data population logic here if you wish to load data whenever the CRUD Object is instantiated In the GET or data retrieval method Convert the ArrayList into an Array of Data Objects and return data
Steps to Create CRUD Objects Implement additional methods to retrieve or update data For example, a READ method that calls a web services to retrieve a list of employees from a department Another example, a UPDATE method that updates a field in the local SQLite DB Add providerchangesupport calls as needed Similar syntax as propertychangesupport calls in the Data Objects Stocktracker sample app contains examples of this call Implement any additional methods For example, returning employee count, etc.
Define Data Object Relationships Define data relationships by creating multiple layers of Data and CRUD Objects For example, in the simple HR example: A department ( Parent data object) contains several employees ( Child data object) Employees: Data Object for Employees Departments: Data Object for Departments EmployeeList: CRUD Object that returns a list of employees DepartmentList: CRUD Object that returns departments and employees
Department CRUD Objects Declare a list for Department and declare/instantiate the EmployeeList CRUD Objects public class DepartmentList { private static List s_departments = null; private static EmployeeList s_employees = new EmployeeList(); QLite database EmployeeList may be populated on instantiation if data is populated in the constructor, or add a method that invokes EmployeeList s GET Method to populate data
Department CRUD Objects Implement additional methods to retrieve data for example get employees by department ID public Employee[] getemployeesbydept(int deptid) { ArrayList reports = new ArrayList(); } Employee[] emps = s_employees.getemployees(); for (int x = 0; x < emps.length; x++) { Employee e = emps[x]; if (e.getdeptid() == deptid) { reports.add(e); } } Note the code that converts ArrayList to Array return (Employee[])reports.toArray(new Employee[reports.size()]);
ArrayList & Array of Data Objects Use ArrayList to hold data when populating and processing data Much more flexible than an Array[ ] as array size is fixed during creation and data needs to be assigned to a specific location (array[1]) Supports methods like (add/remove/contains/size/get) that allows data to be easily processed/searched/etc. Convert ArrayList to Array of Data Object when returning data Data needs to be returned as an Array of Data Objects, as required by ADF Mobile internals
Propagate Data Change Events to User Interface When data is changed in Java, you must fire a data change event listener to propagate changes to bindings and user interface Methods are automatically generated when checking Notify Listener When Property Changes when generating accessors for the POJOs Additional calls are also needed whenever data change event needs to be propagated
Different Data Change Events and Corresponding Listeners PropertyChangeListener: Invoke to propagate an attribute value change Supports firepropertychange, firepropertydelete, and firepropertycreate propertychangesupport.firepropertychange( firstname", oldfirstname, newfirstname); ProviderChangeListener: Invoke to propagate changes in a data collection/object Supports fireproviderchange, fireproviderrefresh, fireproviderdelete, and fireprovidercreate propertychangesupport.firepropertycreate( perso ns", personid, persondataobject);
Exposing POJOs to User Interface Right (Ctrl) Click on the CRUD Data Object Create Bean Data Control Modify datacontrols.dcx for data control attributes, hints, validation rules, etc.
Modify Data Control Details 1. Modify the DataControls.dcx file Attribute tab only 2. Set Default Value, Key (to support any Key operation), UI Hints, and Validation Rules (Compare, Length, List, and Range only)
Use Data Controls on Page Data Controls have been created Drag and Drop onto page, just like with Web Based ADF Modify as needed
Summary Topics we covered in this lesson were: Roadmap and Best Practices Data Services Overview Data Objects and CRUD Objects Data Relationships Definition Data Change Events Bean Data Controls and Exposing Data to UI <Insert Picture Here>
Learn More Oracle.com/technology/jdev Download Tutorials Discussion forum Samples ADF Developer Guide More <Insert Picture Here>