Skip to main content

Me and my ADF

--Just a random set of opinions read no further if you are looking for technical info.

Ok so I have been working with ADF for 8 months now (have worked with SOA suite before) and here are a couple of rants and findings:

Development speed etc:
  • The initial learning curve in VERY steep.
  • Get help - we had an adf expert help us out - invaluable.
  • Get the adf source code - it will help you.
  • Like any framework you need to write a bit of framework extension code
  • It is NOT just drag and drop dev if you want anything custom.
  • Try to get things right from the start or you will end up redoing a lot and it is not very "refactoring" friendly.
  • Forms devs will have to get a LOT of training to use this. (they will have to learn java and ADF unless you run a sweat shop dev process)
  • Hire a very very compentant java dev before switching over from forms.
  • Having a lot of logic in pl\sql with this framework may not be a bad thing.
  • Try to do as little custom stuff as possible
  • Once you have a good set of patterns and framework in place dev speeds up CONSIDERABLEY (+- 6 months for a fresh team with no ADF experience)
Comparision with other frameworks:
Getting your forms team to learn java would be less of a learning curve unless you structure you teams very well.

I would love to have a project that uses EJB3 with ADF's (fabulous JSF components) jsf stuff. Not overly fond of BC right now.

At the moment I find the ADF framework more difficult to use than other JEE frameworks because of the size of it and it does a lot of stuff "for free" so it is difficult to debug if it goes wrong. (Note I have worked with the following (Maven, Maven2, Ant, glassfish, DB2, postgres, mysql, EJB3, EJB2, Hibernate, trinidad, myfaces, struts, jsp, IBM RAD, eclipse etc) so I am not speaking out of my ass)

Wish list:
  • Maven2 Intergration
  • Proper SVN and CI intergration
  • JDev startup times improved
  • JDev is crap so use eclispe (wishful thinking)
  • OJDeploy compile times
  • JDev (shortcuts are anti intuitive, Ctrl - across open projects, speed of rendering of Design view etc etc)
Final thoughs: ADF given time will mature into an awesome framework that will speed up dev time and allow developers to focus on solving business problems. It is not a silver bullet and the answer to all you problems though and takes time to learn.

Comments

Popular posts from this blog

OJDeploy: Documentation for the tool

Real DOCS:  http://docs.oracle.com/cd/E26098_01/user.1112/e17455/deploying_apps.htm#OJDUG645 OJDeploy Documentation if you run it from the command line - I keep looking for this so I though I would post it here so I remeber. Oracle JDeveloper Deploy 11.1.2.1.0.6081 Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. Usage:   ojdeploy -profile <name> -workspace <jws> [ -project <name> ] [ <options> ]   ojdeploy -buildfile <ojbuild.xml> [ <options> ]   ojdeploy -buildfileschema Arguments:   -profile               the name of the Profile to deploy   -workspace      full path to the JDeveloper Workspace file(.jws)   -project              name of the JDeveloper Project within the .jws where the Profile can be...

ADF sort of generic screen for tables with the same structure

We have a couple (about a hundred) of tables with the same structure (Code, Description, Create Date, Update Date). So I wanted to do something simple so that I did not have to create all these screens 1) EO   I created the EO based on one of the tables I had that had the above columns. I then Added a transient attribute called table name to my EO based on a groovy expression. (the expression needs to change as I am reading web tier stuff from the model layer but I will fix this later) I then generated a java class for my EO. And added the following overriden method to my newly created java class. protected StringBuffer buildDMLStatement(int i, AttributeDefImpl[] attributeDefImpl,   AttributeDefImpl[] attributeDefImpl2, AttributeDefImpl[] attributeDefImpl3, boolean b) {   StringBuffer statement = super.buildDMLStatement(   i, attributeDefImpl, attributeDefImpl2, attributeDefImpl3, b); return new StringBuffer(StringUtils.replace(statement.to...

Util code

public static MethodExpression getMethodExpression( String expr, Class returnType, Class[] argTypes){ FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); ExpressionFactory elFactory = fc.getApplication().getExpressionFactory(); return elFactory.createMethodExpression( elctx, expr, returnType, argTypes); } public static javax.faces.el.MethodBinding getMethodBinding( String expr, Class[] argTypes){ FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); return fc.getApplication().createMethodBinding(expr, argTypes); } SetPropertyListener listener = new SetPropertyListener( ActionEvent.class.getName()); listener.setFrom(link.getRoute()); listener.setValueExpression("to", JSFUtils.getValueExpression("#{pageFlowScope.route}", String.class)); action.addActionListener(listener); AdfFacesContext.getCurrentInstance().getPageFlowScope() .put("route", lin...