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]
I logged on the J2EE mailing lists in particular EJB-interest, where I knew I would find systems architects from all over the world. I asked the question which was the one most burning in my mind, I am expecting heavy user activity to come in, what are my considerations ? The response was you have to consider connection pooling, load balancing and a perfect database design. The important words are database design. Analysis & Design is always the starting point therefore the indication is to start with database design. The Data analysis is done by Data Analysts, they are the ones with the high level business knowledge. That business Knowledge then trickles down to the Application developer, who then implements the Business Knowledge using the application generator. I also believe in this approach. By this time I had selected the following technologies Tomcat , Mod_jk , JSP , Session scope Bean , RMI, database , searching for one last component an IDE which didn't crash. so I had all the components bar the IDE I needed, therefore I did not need to go any further with Java's Enterprise Edition. One can lable my selection of components grouped together as Zen and the Art of Motorcycle Design.
To get the response of the professional System Architect I made an information trade. I would reveal a pearl of wisdom I picked up from another type of real time system which also applies to this type of e-commerce system. The pearl of wisdom can help to prevent a system crash. Bearing in mind we live in a world where the DBA will create a user with limited access for applications, but do not change the Oracle default username password of scott tiger, user scott has full system priviledges.
mod_jk from apache tomcat has been the defacto load balancer. You can also start a web hosting company using the Apache web server's virtual hosting feature. I was really shocked and surprised to find FREE software one can use to setup a web hosting company. On this occasion I have decided not to try and design my own system, just follow the Jakarata EE 9 specifications.
I did look at the other technologies mentioned in the professional, Java Server Programming, however this is the only architecture which made sense to me and so I came to it.
Using the aformentioned combination of technologies (Tomcat + load balancer + JSP + Session Bean + RMI + database) to build applications means one will be building applications with layered architectures with some degree of microservices. Layered architectural approach does work but for bigger system it has come to known as big ball of mud. Mr Lazlo Kishalmi's remarks (email below) shows I am not alone to think the same when he says developers are using "SprIng+Tomcat+Hibernate ... Java's LAMP stack", I couldn't make sense why I would use EJBs, JMS, JTA, the concepts were not communicated to me. 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 wasn't 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 I have found the concepts behind those extra technologies found in the Java Enterprise Edition, using the extra set of technologies means one can 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.
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 , simple 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.
I have 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 concepts I was taught in the HND computing course at Reading College of Technology was relied for me to pick up the technologies. This is the first time I am going to learn and master a technology prior to offering my services. I don't why I have found it difficult to find good reliable sources to fulfill my objective. 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 when Java does it for you, GC is one of Java's notable features which Java people like to mention even though it is a critical, fundamental feature (variable scope) of all programming languages, and the author's favourite development Tool was notepad. It was the Knowledge and understanding of variable scope as taught by Mr Dimitri, 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. 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 most 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.
If you use the book Practical Enterprise development as is , you'll find you have to invest in IntelliJ Ultimate Edition because the community edition doesn't allow you to install JBoss or Wildfly. I also have a book called The definitive Guide to JSF in Java EE8. It is also a very good because it explain the code in detail. The author of this book recommend you install JBOSS Tools plugin from eclipse market place to enhanced the editors. I discovered by accident that this same plugin allows you to install any version of Wildfly including the latest version. I always have more than one book book in the same subject in the event of inaccuracy or I don't understand the way it is explained in one source. The other source I am using is Beginning Jakarta EE Enterprise Edition for Java:From nive to Professional. Wildfly V.22.0.1+ also works on jdk 15 without any issues unlike other commercial application servers which recommended to use JDK8 and barely on JDK 11. The latest eclipse also works with JDK 15, that's the JDK version Oracle says has the bug fixes and security fixes.
Commerical Products followed by commercial training courses cost thousands per week where you learn less and train up on inferior products. I know I have been on many such courses, then I stopped when I started seeing wholes 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. Then deploy on commercial products if that is required.
The main reason for the EE framework for moving from Java EE 8 to Opensource Jakarta EE 9 is because Application Developers and vendors feel uncomfortable with one company, in this Oracle having a controlling interest (tied to one vendor). Mastering Framework technology from source Code is a dumb idea, Hence you must buy a Cook book, along with understanding the Industrial Strength Use Case from the source code.
A competing application generator with EE in the same paradigm is spring.io. It is more popular than EE amongst developer with a ratio of 80:20 in favour of spring.io. Spring does offer commercial training or you can buy a books take your time, train yourself for FREE. However there is a consideration one has to keep in mind, www.Spring.io is one company so you will be tied into the one vendor. EE technologies are a set of specifications which many vendors must follow. It is The vendors of application generators are tied into the EE Specification and standardisation so the Application developer isn't burdened with endless learning, so in the event a vendor misbehaves in any way You can move to another without having to gain new skills. It takes a brave soul to put down one set of skills and take up a new set of skills, do keep in mind you will not be starting from scratch, you will still be taking with you the concepts. It is an even braver soul which makes a conscious choice to go into Industrial-Strength software
Mr Lazlo Kishalmi a technical Lead, explains the 80:20 popularity in favour of spring.io :
"Java EE had bad reputation as it was over designed. Big companies trying to sell pricey support for their bloated "good for everything" Application Servers which required high level of knowledge as entry point for developers. Then Spring came with it's bean context. It run on Tomcat and if you bind that with a persistent engine Hibernate, then you are done for the most use cases. So SprIng+Tomcat+Hibernate was "Java's LAMP stack" in after 2005 or so that became the de-facto standard. By the time the annotation based Java EE 5 came out it did not make too much difference, even if the offered injection based programming model was way more efficient than the xml based Spring contexts. I just did one of our internal system port to Java EE 5 from Spring around 2007. I could remove 40%+ of its code (the original code was around 600k lines). Also by that time we had several teams really proficient with Spring+Tomcat+Hibernate, so it was easier to get a project accepted and delivered with that technology. In the meantime, Spring got the injection and finally embedded Tomcat into Spring Boot."
The most notable words of Mr Lazlo Kishalmi are "good for everything ... High level of Knowledge ", we know this is a characteristic of Industrial Software, So the popularity can be easily explained, developers prefer the less complex spring.io as opposed to EE which has the characteristic of Industrial Strength Software.
A very good example of product documents to Master these Java EE technologies including other related technologies Microservices, Microprofile, Docker, Kubernetes, getting you up to a professional Application development standard from the get go can be found here. The guides are meant to be simple step by step introduction to EE APIs still it is done so using advance Java concepts thereby improving you Java skills at the same. You can see that the product documentation are written with a view to make sure you are self reliant during your Framework mastering journey taking you from novice to professional.
The popularity of StackOverflow.com, is evidence of the unstability of Framework Technology the developers have to work with, mainly poor error handlers, I actually had a break in career because I felt that J2EE, which was new at the time including the accompanying development Tools will stabilise with time will become to par with two tier 4GL application generators. The IT industry had other ideas instead of devising better error handlers, they have devised StackOverFlow.com where you can lookup and shares with others experience of incoherent framework error messages. With new functionality being added to Frameworks stackoverflow will has become fact of life. StackOverflow does make a very good case for safety critical software developments environment where third party APIs are not permitted, along with concurrency. Can FREE StackOverFlow replace commercial product support ? Personally I find the possibility of your issue never answered disconcerting, Touch Wood so far I do a google search and that takes me to StackOverFlow.com with somebody already having already raised the issue followed by one or more resolutions offered. I believe this trend was originally started by Microsoft by releasing Beta versions and users reporting issues. The same people who used to make fun of Microsoft Windows Beta versions have now joined the trend. So if you a developer and find the software is unstable, well that is a trend, you should expect it.
The drawbacks I found with commercial Application Development products and their expensive training was of course you have to be employed, the best you could hope for for follow up training to maintain your skills was CBT(computer based training). I did consider at one time becoming an Oracle DBA so I used to spend as much as possible getting to know Database through the product documentation at my workplace. Oracle does have excellent product documentation and the error handler does truly makes you self reliant by showing you the cause and solution of errors. For error handlers and product documentation Oracle does set the standard.
The other disadvantage was lack of books for further continued practice to get better fluency. This is not an issue with Java EE there are plenty of books on these subjects and the only choice isn't to download limited time free trial products. There are also plenty of Opensource databases Industrial Strength databases like Postgres, second generation to Ingres. Whenever your are not developing just take out a book and learn some advanced features. You may be tempted to go back and change your code using the more advanced features you have just learned. The problem with using advanced features is that the software becomes more difficult to maintain for another developer, after you have left the project to go on to more exciting projects. So I do not consider it a best practice to use advanced features, but probably nobody will agree with me !. If to you a programming is another text parser and you wish to give JAVA the programming language Short Sharp learning treatment then Check out three important Java concepts to always keep in mind are deep copy , shallow copy and cloning. Understand Java Objects orientated behaviour overall is of course essential
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 and hardly ever successful. Framework technologiesaka Application Generators is to e-commerce applications what Ada was to the US defence industry. They are trying to make it easier to be successful in building large and complex systems. 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. The other 50% is meeting the stated requirements.
As both types of developers are going to be developing in Java then Java platform developers (C programmer) will cater for both developers. What this means is that you have a feature rich platform. Being too rich can lead to gluttony and avarice which is not a good thing or some call it batteries included. Sins are never good asset, this will likely lead Developers to temptation. Two examples I can think of is reflections and this feature which allows for dynamic generation of servlets. 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.
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 the second beginning with the second half being the business knowledge which you can now apply with the mastered technology.
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 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.
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 called this stage of understanding programming PROGRAMMING ENLIGHTENMENT. You are in possesion of a gift. BUT do not over estimate this gift because when working with large and complex system Business Knowledge , Use Case Knowledge is still critical when applying this gift.
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] and the other is to focus on the 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.
I have found there are two learning curves for application developers. The technology and the Use Case. The starting points for a business Application and a real time system are not the same, For sure these two different types of systems do have a starting points. The Entry point of a real time system is the initialisation of Hardware. The starting of a Business System is the break down of Data into microservices. The DataBase is then followed by the user screens and the logic behind the screens. Is it possible to automate a job roles or industry functions without understanding that role or function ?. The answer is an obvious NO, yet I have observed this approach on many occasion leading straight to disaster.
During a coding session especially on a framework one wants to make sure you eliminate any outside influences. So I have setup this environment, removing warnings of conflicts, i.e. duplicate SLFJ4 bindings due to running in Eclipse IDE. I can be sure now when ever there is unexpected behaviour due to experimentation of coding, I simply use my favourite key Combo CTRL + Z, I think I use it more than CTRL + C & CTRL+V
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.
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.
My journey into prototyping an application from a framework began when I was working a Visual Basic project from scratch. When I say scratch I mean from a brand new specification, not migration , upgrade or any of the kind. I had never done any programming in visual basic before this project. The reason I was programming in Visual Basic was because the Technical Lead who had years of experience in Visual Basic refuse to cross train. A few weeks earlier he was offered to go on a servlet engine course but he refused. I of course went. Two of us went and both of us concluded that there too many technologies to learn in a week's course to be in a position to start developing applications.
I working this Visual Basic project assessing the quality of third party APIs. I was downloading them , integrating the DLL in Visual basic and programming them to test their functionality, as per Technical Lead's instructions. While I was working on this project another line manager came and asked that I because I know C , my skills are needed on that project.
That project was a migration project from two tier thick client to thin client. We can say with certainty the project was headed in the right technology direction. The developers were busily coding away html or whatever. My task was to integrate backend services, find a way to send generated reports via emails , product's primary objective using Database procedure and database event trigger (listeners). Another rather strange aspect of the development tool was that it has an embedded server embedded web server. Embedded into the Database. I suspect the web application development tool was provided by a database company hence the development tool was a database centric tool.
I could see that careful consideration had gone into the planning of this project. For example somebody had realised that the user processing will now shift from user PCs to the server Machine, and as such they used a MainFrame, a hardware solution rather than a software solution. Projects also have deployment problems,to solve this issue the development was done on the production mainframe. That is to say you simply unplug the mainframe put it on a truck or relevant transport and deliver it to the customer and plug it back into the mains wall socket. The users had web browsers pre-installed on their PCs so no need to for any other deployment. Such an approach would not work for every project but it was an effective method for this Intranet project. Obviously this project did not have the characteristics for it to be qualified to be categorised as Industrial-Strength Software.
I had not programmed in C for five years. I was taught C and unix by Mr Dimitri. Mr Dimitri demonstrated the power and versatility of the unix scripting, hands down beating DOS, you can almost programme with unix scripts. The issue I had with doing the programme in C was that although I knew and understood the concepts as taught by Mr Dimitri, concepts once understood are unforgettable, I couldn't for the life of remember the syntax. So given the circumstances you know the concepts but can't remember the syntax what do you do ? The answer is obvious. Leave notepad (vi) at home get the IDE (intellisense) out, it will help you with syntax. You can also use the error messages, obviously you have to work out the logic yourself. That's exacty what I did and completed the task given to me.
To do the development on the production machine. I woud have to install the IDE for both coding and compiling. The MainFrame had only the bare minimum software installed on it, Microsoft OS and Database, because of the deployment concerns, avoid any unknown conflicts,bugs. The thinking is that the more software you install the likely to invite problems. As soon as I clicked the install.exe the installer crashed with an incoherent message "04xxxxxsfhhjgcdy" What do you do now ? DOCKER the virtual environment to safeguard against unexpect6ed deployment issue ALSO comes with a bare minimum operating system, Alpine (5MB). I can assure you from what the solution I came up, the answer is not to install the bare minimum Operating System if you want to avoid deployment issues. One could say the philosophy behind installing bare minimum software is, the more software you install the more trouble you are inviting. This is the opinion and the approach based on the aforementioned philisophy by IT experts.
Although I completed the integration task the limitations of the database centric application development Tool did not allow me to it the way I wanted. There was no way to report back to the user whether the loosely coupled service (Mail server) had completed successfully. Mail server is usually very reliable and I had tested the whole thing to show it worked to the project manager. Not being able to capture the return type across the services bothered me so I decided to a prototype. For this endeavour I went looking for Tools, the first tool I found was apache web server followed by tomcat apache application. Then I bought a book where I found a set of instruction showing on how to get the two talk to each other, another words load balancing. This of course was the software solution to the hardware solution of using a mainframe.
The flaw in this commercial product finally answered my first and most burning question I asked when I became fluent in the C programming during my HND course and asked let's see how they do it the commercial world. The answers I found was that there are big variations, some employers do it very well while others do a terrible job. Those who do a terrible job think developers are a different species who understanding only in programming code. There are also porgrammers who bury themselves in the computer monitor creating I don't know what, but it can't be anything to do with the real world wants. Some employers treat the developers as disposable code generator and these employers who do a terrible job make no attempt to understand how to take care of developers and their attitide is to get somebody else to do the job, the developer.
Coming back to the Visual Basic The technical Lead's approach, it was completely wrong. He was plateau'ed out. He completely discarded the Analysis and Design phase as if that wasn't part of the project, was too busy coding screens like login , menus screens etc. Phil the visual Basic programmer's approach was exactly the same as Phil the contract tester I came across at Smiths Aerospace and defence division. They both ignored the requirements and headed straight for the coding. I was also fore warned against following developers like Phil by the project manager at bytel, my previous place. Once again I found myself in situation where it seems I was the only one who knew what to do. I was getting acquainted with dynamic web application while others in a software house were unfamiliar with the term Serverside. Phil the Visual Basic programmer was right about one thing one should focus one framework Technology so he was right not to do the servlet course. If he had done Analysis and Design then I would also become a visual Basic programmer. What is the point of learning something new from my Junior wrongly employed as a Senior Technical Lead ?
So I had to become a self starter making my own decisions on technology and frameworks I want to master. It has been a hard choice because I have been lucky enough to have picked up so many pearls of wisdom. Building a protoype cannot be done from cookbooks. It is done from experience, not just any experience, must be combination of both GOLD standards experience and DNF experience so you can both put and leave it out, not just put in everything you know but also discard what you should leave it out. You will have an eye for it. You will know when it happens to you. I have demonstrated I have an eye for it. When I was younger my hobby was playing Pool. I knew exactly where to the coloured hit ball with the white ball. One day a watcher of my game said I have an eye for it. That is how I feel about application development.
Moving on from my RMI-Base prototype. The next task I set myself is to get the browser displayed page to behave as a JFX/Swing swing screen behaves. That is to say the user has at his disposal the backbutton, forward button, refreh button, url address text box and even turn off the browser and come back expecting the page to be available, the server page may been updated due to a newer build. None of these unpredictable behaviours are issues with javafx/swing screen. You can call this task validation, I like to think of it as Customer Care. Already I have gone out of the Java EE framework, trying different combinations of code, testing the framework code supplied for me, application developer by the World wide web consortium.
One thing I can say for sure, I am amazingly happy with all the Java Development Tools and the remarkable stability I am enjoying.
This Coffee Bean Shop protoype is answering the another one of my most burning questions I had for building dynamic web applications because I am transitioning from two tier fat client architecture to thin client N-tier. Along with RMI-Based protoype, this is the other feature which is I would not have encountered before, the rest of the features offered by dynamic web application generators should be the same as any two tier application generator.
Another world first I put the annotations exactly where they belong, I found it a home, between the access modifier (private,protected, public) and the class name. An object has Identity, state and behaviour. The annotation(s) can be put in that place at class, member and method level. This way one see at glance what the annotation is doing and to what instead of the annotation sitting at the top as if the annotation is homeless. My programming shows understanding and applying that understanding not copying and pasting. Every place you look on the internet, online documents, books you will find these same annotations sitting on top like orphans, that's copying and pasting.
GOTO statements are forbidden in 3GLs but I found a use for it. It is probably noticeable I have used code which is normally used to count the number of hits to a website. This highlights the importance of using Naming Conventions. Unfortunately a CEO may find out it only takes five or six lines of Application Generator code to setup an e-commerce website for selling goods and services and you may be inline for a salary reduction. Sorry ! but I am must illustrate the benefits of using an Application Generator.
I don't agree if we mark the class with the decorator annotation @SessionScoped that we have to implement interface Serializable. The application generator should do whatever it has to do, apply the appropriate algorithm, to make the class SessionScoped
The code for handling user pressing backbutton or forward button to make sure user's order is not effected. This functionality is outside the scope of the Enterprise Edition and other dynamic web application generators. Handling the browser backbutton is application generator agnostic. Choosing the domain name backbutton allows one to write a sentence with the words application generator agnostic, especially the word agnostic and ofcourse application generator is the theme of this website.
Although the code works in the eclipse internal browser, I will be looking for some code which does not refresh the whole page but just the part I want same as the f:ajax button I am using for guaranteed good user experience. With this the web part of my protoype is complete. May be find code to force a f:ajax button to click for better bandwidth usage.
Conversational State; The coco bean shop is a demo of conversational state,
that is to say different pages can converse at a session level (pass values arounds between pages).
This is the difference between a stateless EJB bean and stateful EJB bean.
The computation engine, [CounterBean.incrementCounter] also runs in the same application server as
the servlet container because it is a backing bean (class,object).
This can become a problem and slow down the application because every time a servlet request comes in
a new thread is launched to service the user. So if the same CPU(s) are servicing the servlet requests
and instances of business logic, the computation engine(workhorse, heavy lifter),
this means more work is sliced (by operating system) for the CPU channels.
The logical solution is to take away the computation engine (heavy lifting)
away from same CPU servicing instances of servlet requests.
So now we have to have a remote coco Bean aka EJB, Enterprise Java Remote
Bean. For remote EJBs to service multiple xhtmls (servlets) in a session management manner we need conversation state.
The EJBs capable of having conversational state are marked with @Stateful annotation.
Where we only need to remote computation engine we mark that class as @stateless and are discarded by EJB container.
This ability to have remote computation engine means we have another form of
With this type of EJB load balancer we can also have a microservice application development with smaller codebases
unlike the mod_jk load balancer which has multiple copies of the same single codebase resulting in a monolithic application.
I believe microservices is a reatively new approach. :)
Obviously working with a smaller codebase is easier than working with a larger, but sometimes you wish communicate between the smaller codebases (microservices) running remotely on application servers (i.e. tomcat), some kind of messaging software which appear to be event driven sounds ideal. Each microservice can listen for and pick up the data received from the event or send data to a holder (broker). This way all microservices with smaller codebases are easier to manage for developers and at the same time functioning autonomously. Sounds like a method which taks on an approach with characteristics of simple, easy, flexible to apply to a complex problem.
The components needed for a microservices were always available in the original J2EE but the approach of microservices is new. I can only think develpers transitioned from two tier to three tier with the same mindset. hence mod_jk became the defacto load balancer.
If the experts at tommee understood the meaning of converstional state then they would have an example showing that as I have demo'ed. The folks at tommee have gone to alot of trouble to write many many many unit tests. tommee's examples of monotone unit tests serve absolute no or little useful purpose. The folks at tommee have formed a company called tomitribe where they offer commercial support , I presume to application developers. Looking at their monotone unit tests, taking them twenty years to do, I think contracting them for commercial support, in a pig's eye.
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.
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.