Do keep in mind unlike scratch built systems, these are application generators therefore the idea behind them is to prepare you for rapid application development to do so one has to master it in shortest possible time, otherwise they have failed in their objective. Nobody can really teach you how to use these application generators, you should always teach yourself bit by bit, because only then can then you go on to the next step of applying it to build applications to meet the stated requirements.
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.
Source: Object Orientated Analysis and Design with Applications;Grady Booch [Second Edition]
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 ].
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.
The premise of microservices is 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. It is from this premise evolved this microservices Hexagonal Architectural design and the complexity being referred to is not the complexity of the technology which can be mastered but the stated requirements . Applying the wrong approach to master the complexity of Industrial Strength software cost $2.84 trillion in the US alone in 2018.
professional Java server programming did a very good job of confusing me as to when to use which component. Luckily Application and 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. On a side note apparently Jini-Javaspaces and EJBs are competing paradigms. EJBs and RPC were the first attempt at microservices but it didn't work,probably needed work around patches, microservices is more feasable by using a set of design patterns such as saga , I do believe some Jini concepts have made their way into microservices paradigm. Design patterns like saga indicates why the previous approach didn't work. Using Database per Service Design Pattern, I dare say a developer can come up with a perfect database design or a Data Analyst hired to this small bespoke job for the developers.If you mix JSTL with JSF you may get unpredictble results, therefore some of these technologies are not complimentary but competing with each other.
Commerical Products followed by commercial training courses cost thousands per week where you learn less and may train up on inferior products. I know I have been on many such courses, then I stopped when I started seeing holes in the commercial products while I was learning to use them. With EE best of both worlds; You can train on the current fit for Industrial-Strength software costing only a price a book.
If you compare the official Java EE tutorials with the above Java EE 8 microsevices book, soon you will realise the book will better equip to develop real life applications, it is a nice accompaniment to EE documentation in any event. This is the first smart book I have come across in a long time aimed at application developers, it is a both gentle structured introduction, demonstrating both frameworks Spring.io (80% popular) and EE (20% popular), so you can compare and find assurance you are not missing out. The book visits advanced robust programming, thorougly explains the APIs' concepts then you can apply them easily, you will easily soak in the expertise at first pass. With other technologies to master namely Java Server Faces, CDI, JPA, Microservices Design Patterns, Messaging system of choice this book covers this area comprehensively in less than three hundred pages. I have also looked at professional products like IBM's OpenLiberty Microservices Guides and I felt I missed out on nothing. I was thorughly prepared to develop applications using the microservices paradigm. The book takes care of most of the buzz words surrounding microservices with practical hands on example. Want to be professional grade application developer from the Get Go in either or both Spring and Java EE using the microservices paradigm, this is a good book for you.
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 is mapping to a database table. 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 to overcome these obstacles is up to you. However you will only be in a position to choose if you know and fully understand the meaning of two words interprocess & intraprocess. With this approach You can learn once and develop anywhere.
A bean is an intraprocess (tightly coupled) and an EJB 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. 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, meaning while 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 Recycling can also be found not just in the Java Virtual machine but also the real machines. I think it is important to understand these concepts bacause then you as an application developer is confused by new technologies or new buzz words or even claims of new inventions when it is really a recycling or even replacing 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.
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.
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.
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 archetype.
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.
Using the aformentioned combination of technologies (Tomcat + load balancer + JSP + CDI Bean + 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.
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.
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.
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 .
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.
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.
Many 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.
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.
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.
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.
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.
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.
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.
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.
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 technological skills amount to little use. 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.
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.