Oracle ADF Real World Developer’s Guide is Published!!!

I am pleased to announce the release of my book on ADF - Oracle ADF Real World Developer’s Guide. Yes, it is available in your local book stores now !

Book Details :
Paperback : 590 pages [ 235mm x 191mm ]
Release Date : October 2012
ISBN : 1849684820
ISBN 13 : 9781849684828
Author(s) : Jobinesh Purushothaman
Topics and Technologies : All Books, Enterprise, Oracle 

Oracle ADF Real World Developer’s Guide This book is designed to take programmers beyond visual and declarative programming model and enable them  to customize the framework features to meet the real world application development challenges. Many of the framework features are discussed along with real-life use cases and code samples which will definitely help developers to design and develop successful enterprise applications.

To learn more, visit http://www.packtpub.com/oracle-application-development-framework-real-world-developers-guide/book.



Book Reviews...


Contents Covered in this Book

To know the contents covered in this book, follow the packtpub link for this book and click on Table of Contents.

If you are buying this book, please make sure you read the following chapters as well (which are not included in the printed version of the book). You can access these chapter on-line if you buy the printed/pdf/eBook copy of the book. These chapters contain a lot of  interesting things and tips which you may find very useful to understand the internals of the framework.
Sample Chapters

To get a feel of the content, a sample chapter is made available for public. To access it click on packtpub link for this book, and select Sample Chapter tab.

If you are in India, see this link as well - Oracle ADF Real World Developer’s Guide is now available in India 

Let me know your thoughts and comments which will definitely help me to improve my next work :)

Comments

Zeeshan Baig said…
Great achievement ... will definitely check it

Zeeshan
vinay20 said…
Great job Jobinesh... I will check it
Congrats Jobinesh... Great Work.
Shree. said…
I bought the eBook and it is very nicely presented. Great job on that.

For some reason I'm not able to get to the online chapters. Looks like these links are not working even after I signed into my account where I downloaded the eBook.

http://www.packtpub.com/sites/default/files/downloads/4828EN_Chapter13_Building_Business Services_with_EJB.pdf.
Jobinesh said…
The first link is broken. The rest should work. If you don't see this working please contact the publisher.
btw, I've updated publisher on the broken link(for chapter 13).
Shree said…
Thanks for your quick response.
Thanks Jobinesh for that great book!
I'm still waiting for the ordered paper based, so in a meantime the pdf + ipad should be enough :-)
Jobinesh said…
Thank you Christophe Paoutoff for your comments.
Ranjith said…
Great work Jobinesh ..... like all your blogs, book also seems to be very much interesting .
I went through the pdf, securing ADF applications, that was really interesting...


Ranjith
Hasim said…
The content of this book shows the hard work and devotion of jobinesh that he did not missed a single important topic of this framework with lot of unknown
mysteries solved which was bewildering many developers of all levels.This is first time I am so excited to read ADF book with so much of interest even though I possess half a decade ADF , Web Center , UCM experience -
Hasim(hasamali blogspot)
Andreas Koop said…
Congrats and Big Thank You for that valuable ADF Resource. Enjoying all the deep insights into the framework especially by great diagrams!

Thanks,
Andreas Koop
cpierres said…
Jobinesh,

I was already impressed by the quality of Frank Nimphius and Lynn Munsinger's book but yours is incredible too ! (the two best on ADF in my opinion)
Congratulations for the clarity and all these valuable informations (uml diagrams and so on).
It's a great pleasure to read such excellent books.

Would you mind if I put a question about the last point of page 536 :
"You should not use transient member variables in a managed bean with a scope higher than the request, to hold UI component reference. This hard reference will prevent the UI component tree from being cleaned up."
I’m not sure to understand. Actually, I use Jheadstart especially in runtime mode ; And I noticed that, in generated application, a TableBean was by default in pageFlowScope with a transient member on RichTable. Is it a correct practice or not ?
I'm going to ask to JHeadstart team for this doubt...
Thanks you very much for this book,

Christophe,
Jobinesh said…
Thanks Christophe for your comments.
To answer the query, ideally its always recommended to use ComponentReference wrapper to hold UI component ref in managed bean. However holding UI component is less dangerous if the beans scope is request and the same is not re-used in target view(if the view transition happens during a request). Note that hard reference to UI comp will be released when the holding comp goes out of life, which may happen when you exit from a task flow. If that's the case, you may not face much issue, Still better avoid such use if you are coding from scratch.
cpierres said…
Thanks Jobinesh for your answer,

So I post a thread on JHeadstart forum :
https://forums.oracle.com/forums/thread.jspa?messageID=10688019#10688019

Steve told me that you may exchange about this subject.

Thanks you very much,

Your book help me a lot, especially about cluster application server matters !
rami said…
Hi,

The book is very good to understand and very well explained in simple terms.

Thanks of this great book!
W!nkle4u said…
I have attended training's and watched online videos to understand the ADF internal framework, but none of them explained me in such a detail. Your book did and it looks amazing to me.

Thanks a ton!
cpierres said…
Hello Jobinesh,
I'm trying to use your samples (associated with your excellent book) in chapter 5 (add dynamically a new entity attribute and then add it to a viewObject based on this entity).

Here is an excerpt of this sample :
/**
* An example to illistrae dynamic attribute defintion
* This example adds LocationId to a Dept EO and VO
*/
public void addExtraAttributeToDept() {
//Add sttribute to entity first and if it reurn true
//add it to view object
if (addLocAttributeToDeptEntity()) {
addLocAttributeToDeptView();
}
}

but it doesn't work for me.
PDef objects seem to be ok but when I open the VO, ADF can't read the new attribute in the VO.

You haven't a concrete using of this example...
When could you call this routine ? (after findViewObject ?)

It's a very good feature and I'd like to use it :-)

Thanks you,
Christophe
Jobinesh said…
Christophe
Can you please the example given in 'Appendix' folder. Its an end to end example.
cpierres said…
Hello Jobinesh,

I confirm that I used this Appendix and the sample file "4828EN_Code" / chapter_5 (downloaded from http://www.packtpub.com/oracle-application-development-framework-real-world-developers-guide/book)
The sample I speak about is taken from your sample files.

My interest is especially about PDefEntityObject. The sample "addExtraAttribute" is not used in any client application.
The other samples about dynamically objects work fine but not the sample "addExtraAttribute".
I've read "Personalized business components" (p. 215-217) and "Appendix, More on ADF Business Components and Fusion Page Runtime".

So I try to call your "addExtraAttribute" from a findViewObject and then I created a jsf page for calling this dynamically modified viewObject (based on an existing entity dynamically modified too).
and it doesn't work.

Could you please check your own sample, precisely about "addExtraAttribute" sample ?

Unfortunately nobody speak about PDefEntityObject on JDev forum ! It's a great and powerfull subject.

Thanks you
Christophe
Jobinesh said…
Christophe,
My bad, I didn't check the sample before replying to your post. I uploaded a modified sample which uses 'addLocAttributeToDeptView' as an intermediate activity in the task flow to alter existing pDef EO and VO. https://adf-samples.googlecode.com/files/ADFDevGuideAppendixSamples.zip

I'll post some sample to dynamically modify currently displayed UI with pDef objects sometime later(look like binding container needs to be refreshed/cleared in between to make this use case to work).
cpierres said…
Thanks you very much for this modified sample.

Could I ask an other linked question (perhaps do you prefer I post it on JDev forum ?)

The ideal solution would be to make the work of modifying the structure entirely on Model project rather than viewController ; but effectively when I try to open ApplicationModule as usual from Model project, I get this error :

(oracle.jbo.ConfigException) JBO-33001: Configuration file /tester.xcfg is not found in the classpath.

with this error stack :
Apr 24, 2013 7:03:20 PM oracle.adf.share.config.ADFMDSConfig createMDSInstanceFromelement
SEVERE: MDS Configuration Exception encountered in parse ADF ConfigurationMDS-01335: namespace "/sessiondef" mapped to metadata-store-usage "mdsRepos" but its definition was not found in MDS configuration.
oracle.mds.config.MDSConfigurationException: MDS-01335: namespace "/sessiondef" mapped to metadata-store-usage "mdsRepos" but its definition was not found in MDS configuration.
at oracle.mds.config.PConfig.populateNamespaceConfigList(PConfig.java:803)
at oracle.mds.config.PConfig.loadFromBean(PConfig.java:709)
at oracle.mds.config.PConfig.(PConfig.java:496)
at oracle.mds.config.MDSConfig.loadFromBean(MDSConfig.java:706)
at oracle.mds.config.MDSConfig.loadFromElement(MDSConfig.java:768)
at oracle.mds.config.MDSConfig.(MDSConfig.java:419)
at oracle.mds.core.MDSInstance.getMDSConfigFromDocument(MDSInstance.java:2084)
at oracle.mds.core.MDSInstance.createMDSInstanceWithCustomizedConfig(MDSInstance.java:1204)
at oracle.mds.core.MDSInstance.getOrCreateInstance(MDSInstance.java:593)
at oracle.adf.share.config.ADFMDSConfig.createMDSInstanceFromelement(ADFMDSConfig.java:245)
at oracle.adf.share.config.MDSConfigFactory.createApplication(MDSConfigFactory.java:127)
at oracle.adf.share.config.ADFConfigFactory.findOrCreateADFConfig(ADFConfigFactory.java:158)
at oracle.adf.share.config.ADFConfigFactory.findOrCreateADFConfig(ADFConfigFactory.java:86)
at oracle.adf.share.config.ADFConfigFactory.findOrCreateADFConfig(ADFConfigFactory.java:64)
at oracle.adf.share.ADFContext.getADFConfigEx(ADFContext.java:963)
at oracle.adf.share.ADFContext.getADFConfig(ADFContext.java:810)
at oracle.adf.share.config.ADFContextMDSConfigHelperImpl.createMDSSession(ADFContextMDSConfigHelperImpl.java:50)
at oracle.adf.share.ADFContext.getMDSSessionAsObject(ADFContext.java:1806)
at oracle.adf.share.jndi.MDSBackingStore.getMDSSession(MDSBackingStore.java:347)
at oracle.adf.share.jndi.MDSBackingStore.isReadOnlyMDSStore(MDSBackingStore.java:167)
at oracle.adf.share.jndi.MDSBackingStore.(MDSBackingStore.java:127)
at oracle.jbo.client.Configuration.loadFromClassPath(Configuration.java:446)
at oracle.jbo.jbotester.MainFrame.loadConfiguration(MainFrame.java:637)
at oracle.jbo.jbotester.MainFrame.processArgs(MainFrame.java:612)
at oracle.jbo.jbotester.MainFrame.main(MainFrame.java:446)
Apr 24, 2013 7:03:20 PM oracle.adf.share.config.MDSConfigFactory createApplication

and so on ...


Can't we anymore use ApplicationModule tester when MDS is required ?

So I understand why you are driven to launch these methods from ViewController.


I'm very curious to see your next sample about the ability to modify entityDef directly from the page.

Thanks you very much,
Christophe
cpierres said…
Hello Jobinesh,

I try your sample and it works fine.
In your case, you dynamically build from scratch an Entity and a ViewObject on it.
Then, in a new call-method (PersDef demo), you dynamically add a new attribute in this ViewObject.

My use case is slightly different and I can't explain why it doesn't work !
I apply exactly the same recipes as you. The only difference in my case is that my entity and my VO already exist (not build from scratch).
Could I send you my simple test case ?
I look also in Metalink knowledgeBase but there are no messages on this subject.
You are my only one source of information about this subject !
Thans you,
Christophe,



Anonymous said…
Hi Jobinesh,

I bought the book and started capturing the things which you explained well.

It's very helpful for me to learn this technology.

Could you please check the sample you provided for Chapter 10(ADFDevGuideCh10).
The 'emp-detail-task-flow-definition' and 'emp-summary-task-flow-definition' giving error.
Sample you provided for passing parameter in task flow through parameter map not working.

Actually I want learn how to pass parameter through parameter map in task flow showing as a dynamic region.

It will very helpful for me you provide me the error free sample for chapter 10(ADFDevGuideCh10 sample).

Thanks in advance

Thanks for pointing it out. In fact the sample had some version issues in jws and jpr files. Corrected them manully and tested on 11.1.2.4. Please see the updated one here https://adf-samples.googlecode.com/files/ADFDevGuideCh10.zip

If you still face the same issue, drop me an email with exact steps to reproduce the issue
Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! Its always nice when you can not only be informed, but also entertained! Im sure you had fun writing this article.
Valuable information and excellent design you got here! I would like to thank you for sharing your thoughts and time into the stuff you post!!
http://www.sqlservermasters.com/
cpierres said…
Thanks you very much for your answer.

PDef API is powerful for Business components. However, as this layer is originally targeted for viewController, the big problem is that you must start viewController for testing ApplicationModule.
This is a shame because you can't anymore use Application Module tester alone.
Do you agree ?
Thanks a lot,
Christophe,

Christophe,
This post is for you: http://www.jobinesh.com/2013/07/mds-setting-for-testing-pdef-business.html
cpierres said…
Jobinesh,

You are a great man (my master) ... It's working ! and you've written the solution for me ;-) thanks you so much !

I'm very closed to the whole solution now. My goal is to allow the customization of an application by adding new fields (driven by tables) - without redeploying - gracefully to MDS.

I have two other steps to do now :
1/ adding corresponding bindings of the new fields dynamically (in pageDef)
2/ adding input components with MDS (I can do this step)

For the step 1/, I can't use the usual technique targeted to Dynamic Table as this link suggest :
https://blogs.oracle.com/groundside/entry/towards_ultra_reusability_for_adf


I can't use this technique because I have a normal table and normal form (not dynamic). Given that the existing jsff are built statically,
I plan to add new fields by MDS.

For the step 1, do you think that this technique is better for me :
http://adfpractice-fedor.blogspot.fr/2013/02/dynamic-tree-binding-definition.html

Do you think I'm on the good way and my goal is realistic ?

Thanks you very much,
Christophe,
PS : I know well India ; I spent 3x1 month for holidays in India.



john bill said…
well appreciated keep it up, see oracle groups about the business management consultants.
Raushan Yadav said…
Since they are sought for their knowing and skills, individuals like to look for the solutions of them whenever they need.

Packers and Movers in Hyderabad
Packers and Movers in Mumbai
Packers and Movers in Pune
Raushan Yadav said…
Before choosing, we can get sample estimates of top10 shifting organizations and depending on this, we can able to assess their trust worthiness and balance to choose the best of them

Packers and Movers in Chennai
Packers and Movers in Bangalore
Packers and Movers in Delhi
Gurgaon Packers and Movers
mehak kashish said…
really good piece of information, I had come to know about your site from my friend shubodh, kolkatta,i have read atleast nine posts of yours by now, and let me tell you, your site gives the best and the most interesting information. This is just the kind of information that i had been looking for, i'm already your rss reader now and i would regularly watch out for the new posts, once again hats off to you! Thanks a lot once again, Regards, obiee training in hyderabad

Disclaimer

The views expressed on this blog are my own and do not necessarily reflect the views of my employer.