× Home MicroServices WYSI!WYG Zen IDE AppServer JSP JDBC Pool EJB Filter Bug About Services
Backbutton Frameworks ©

Industrial-Strength Application Development


using Application Generators

HTML5 Markup

CSS Styling

Java Script

Coming Soon ...

I will be sharing the secrets of my experience from behind closed doors, on the occasion I worked at a place as an Application Developer. A group of dozen developers in total, each developer's efforts led to generating over one million pound sterling (GBP UK) per developer per annum in an open competitive market. I will be answering the question so many investors want to know, what made them so unique, more importantly how can that uniqueness can be replicated ?

My journey into Application Generators

My journey began when I was asked to integrate a Mail Server with a Database in an on going migration project. As can be seen in the Level 0 diagram both the database and the Mail Server are in the Data section. I was asked to do this because I had skills in C programming language. That is what I did, I wrote a server to integrate the two. The whole Application Logic middle tier was missing from this commercial application development Tool. A database-centric application development Tool from a database company. Soon after my discovery the same Database company purchased weblogic , an application server.

Level 0

I did some searching around on the internet for web development tools until I came across this book. I received two shocks from this book. Firstly my instinct proved correct about the commercial product and something being wrong with it. When I say something being wrong, I wasn't able to integrate the database with the mail server as I wanted to. It turns out that my preferred method of programming has a name. chasing the dragon demonstrated using another Java API technology called Remote Method Invocation. Finding and fixes and intermitten bugs which either caused Aircraft monitoring systems to crash or fix over billing of customers in a customer care and billing system is indeed impressive I would say. However detecting a flaw in a commercial architecture then finding an architecture to replace that architecture with the corrective mechanism. I had reached my plateau

The second shock for me was that these application development tools were absolutely free, commercial grade, putting even the commercial product to shame. For me this was a great release because it meant I could just buy a book or even two and train myself on application development tools which I favoured rather than my employer favoured, just because some product saleman told him they were useful.

Through my journey I also came another type of application development tools. Apache Spark which can carry out parallelism. Unlike the pictured technologies, I found because I knew the concepts on this occasion I found the technology without knowing the concepts. It is a bit like programming without the business knowledge. To find the product use case for this technology I did this four month course . At the end of the course I was able to appreciate Apache Spark and Apache flink are not actually direct competitors for the same paradigm. Making a direct comparison between the two is like comparing apples and oranges.

The significance of my journey is that while application developers journey usually begin from a simple start with simple lines of code, mine started out by discarding a commercial product, from finding out it is a flawed architecture. Flaws which others, developers, project managers, planners etc. didn't see. Although the above pictured architecture seemed better equipped, it was my top priority with this new architecture was to find the limitations if any prior to writing one line of code.

Commercial Industrial-Strength Applications can be devided in two parts. First part is consistent performance achieved through load balancing,connection pooling , data management, system monitoring. Second part is breaking down the Domain complexity. This is done at design stage using data analysis techniques which will curve out domain boundaries into subsystems. The subsystem design will then be implemented as microservices. It is not unheard of starting a system with designing screens,I would certainly avoid that.

The final stage of my journey has brought me to Microservices which addresses those application development concerns when the software has the characteristics of Industrial Strength Software. Since 2015 the above pictured architecture has come to be known as a big ball of mud. I would say that is a limitation of the architecture, cause for concern , a consideration

Characteristics of Industrial-Strength Software

A dying star on the verge of collapse, a child learning how to read , white blood cells rushing to attack a virus:these are but a few of the objects in the physical world that involves truly awsome complexity. Software may also involve elements of great complexity; however , the complexity we find here is of a fundamentally different kind. Einstein argued that there must be simplified explanations of nature , because GOD is not capricious or arbitrary. No such faith comforts the software engineer.

We do realise that some software systems are not complex [web design]. These are largely forgettable applications that are specified, constructed, maintained and used by the same person, usually the amateur programmer or the professional developer working in isolation. This is not to say that all such systems are crude and inelegant, nor do we mean to belittle their creators. Such systems tend to have a very limited purpose and a very short life span. We can afford to throw them away and replace them with entirely new software rather than attempt to reuse them , repair them , or extend their functionality. Such applications are generally more tedious than diffcult to develop ; consequently, learning how to design them does not interest us.

Instead, we are interested in more in the challenges of developing what we call Industrial-Strength Software. Here we find applications that exhibit a very rich set of behaviours , as for example , in reactive system that drive or driven by events by the physical world , and for which time and space are a scarce resource;applications that maintain the integrity of hundereds of thousands of records of information while allowing concurrent updates and queries ; and systems for the command and control of real world entities, such as routings of air or railway traffic. Software system such as these tend to have a long life span , and over time , many users come to depend on the proper functioning. In the real world of Industrial-Strength software we also find frameworks that simplify the creation of domain-spacific applications, and programs that mimic some aspect of human intelligence. Although such applications are generally products of research and development they are less no complex , for they are the means and artifacts of incremental and exploratory development.

The distinguishing characteristics of Industrial-Strength software is that it is intensely difficult , if not impossible, for a developer to comprehend all the subtleties of design. Stated in blunt terms, the complexity of such systems exceeds the human intellect capacity. Alas , this complexity we speak of seems to be essential property of all large software systems. By essential we mean that we may master this complexity, but we can never make it go away. Certainly , there will always be geniuses among us, people of extraordinary skill who can do the work of a handful of mere mortal developers. ...

Source: Object Orientated Analysis and Design with Applications;Grady Booch [Second Edition]

It is my experience that if you have possession & understanding of the Use Case then there is very little which can prevent you from applying the software development tools, size or complexity becomes irrelevant. Without knowledge or understanding of the Use Case, a large and complex system will be intensely difficult , if not impossible, for a developer to comprehend all the subtleties of design, most likely point of failure to meet stated requirements. A common term for this phenomena is writer's block.

Software Crisis

Source Grady Booch: The United States Department of defence (DOD) is perhaps the largest user of computers in the world. By the mid-1970s, software development for its systems had reached crisis proportions: projects were often late, over budget and they often failed to meet their stated requirements. It was evident that the problems would only worsen as software development costs continued to rise exponentially. To help resolve these problems which were further compounded by the proliferation of hundereds of different languages. The DOD sponsored the development of a single, common high order programming language. The winning design was originally called the Green Language (so called because of its team colour code during the competition), later renamed Ada.

Poor quality software cost an estimated $2.84 trillion in the US alone in 2018 Source CISQ: [Consortium for IT Software Quality ].
https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report/The-Cost-of-Poor-Quality-Software-in-the-US-2018-Report.pdf

Building Large and complex systems from scratch can be a costly endeavour. Framework technologies aka Application Generators is the answer to resolve the software crisis for e-commerce applications as Ada was the solution to the US defence industry when they identified the cause of the software crisis. In my five years of Software commercial development and even prior to that I observed technology learning curve can only solve 50% of the problem, furthermore a developer will reach a plateau (no more to learn). The other 50% is meeting the stated requirements. Does the developer has the knowledge of an accountancy profession ? If the developer isn't a qualified accountant then how will the developer a manufacture a product for the accountant ?

Considerations of Industrial Strength Applications

For consistent performing application even under stress, For your application to be indeed an industrial Strength application,commercial grade, your considerations are connection pooling , loading balancing, perfect database design. The perfect database design is referring to the fact when the EJB entity bean or any other Data Access Object is mapping to a database table row(s). You may have to use javax.sql on occasions when requiring flexibility, that is to say when there is a need to build a complex SQL statement. The perfect database design can easily be achieved when using the Microservices paradigm. Which components you choose for your application logic to negotiate these obstacles is just a choice. However you will only be in a position to choose if you know and fully understand the meaning of two words interprocess & intraprocess.

Level 0

A Bean is an intraprocess (tightly coupled) and an Enterprise Java Bean is an interprocess (loosley coupled). This is really easy to understand when you look at the diagram. The bean can be seen as tightly coupled with the JSP running in the same container. Meanwhile the EJB runs in its own EJB server so it is loosely coupled. The reason this is very important knowledge for application developers is because both of these components are designed to hold business logic, the intended audience is non other than the application developer.

For the EJB to be loosley coupled it doesn't have to run in a remote JVM as can be seen in this diagram, this diagram was first published in 1999, yet you can still apply it to Jakarta EE. incidentally the Intranet is tightly coupled & secure. when the client and server are communicating,the Internet uses a loosley coupled communication algorithm hence it is stateless. With these concepts in mind then you can clearly see and appreciate, many new APIs is a result of Recycling of the intraprocess or interprocess of the old APIs. I have no doubt similar Concept Recycling can also be found not only in the interpretive Java Virtual machine but also the real machines.

I knew I would be one of a very few people who would understand the definition of bean and E-Bean because I had just been looking at the diagram earlier in another book. What was the chance of anybody else doing the same. This diagram was put together with a collaboration between 12-15 engineers. The reason I had two source of material on the same topic is because it is my belief that if I didn't understand an Information Technology topic, it is entirely due to the subject not being explained to me properly by the source.

I put my belief of having multiple sources on the same top to the test. My belief that I did not understand not because I couldn't, but because there was a failure explain/introduce the subject properly. My test involved asking Java EE "experts" if they would be kind enough to explain interprocess and intraprocess. In their opinion an intraprocess runs in the same JVM and an interprocess runs in a remote JVMs. The binding has nothing to do with. One told me to get lost because they do not have time to discuss rudimentary and basic concepts. I have two sources which concur with each other and on that basis I would have to say the Java EE "experts" are incorrect in their understanding of this particular subject.

In the field of application development, where there is great reliance on other people's platforms and APIs, there is no question in my mind, the language must be interpretive so that it is possible to track down an anomaly. In the event there is a concern of decompiling classes then one can put the algorithm in a C dll and interface with it in Java. Of course if there is an anomaly in the dll then tracing the bug is not possible by another application developer who doesn't have access to the source.

I think it is important to understand these concepts because then, you as an application developer will not get confused by new technologies or new buzz words or even claims of new inventions Vying for your attention, when it is really a recycling of the same old concepts. The US department's conclusion of the software crisis was due to 400+ programming languages, which was then solved by replacing the 400+ programming languages with one programming language, ADA. There was a time it appeared as if Java had more than 400+, APIs & features one had to learn before being able to build Applications.

The book which stated a Bean is an intraprocess(tight coupled) and an Enterprise Bean an interprocess (loosely coupled) also stated that networks is a very simple concept known only to a few. I think I am one of them few. I am one of the few because one of my HND computing course teachers was an Assembly language programmer who couldn't understand why there was so little demand for Assembly language, so he turned to teaching,he said it was a very easy language to programme. Easy for him but people preferred not to write any code meaning OOP using OOM because it needs a lot of focus & concentration.

Can you imagine the amount of research it took to work out these three concepts and its relevance when building commercial grade applications, connection pooling, load balancing and a perfect database design. Especially perfect database design is a limitation of Entity Bean. Until this time all I knew was *nix scripting language is a flexible therefore a powerful Tool, When database tuning was needed,Tomcat is a plugin server, meaning of Interprocess and Intraprocess, Intranet and internet, tight coupling , loose coupling. After this I felt I knew all there is to know to build commercial applications for the rest of my Application development career. I don't believe I have worked with anybody in software development who knew any of these, even one of these.

I put my belief of having multiple sources on the same top to the test. My belief that I did not understand not because I couldn't, but because there was a failure explain/introduce the subject properly. My test involved asking Java EE "experts" if they would be kind enough to explain interprocess and intraprocess. In their opinion an intraprocess runs in the same JVM and an interprocess runs in a remote JVMs. The binding has nothing to do with. One told me to get lost because they do not have time to discuss rudimentary and basic concepts. I have two sources which concur with each other and on that basis I would have to say the Java EE "experts" are incorrect in their understanding of this particular subject.

So the next time your boss wants to send you on a training course on a new application development tool in the market place, following a saleman's visit perhaps. You can say let me have a look at the brochure of features. you will be in a position to reply sorry mate! no new offerings. Do you want to risk unstabilising the product we worked so hard to stabilise ? He can say well you would normally be right, although it is using pretty much the same technologies we would be applying it using the microservices paradigm, and we wouldn't be exposing ourselves to that risk.

Professional Products

If you want a reason why you should you use professional products albeit based on open source, with professional support rather than purely open source just take up this challenge which asks you to add one JSP to the maven archetype. Spring.io and Java EE are direct competitors with same offerings, but there is a vast difference in popularity with a ratio of 80:20 in favour of spring.io. Knowing the popularity issue and not putting any weight on the fact Java EE does the configuation for you comparatively spring.io is very configuration orientated, I have still chosen the less popular Java EE because it is their objective of standardisation same as the US DOD developed single common high order language also for the purpose of standardisation.

Competing paradigms & Architectures within Java world

OLD J2EE
JAVA EE: Layered Architecure
Microservices: Hexagonal Architecure

professional Java server programming did a very good job of confusing me at first as to when to use which component. Luckily Application development and software engineering wasn't new to me so I was able to pick out the useful technologies from the sound concepts I had picked up. If you mix JSTL with JSF you may get unpredictble results, therefore some of the EE technologies are not meant to work together but are competing with each other.

Applying © KISSSS to the Stated Requirements

Analysis and Design of Applications is Always relevant
Source 1 - The definitive guide on MicroServices
Source 2 Helper guide on Microservices.

Microservices: an architecture devised to meet the stated requirements in particular the ones which has the characteristics of Industrial-Strength Software

Applying © KISSSS to Architecture

Load Balancing

Industrial Strength Performance

Business Logic

JSP + usebean

Database/Sensor(s)

Storage & Retrieval/events

Application Logic

<jsp:useBean id= "instanceName" scope= "page | request | session | application" class= "packageName.className" type= "packageName.className" beanName="packageName.className | <%= expression >" > </jsp:useBean>

Database

<Resource name="jdbc/TestDB"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          testWhileIdle="true"
          testOnBorrow="true"
          testOnReturn="false"
          validationQuery="SELECT 1"
          validationInterval="30000"
          timeBetweenEvictionRunsMillis="30000"
          maxActive="100"
          minIdle="10"
          maxWait="10000"
          initialSize="10"
          removeAbandonedTimeout="60"
          removeAbandoned="true"
          logAbandoned="true"
          minEvictableIdleTimeMillis="30000"
          jmxEnabled="true"
          jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
          org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" 
          username="root"
          password="password" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/mysql"/>

          Connection con = null;
                    try {
                      con = datasource.getConnection();
                      Statement st = con.createStatement();
                      ResultSet rs = st.executeQuery("select * from user");
                      int cnt = 1;
                      while (rs.next()) {
                          System.out.println((cnt++)+". Host:" +rs.getString("Host")+
                            " User:"+rs.getString("User")+" Password:"+rs.getString("Password"));
                      }
                      rs.close();
                      st.close();
                    } finally {
                      if (con!=null) try {con.close();}catch (Exception ignore) {}
                    }
                }
        

It literally took me a space of a lunch time to pick out, from a book, the components needed to build Industrial Strength applications are these ones. This ©KISSSS architecture is both simple and flexible. It was the exact same principles used when building applications using only commercial available Tools, like visual Basic, Oracle Forms , CA OpenRoad also known as application Generators. At one place I worked at it was said the head of development was one of the top 10 database experts in the world. I had chosen my technologies based on what I learned from him.

Grady Booch described these Application Generators as "tedious" , in the real world tedious amounted to success when the stated requirements displayed the characteristics of Industrial Strength Software. I began my career as a software engineer, it was later I realised about this new profession within a profession known as the Application developer, the free & open source apache foundation and Java Enterprise Edition was like a breath of fresh air for me.

I went on a number of job interviews and they asked questions about Java features I knew nothing about because I care to know nothing about as they were irrelevant to me. At one job interview I was expected to criticise or advocate a two tier database centric application tool. The same tool which was displayed on my company website was drawn on the board. Some may look at my website and take advantage of my research which is a shame but I can't let that prevent me from displaying my skills as I now get nearer to the plateau. It took me watching a 2 hour youtube video to learn to do this responsive websites. There is certain amount of menu planning not mentioned in the video course. I believe my skill of conceptualisation a programming languages allows me to pick up these skills in such short time.

Java EE Architecture for Legacy Systems

Please note third image ( right click -> view image) states one possible use is for legacy systems bringing legacy two tier fat client systems into the minimum three tier internet paradigm. Only twelve months prior to me coming across J2EE the previous company I worked for , a software house, with new owners were migrating from two tier CA Open Road to Oracle Forms. They did so by outsourcing to an Indian Software company. :) It was the best of times, it was the worst of times. The current project I was working on was being done in Visual Basic, another two tier application generator because the technical Lead didn't want to cross train and lose his Visual Basic skills he spent years learning. I had never done Visual Basic so this was my first crack at Visual Basic. I have no doubt there are plenty of three tier monolithic applications which need migrating over to microservices . Although the above images are from a official Java EE presentation, it says tomcat and apache httpd. Tomcat is not actually EE fully compliant unlike glassfish , payara. Apache httpd is a product from https://www.apache.org/. This type of confusion is common place in Java & Java EE world.

The First learning Curve Plateau - Technology

Many people in the application dvelopment industry including developers wrongly think that when they become fluent in the technology, this is the final achievement when in fact this is only the first half. You are actually on a flat top mountain with no where to progress. This is only the beginning with the second half being the business knowledge which you can now apply with the mastered technology.

images c/o of google search images

At one of the places I worked at, Human resources Manager arranged a career development between the three company developers who were not senior application developers and the project Manager. He said the technology's learning curve flattens out, you will remain as junior if you become comfortable remaining at that plateau. This was a refreshing point of view because it was an acknowledgement you don't need to spend years learning application development Tool or even a minimum of ten thousand lines of code to be good at it.

He went on to say you should focus on other stages also like data analysis leading up to project management. One of the other developers objected to the term junior to describe an application developer fluent in an application development framework. He was not the only one I came across who over inflated the value of fluency in an application development Tool. I began my career as a Junior Software after doing an HND Computing starting out doing testing, maintenance , coding going up the software development life cycle so I had no issue with the project manager's view.

Significance of the Flat plain (Plateau)

The significance of the learning curve and the plateau in the field of Application development is that whether you have spent six months cross training on a a new set of skills, or you have spent 20 years using the same Tool set, there is no difference in the skill level. This is not good news for those who have spent 20 years doing the same thing i.e. EE, but it is good news for the new cross trainer because you will can close the gap.

programming Englightment I found the project manager's view refreshing because he focused on the plateau rather than the learning curve. I could relate to this idea of reaching a plateau all the way back to College. It happened to me with Programming using C at College when I concluded that I have learned all there is to learn about programming, next step is to go and find a job and see how they do it in the commercial world. Before I enrolled in the HND Computing course I thought programming was some kind of complex science which required ph.D level scientist. But Now as far as I was concerned the various programming languages did the same thing and a new language was a new version of a text parser for the compiler to interpret. For example C++ is C with classes. I used to think when this stage of understanding programming as programming enlightment, it had another name plateau. BUT do not over estimate this gift because when working with large and complex system Business Knowledge, Use Case Knowledge is the other half to mastering Industrial Software. I think this has been realised by the wider industry so the Industry has come up with a new approach called microservices.

The Second Learning Curve - Use Case

I have worked at four commercial software houses. At each of the four companies I have observed two types of approaches to software development. One approach is to focus on the Use Case [System Analysis , Business Analysis] first and the other is to go to code. Places were there was investment and focus on Use Case Analysis success could be measured in Millions of Dollars. Where there were individuals who focused on code or technology the failures or disasters can also be measured in Millions of Dollar.

I realised the importance of Requirements capturing at College when I was doing my HND in Computing. We were set a project to do by Mr Dimitri my C and Unix lecturer. I noticed the quality which differentiated me from the other students was the fact I was doing a career change from Accountancy to computers. I had business Knowledge and by this time I understand how to apply the programming language to it. Doing this project meant the Use Case understanding poured out and I literally had an issue to wind up the project. I used writing to and from files to hold persistent data because I didn't have an access to a database, the focus was to do it in the C programming language. The more code I wrote the better my understanding became of Programming until I reached the learning curve plateau. Meanwhile other students who did not have a previous career all struggled to do their projects.

Monolith to Microservices Architecture

Using the aformentioned combination of technologies (Application Server + load balancer + JSP + useBean + database) to build applications means one will be building applications known as layered architectures. Layered architectural approach does work but for bigger system it has come to known as big ball of mud. Many Spring.io developers are using only a small set of technologies SprIng+Tomcat+Hibernate, Java's LAMP stack.

Year 2021 Java's Lamp is (Application Server + load balancer + JSF + CDI Bean + JAX-RS + database)

Coding without having the concepts communicated to the developer was also an important finding of mine I kept in mind at all times, therefore it is certianly NOT a mistake I was going to make whether the concepts were of application generator or Use Case. If I didn't know the concepts, as far as I am concerned I am not skilled enough to apply the technology. Now that I have found the right book., I believe once again there is a paradigm shift to build hexagonal architectures. If your work is known as big ball of mud. , then that should be enough motivation to rethink, to do something else. I am not a stranger to the approach advocated by the microservices brigade. I know it works. The motivation for microservices approach is the realisation Industrial Strength software is beyond the human intellect therefore the logic approach is to divide up the Use Cases into smaller Use Cases. The boundaries of microservices defined by the Use Case sub systems.

As I write this paragraph the courier has just delivered a repaired smartphone phone so I have added this extra text here because of its relevance. The company is called Micro Services.. That is not the something else I had in mind, Naming conventions in Software development is a big concern. So if you come across a word you don't understand and you don't want to sound like you are not a know it all developer , simply state your question as follows. That word has many meanings for me what do you mean by that ? It wasn't a repaired phone but brand new, I guess they couldn't repair it.

Shocking Revelation

Following an HND in compuing at the local College preceding a decision to make a career change from Managemnet accounts level accountancy, I racked up five years of solid commercial experience working in software development only. Three roles in those five years were Junior Software Engineer , Application Developer and Software Engineer. I have never claimed to have programmed nor even heard of any of the software development technologies I used in any of the three jobs prior to starting any of these jobs. The programming understanding I picked up in the HND computing course at Reading College of Technology was what I relied on me to pick up unfamiliar the technologies. This is the first time I am going to learn and master a technology prior to offering my services. The first book (from USA) I bought during my professional career to learn a new technology, in this case Java, stated "Java runs from top to bottom", He further claimed to have devised garbage collection strategy to improve performance, any language does GC , it is the purpose of having a variable scope. and the author's favourite development Tool was notepad on windows. Application programming is mostly top down programming , developer tools can be found on the *.nix i.e. diff , grep. It was the Knowledge and understanding of variable scope as taught by Mr Dimitri in the HND course, I used to track down and a fix a bug in a Billing System. A billing bug having the adverse effect of billing customers for international calls when they were making local calls after havign made one international call. The product was called SMS Customer Care and Billing System , therefore the product was failing to fulfill its primary objective intermittenly, accurate billing. Every inaccuracy I was seeing in this book until I finally decided to bin it, was due the programming skills I picked up during my HND computing which some people wouldn't rate. My enthusiasm took a serious dent from these kinds of inaccuracies, when I was looking forward to gaining some in depth skills on professional application development products with only a price of a book. I have come across many such poor sources since then and I feel there should be a health warnings like cigarette packet health warnings.

I knew procedural languages like Pascal run from top to bottom but Java is an Object Orientated language. Java uses Encapsulation with state, behaviour and identity. It was my understanding that Pascal, procedural language, executed from top to bottom, I applied this understanding to track down and fix an Aircraft Engine Monitoring software written purely in Pascal doing only code walkthorough. Software which was written by a professional Software Engineer tested on purpose built hardware rigs and live platforms, but still failed to perform its primary objective intermittenly. My take away from this bug fix was that there are some software bugs which can pass all tests therefore go undetected. This will not be the only time I will find and fixed an intermittent bug.

During the HND computing course the only exposure I could get to the *.nix was at the college. Then later the linux became available but you would have to lucky to have compatible drivers, always wondering when is the day going to come when it is usable. These days the Linux is stable, comes with windows environments, frankly it is an operating system design to run on a network for running internet webservers, the get-go unlike windows which was always a standalone with features being added so it can be used for networks.

Application Generator Hello World

There is no shortage of presentations, tutorials , and books devoted to technology begin with the example of Hello World application. One reason is that it is invariably simple. Another reason is that it is possible to copy this kind of application and use it as starting point building your own because it already conains the basic setup tasks of any application. A properly designed Hello World should connect all the major points of the framework components need to work together within the framework.That is exactly what I have done in my ZEN application prototype and the coco bean shop (below), shown components connect and working together whilst demonstrating their primary functionality Stated requirements .

Slow System

You probably have come across a slow system or users complaining the system is really slow. Well one day I was sitting outside having a cigarette break, a good looking sturdy man walked out, also come to out to have a cigarette break. I offered him a light and asked I haven't seen you here before are you new to the company. He said no he was here to get a briefing before going on site. He said he will probably work on each site for two weeks then he will be gone. I asked him what he did. He explained the systems are getting slower I have to do things to bring them up to speed. I asked him how can you do this without disturbing the code functionality. He went on to detail what he would do without introducing any new bugs.

The next placed I worked at I met Patel , database consultant, just came back after being outsourced for two years of working on sites. I asked what kind of work he did at sites as a database consultant. He couldn't wait to tell me a discovery he made. He was dying to tell somebody who would understand. He said nearly every place went to they didn't changed the defaut Oracle username and password Scott,Tiger. We fell about laughing with all the other IT staff staring at us as if we are a bunch of crazies. It is not a traditional joke of a priest , Rabi and an Imaam walked into a pub and one said ... , it is funnier. If you seen a movie where they say the programmer left a backdoor to get into the system. Well this could be one of those back doors.

I believe these two golden nuggets of information, my task of fixing a flawed two tier application generator equipped me to go out on my own, choose my own application generator and develop Industrial Strength Applications, It was no longer beyond my intellect as a developer.

Batteries Included

Both Java Framework developers and Application developers are going to be developing using the same syntax namely Java syntax. That is not quite accurate Java Framework developers are going to be developing in just Java, lucky Framework developes, Application developers are going to be developing in Java,SQL, HTML,JSF, Javascript ,EL blah blah blah.

As both types of developers are going to be developing in Java then Java platform developers will cater for both sets of developers. What this means is that you have a feature rich platform, too rich also referred to as batteries included. Two examples I can think of is reflections and this feature (see below) which allows for dynamic generation of servlets. I understand mixing JSTL and JSF can produce unexpected results too. These features are meant to be used by application generator developers but I could see application developers might also be tempted to use the same features not meant for them. There is no real way that most application developers know which Java to use and which Java not to use. Enterprise Edition also the same as batteries included problem, but only for application developers.

Prototype! Prototype! Prototype!

The RMI-Base prototype demonstrates the passing of messages, between loosely coupled services to kick off remote processes and bring back validation of success or failure.

The coco bean shop demonstrates also the passing of values across pages in a stateless loosely coupled envionment, and of course handling the browser issues. These two concepts are really the only two which are new from any two tier fat client application like those developed in Application Generators like Visual Basic , Oracle Forms , CA Openroad.

The JSF browser code , slight improvement on messy html but not much.

Deployment Considerations

Tools like Docker and Kubernetes are to make it easier to deploy the application through protection from unknown variables when moving from development to deployments environments. It appears having a write once run anywhere jar file is not the answer. In the past *nix scripts offered the power and the versatility needed. Tools like Visual Basic did have their own packaging Tools because DOS did not have the features of *.nix scripting language. Experts in *.nix scripting were feared and respected. Having said that with ServerSide technology I don't really see deployment as an issue because the client side multiple user machine software deployments is deployed for you. The client side code is going to be confined to run in an environment called the Internet Browser. The browser is the client side confined environment while Docker is duplication of server side environment. So I have never cared for the Sun Microsystem -v- Microsoft litigation over allowing JVM to be installed in the browser. Sun Microsystems should have focused on Server Side Technology. As you can see from Zen protoype , the only demo protoype in the world using Java RMI, two different types of clients (Look & Feel GUI [grapical User interface] clients) running from the same codebase. I find really mind boggling why would anybody want to put one GUI into another GUI, run the Java Applet [GUI], from inside the browser [GUI]. The mind further boggles of the fact that the people who want to run the Java applet are the ones who came up with Java network centric Java Remote Method Invocation. The Java applet was later replaced by swing then JavaFX, a client building GUI API. You really have to be really really confused and oblivious to technology to want to put an applet inside a browser. They are two separate clients serving the same purpose the Graphical User Interface [GUI]. lol. An internet browser is a text parser, it parses html text , Sun Microsystem wanted to have a JVM running in the browser so that it can parse Java interpretive code inside the browser which is a text parser. UHHH!!! W3C are in charge of the text parser known as the Internet browser.

Phil the Visual Basic Tech Lead was trying to impress me with Visual Basic's packaging utility. I wasn't impressed because ony a few days earlier I thoroughly examined Tomcat Application Server. During my examination I discovered that for Tomcat deployment one packaged it in a file called .war file. Then when you dropped the file into the Tomcat webapp folder it expanded everything automatically. Obviously Tomcat was polling the directory periodically and probably checking the file timestamp also. I was really fascinated by this new type of software deployment filed called a war file. I decided to experiment a bit and thought let's see if I can open it with winzip and see what happens. What happened was I realised it was just a con, the war file wasn't anything new at all, it was just the same old zip file with a new extension so the Windows didn't associate it to Winzip. For that matter Java's package was not new either, I saw it first in Ada programming language and the rest of Java look like C with Classes. The reason behind the thorough examination wasn't because I wantd to reverse engineer it. There is no need, the source code (thousands of lines of code) is freely available. The reason was that because I was the only one looking at this technology at the software house I couldn't afford to get stuck as I was on my own so I had to learn to find the answers, learn to understand the error messages. For that I was creating all sorts of test scenarios. I find it is best to break, I mean test for customer care code one at a time. To be successful with any new framework technology it must be adopted widely in the industry otherwise you could have the best skills in the best framework and it would count for nothing. That was the situation in my case. I just had to look around my workplace to see that.

More Books or Product Documentation

Now that my most burning questions has been answered the next step is to head to the aformentioned Plateau. To get there I have enlisted the assistance of these individuals. These authors have identified my most importants concerns, I require documentation which are definitive, In-depth and will take me from Novice to professional. Although one of the book titles say Beginning Jakarta EE, it presumed that the reader has an understanding of programming concepts. Just what I wanted. However although these books do give good explanations and are structured to help me reach my objective, there are many many programming errors , so I do not recommend them for anyone else but myself as my third source.

Security Considerations

Recently (16-October-2020) British Airways have been fined £20 million ($25.85 million) for letting people steal the data by having a unsecure website and not doing enough, failing to ask the question often enough.

I could write alot about security implementation, but it still may not be enough, with every application is running on an open port 80. so I am just going to write, it is something that has to be taken seriously as British Airways has discovered the hardway.

All aboard!

Pearl of Wisdom by Mr Dimitri

Mr. Dimitri shared one pearl of wisdom with the class during the HND computing sourse. He said he doesn't understand why Project Managers bring on board more development staff when the project is running late. He said it was more a sign of panic then wisdom, because when you bring on board more staff, the existing staff has to stop their work while they train the new staff. This then has the net effect of making the project even more late.

I would presume when he said training he is referring to the Use Case training because they would probably have recruited staff may be on the basis of experience in the relevant Tools or programming languages or the volume of code they have written. The implication also appears to be that without Use Case Knowledge Knowledge, technology skills doesn't amount to productiveness. It also appeared the project managers missed out on a very useful HND computing qualification at the Reading College of Technology, hence late and panic driven projects.

Deliverable

Pearl of Wisdom by Mr Dimitri

Mr Dimitri educated us on the definition of a Software Production Deliverable. He said you must get the customer requirements in the form a written contractual agreement. That way when you feel the product has met the requirements, you are in a position to demonstrate the product meets the stated requirements. After the demonstration the deliverable can be signed off that will be the cut off point.

If after the cut off point the customer wants additional functionality then the developers and the customer can negotiate accordingly. The customer will probably approach the original software development company for the product enhancements because they know and understand the product. Otherwise the customer have will be approaching a software development house where the developers will effectively be doing reverse engineering from code. To get an idea of that course of action imagine learning a new technology without Books (as above), without training, just reading code and deciphering the functionality from naming conventions. It is complex enough to code the product using Analysis and Design, therefore using short cuts like reverse engineering to build enhancements, it is likely the product will over run and over budget.

Mr Dimitri also mentioned that if you do not sign off the stated requirements and make a formal delivery with a cut off point or without a written requirements then it is likely the customer can later claim that certain enhancements he realised he wants now are software Bugs therefore he is entitled to that work be done free of charge. The billable enhancements may become a fault claim.

On a side note the framework developers unlike application developers work from an idea rather than a stated requirements. Framework development is more of an invention as compared to Application development. The framework then enriches with more ideas contributed from other developers. If the contributers are application developers with experience of developing applications using frameworks then it is likely the progress on that framework will be be faster. However should an application developer(s) to share ideas he/she has learned from other commercial development products is an questionable.

I think much of the open source frameworks are open source with mailing lists because the framework developers are looking for contribution of ideas. Framework deliverable unlike application deliverable is not static, it is ever evolving. With this view I used to frequently download J2EE to see whether their deliverable was on par with other frameworks I used with for two tier applications, so I can decided whether to invest my time and energy into it now or later.

Backbutton Frameworks

Applying frameworks for software development is the definition of Rapid Application Development for a faster deliverable.
In the defintion of © KISSSS (keep it simple software solution strategy). Strategy infers using Framework.
Using a framework to make a complicated problem simple is always right.
Backbutton frameworks knows how to make complex simple because our first object is a Customer Care deliverable.

If you don't love it or at the very least fascinated by it you are not going to be good at it.