I know, I know, it has been months since I posted. Personal note: My life got a bit complicated in late February and early March, and then at the end of April, I started a new job. My work on Infra moved from being my main professional project to being a labor of love that I fit in whenever I can spare some energy from the projects that pay the bills. So, I'm going to write a few more thoughts on Infra here, and then I'll write a few posts on some items that came out of my current paid gig.
Application Implementation Considerations and
Options
With the database design done, engineered to a relational design
and some physical implementation scripts generated, my attention
turned to the front end implementation of INFRA.
Requirements
INFRA is intended to be available as an application that anyone
can install on just about any relational database and just about any
application infrastructure. And I don’t want cost to be a major
factor for anyone who wants to use it, so I want to look at free to
use frameworks and tools. I say “free to use” because I have
expertise in Oracle tools and frameworks, and while these are not
open source, there are several options that are free to use. Still,
many potential users of INFRA will prefer not to be locked into the
tools of a single vendor (and I’m afraid they are strongly biased
AGAINST Oracle), and thus will prefer open source.
As for requirements, I’d prefer to stick with standards and
especially do as much with plain HTML and CSS as possible. I also
want good tooling, and am very fond of having the tools do as much of
the work as possible. So I want a good IDE with good support for the
chosen framework. I have nothing against a good text editor to write
short programs where I am hand writing most of the code. For an
entire project, however, nothing beats a good IDE, and I have
experience with three, NetBeans, Eclipse and Oracle JDeveloper. So
here is a little about the choices I considered:
Oracle Application Development Framework (ADF)
ADF has been my professional choice since 2010, and I am still the
Lead Moderator for the ADF Enterprise Methodology Group (ADF EMG).
So despite the bias against anything from Oracle, I needed to
consider ADF, because I can hit the ground running with it. ADF is
certainly not open source, which is a mark against it, but there is a
subset of ADF called ADF Essentials that is free to use.
Unfortunately, the full ADF product only runs on Oracle WebLogic
Server (WLS), but ADF Essentials is supported on Glassfish, and is
known to work on several other JEE standards compliant application
servers, like JBoss and with careful configuration on Apache Tomcat.
ADF is a Model/View/Controller (MVC) based framework. It supports
the JPA standard for Object Relational Mapping (ORM) for its Model
and Java Server Faces (JSF) for its View. The ADF Faces JSF component
library has lots of widgets that give you lots of options for layout,
data presentation, and input/update forms.
My favorite part of ADF is tooling. You can develop ADF
Essentials applications in Oracle JDeveloper, but you do have to be
careful to stay away from parts of ADF that require the full tool –
i.e. must be deployed on WLS. But JDeveloper has wonderful WYSIWYG
support for ADF Faces (and Apache Trinidad) components and can do
things like let you drag fields from your ORM onto a page and
generate a table component configured to display them, or a form to
insert, update or delete data in the database. There have been
complaints that JDeveloper is slow and buggy however, and it isn’t
in very wide use outside the Oracle user community. As an
alternative, you can develop ADF Essentials applications with Eclipse
by installing the Oracle Enterprise Pack for Eclipse (OEPE). OEPE
doesn’t show ADF Faces components quite as well as JDeveloper, and
doesn’t have as much code generation, but it is not bad, and
probably a little more stable.
The problems with ADF are: It isn’t open source. Oracle’s
support for ADF has been waning, and that means that updates of ADF
and of JDeveloper have been very widely spaced. Later versions of
JDeveloper have bugs that have not been adequately addressed. It has
never gained a large following in the developer community. But to
me, the killer that sent me looking for an alternative is that ADF
Essentials does not support ADF Security for authorization and
authentication of your application. In earlier versions of ADF, this
was okay because you COULD configure standard JEE security instead,
or use a third party security framework like Spring Security or
Apache Shiro. But the latest versions of ADF Essentials broke this,
and while I’ve developed a
work
around, I’m not happy with it.
Other JSF Libraries
Java Server Faces is a JEE standard for the View and Controller,
and so is JPA for the Model. Through ADF, I was already familiar
with how these work, so a different set of JSF components seemed like
a good option. There are a number of libraries around, many of which
are open source.
Apache Trinidad
One faces library that appealed to me is Apache Trinidad, which
originated as Oracle’s earlier 10g version of ADF Faces (current
version is 12c 2.3), so I had actually used this in my first few ADF
projects. Oracle opened the source to this library and contributed
it to the Apache MyFaces project. This is under active development.
One nice thing about Trinidad is that both JDeveloper and Eclipse
with OEPE have tooling support for it, so you can get some of the
drag and drop and code generation features of these tools without
tying yourself to Oracle’s proprietary ADF Faces. Or you can add
JSF and the Trinidad library to an Eclipse project without using
OEPE.
Unfortunately, Trinidad is also not terribly popular among
non-Oracle developers. It has been enhanced to keep up with the
latest JSF standard, but not much for functionality.
PrimeFaces
This is probably the most popular JSF library, with good documentation, good examples and sample code. There is reasonable support for it in both NetBeans and in Eclipse (I have only used these and Oracle JDeveloper as my IDE.) but there isn't much WYSIWYG support. Very cool is the ability, like ADF, to have themes, and even to let users switch themes. And the themes are fairly standard - they are based on JQueryUI and tools for developing them are easily available. You can even get a good number of themes from PrimeFaces' main developer, PrimeTek. One interesting thing, is that there are projects for PrimeFaces-like UI that works with Angular - PrimeNG, and with React - PrimeReact.
Conclusion
So this is probably my last post on Infra for the time being. It remains an active project, but I still haven't chosen a UI from one of these or perhaps one of the JavaScript frameworks. And development has slowed to a crawl. Hard to come home from a hard day of development, and start up the computer for a private project. But I've accumulated some nice tidbits on SQL Developer Data Modeler to share with my readers - coming to this blog real soon.