Wednesday, April 23, 2014

Java EE7 and Maven project for newbies - part 1 - a simple maven project structure - the parent pom


Why ?

Many times, I am trying to resolve several basic or complex Maven /  Java EE  project structure issues, on my day work. In order to provide the solutions,  I often end up   experimenting with the project structure, test my deployment on different application servers and fine grain my configuration.
Maven can have a steep learning curve for newcomers and if you add in the mix the 'sometimes' complex configuration requirements of a modern Java EE application, the things get more frustrating. I have also seen in my career, that lots of junior java developers, when they join a big team or project, most of the times the project structure is already fine grained and configured for them by more senior members. They assume that it works, and they dont spent time to understand the wiring and configuration. I have done this mistake myself in the past. They are being assigned simple coding tasks and they deep dive on requirements but unfortunately they forget  to study  the application structure.Their senior colleagues forget as well to train them on this particular area, most of the times due to time restrictions. This may lead to accidents when people start messing around  with the structure of the application with no previous experience, while trying to 'make it' work. Maven and it's conventions aim to help a lot on establishing common structures and conventions on how a project should be structured, but the again you need to understand the tool, the conventions and finally master your 'configuration'.

You can often hear someone saying 'I added this library there and it worked', if you reply 'define there', then you might get some interesting answers. Sometimes by accident or luck it works but in a complex multi-module application, most of the times 'it just works' is an  understatement and problems will start appearing soon enough.

This series of posts is targeting Maven and Java EE newcomers mostly, but feel free to share or use it as a demo if you are a more senior developer. I am going to 'attack' on a demo basis some real problems I happen to discover from day to day work and try to provide solutions while providing a basic explanation or links to related resources. Please feel welcome to add comments, corrections or references for something that can be performed / completed in a far cleaner way. The best way to learn Maven and create a 'complex' but easy to maintain application is to start from scratch, empty pom files.

The  main message I am trying to pass along to junior developers reading my posts is that 'studying' your application structure, asking about the underlying build tools is part of your work and you should never assume that someoene else is always going to take care of it. It is also a stepping in order to challenge more difficult tasks and improve your skills as a Java developer. 

Core technologies to be used

  • Java EE 7 based application
  • Will  be packaged as an EAR
  • Will be featuring multiple components (wars, jars, ejb jars)
  • Will be compiled towards Java 7
  • Will be packaged using Maven 3

My demo ear application

My application is going to be an EAR, for this particular post,  this ear is going to include 2 top level modules a war and an ejb-jar. There is also going to be a jar, that will contain the classes that will be my database domain model (JPA entities). I am going to expand the structure adding more resources in future posts. A very abstract image just to give an idea, illustrating what are going to 'include in our ear'. The war module in the future will contain servlets or jsf compoments, the services module is going to contain a set of common Stateless Sesson Beans (or Message Driven Beans). The domain project is going to have plain Java classes properly annotated with JPA2 constructs.

Composing the basic structure of our application using Maven

In order to build the ear above we need to define modules and the parts of our application, using Maven which is anyway our building/packaging/configuration tool. This is one of the most steps and if you get this from the start then the rest will be simple technicalities or configuration specifics. What I am proposing is not the ultimate solution but something very close to the standard which is most of the times the 'way to go' if you start a new app, so no funcy specifics here, let's follow the standard and start building on a concrete foundation.

So let's forget the image above at the moment and let's think Maven, what and how many modules may define, how to interconnect them and define dependencies. Note, my proposed way of work is the standard but it is not the ultimate solution , meaning you can achieve the same results by packaging your application as an ear, define fewer modules and dependencies. Let's assume that I want to cover highly complex structures so I will define a generic structure, always following the standards.

I assume that you have covered some basic stuff from Maven and you are at least familiar with the terminology.  If not have a look here.

Remember Maven is about, placing your files to the right places according to a well defined structure , and defining the maven plugins, which are some kind of tools to do specific things compile, package, copy files, etc. The plugins are being invoked by Maven, so yes again you need to define the plugins to the correct place and with the appropriate configuration. You are not writing your make or ant scripts, you just 'insert' plugins and ask maven to execute them in a well define order.

As good ex-colleague of mine (wrote in a email recently), it is good to break conventions in your life and in your coding, but never with Maven. He is right :) .

If you are not sure how to install maven, have a look here Windows  or Mac

My Maven Project Structure - Abstract

We are building with Maven, so we need to think in terms of maven pom (s) and modules. In order to create out required ear packaging (see above) we need 5 poms
  • A pom - acting as a parent 
  • A pom that will contain/define the final ear - responsible for configuring the final package.
  • A pom that will contain/define the code of the web application, meaning our .war
  • A pom that will contain/define the code of the ejb-module, the module that we are going to package our EJB(s)
  • A pom that will contain the classes that are going to be our JPA (Database Entities)

 As you can see, every module has it's own pom, and there is the parent, one of the things that still lot's of people do not add in their structure, assuming that they don't need it, since their project is small, and the after a while while more modules are being added, you end up with havoc. So make a note here ' the parent pom is really nice to have and configure'. This is the pom where you define all your dependency versions (that is libraries) and you configure the maven plugins, so that all the child poms, inherit a common configuration.

My Maven Project Structure - the Parent pom

As I have already elaborated we are going to start from scratch, so I am creating a new folder called 'sample-parent' and in this folder I add a new file called 'pom.xml'.

Yeap not excited, just make note on the  packaging element which is defining 'pom'.The parent is called parent, because it 'defines' and manages the children modules, this is done in the modules definition section. Our original pom becomes something like that. That means that we must create the related folders under our sample-parent, and then add a pom.xml to each one of them.

Let's continue adding some more configuration...
This is an important section since we define versions for
  • the maven plugins we are going to use and configure
  • any libraries - dependencies used and reference from other modules
  • other generic properties, like the version of the Java runtime we are going to compile
  • The default encoding for source files or other assets.

Let's add after the properties section, another important one, the dependencyManagement .This is where we will define the dependencies and their versions that can be potentially used in our application modules. In this section we actually care about the version, the inclusion or exclusion of the dependencies it is up to the child pom (meaning they are not added automatically), their scope as well. So the DependencyManagement section is the one to control, in one central place the versions.

Another last but important section in our parent pom is similar to dependencyManagemt is called pluginManagement, and is the section where we will define, the versions and common configuration of all the maven plugins that are going to referenced and used during our application configuration and packaging.In the sample below I have defined one of the most basic, the compiler plugin, but of course I am going to need more!

Let's add and configure some more plugins that we are going to use later on.Add those within the plugin management section. We define the ejb plugin that is going to compile and package our ejb(s) and the war plugin that is going to package our war.


That's for now

You can  download our minimal sample here (tag post1, bitbucket). At the time being, it seems that we have not completed anything, but eventually defining a clean and concrete parent pom, is going to be the basis for the rest of the work we are going to do in the upcoming posts. 

Points to study
  • the maven standard layout
  • the parent pom
  • the importance of dependencyManagement & pluginManagement
Continue to part2


Tuesday, April 22, 2014

Μετρώντας τα login pages των πιο γνωστών eBanking εφαρμογών στην Ελλάδα.

Ο φίλος @dikouv μου πάσαρε ένα ωραίο site το οποίο κάνει ένα page load analysis, παρόμοια με αυτή που μπορεί να κάνει το Developer Tools του firefox, το Response times, load times, assets loaded και size. 

Μιας και είμαι στον χώρο, τον τελευταίο χρόνο, είπα να κάνω ένα απλοϊκό test, για τα load times των πιο γνωστών eBanking  στην χώρα μας. Να σημειώσω για να μην παρεξηγηθώ, το συγκεκριμένο test δεν φανερώνει κάτι ιδιαίτερο (πχ ποιο είναι το καλύτερο ή το πιο γρήγορο) μιας και τέτοιες εφαρμογές έχουν πολλά 'layer' τα οποία μπορούν να το κάνουν πιο γρήγορο ή πιο αργό, από την web  τεχνολογία που είναι φτιαγμένο, το hardware setup (πχ μέγεθώς cluster), το που είναι hosted, σε τι συνθήκες, στην διαθεσιμότητα και δια συνδεσιμότητα του eBanking με το core banking αδερφάκι του, την αρχιτεκτονική και το co-location και των 2 και άλλα πολλά. Από ενδιαφέρον και περιέργεια μόνο.

Έχουμε και λέμε

Εθνική τράπεζα 
  • Login page :
  • Load time : 3.2 second
  • Page size: 396.2 KB
  • Server Side technology (Java, JavaEE, JSP frontends) 
  • Σχόλιο : Η σελίδα είναι κυρίως  στατική και minimal γι' αυτό και το μικρό μέγεθος σε  KB.
  • Login page :
  • Load time : 3.7 second
  • Page size: 729.8 KB
  • Server Side technology (Java, JavaEE, xhtml front-ends, JSF framework) 
  • Σχόλιο : Μ.Ο σε ότι έχει να κάνει με το page size, το θεωρώ σαν το πιο σύγχρονο σε ότι έχει να κάνει χρήση reference τεχνολογιών JavaEE (τουλάχιστον από αυτά που μπορώ να καταλάβω ή έχω ακούσει)
Alpha Bank
  • Login page :
  • Load time : 5.14 second
  • Page size: 1.3 M.B
  • Server Side technology (asp .net - Microsoft, aspx) 
  • Σχόλιο : Αρκετά μεγάλο page size (δεν ξέρω αν εχει γίνει λάθος στην μέτρηση;), παρατηρώ βέβαια εκτός από γνωστά js lib - πχ  jquery, και καποια extra με μεγάλο μέθεδος.
Τράπεζα Πειραιώς
  • Login page :
  • Load time : 5.51 second
  • Page size: 1.3 M.B
  • Server Side technology (asp .net - Microsoft, aspx) 
  • Σχόλιο :Έχει το ίδιο page size με της Alpha bank, χρησιμοποιούν και τα 2 σχεδόν ίδιες τεχνολογίες, αναρωτιέμαι πάλι αν υπάρχει πρόβλημα με την μέτρηση. Πάντως κι εδώ έντονη η χρήση extra JS libs εκτός από τα γνωστά. με κάποιο μέγεθος.
Σε όλα γίνεται χρήση jquery, διάφορες εκδόσεις. Σχεδόν όλα έχουν minified εκδόσεις των js lib τους. Σε ότι έχει να κάνει με τα images θα δεις, pnd, gif, jpg γενικά απ' όλα. Σε κάποια είναι έντονη η χρήση css (complex css) σε κάποια άλλα όχι. Κάποια από τα assets αυτά θα γίνουν cached locally, την πρώτη φορά, οπότε ίσως και να μην ενδιαφέρει το όποιο optimization. 

Όπως είπα δεν βγαίνει κάποιο φοβερό συμπέρασμα, απλά από περιέργεια.

Planet of Zeus- Vigilante- νέο album και support your local bands

Από απο της αγαπημένες μου Ελληνικές rock μπάντες οι Planet of Zeus, κυκλοφόρησαν το νέο τους album (Vigilante). Μπορείτε να το ακούσετε στο spotify εδώ και να το αγοράσετε όπως και έκανα για να στηρίξω την προσπάθεια εδώ (γίνομαι φανατικός του bandcamp). 

Μετά από μερικές ακροάσεις θα πω ότι μου άρεσε πάρα πολυ. Μελωδικά και σαν παραγωγή είναι αρκετά πιο δουλεμένο και πολύπλοκο σε σχέση με τις πιο 'raw' προηγούμενες δουλειές. Πiο πολλα και διαφορετικά ριφ, κομμάτια με εναλλαγές σε κιθάρα αλλά και φωνητικά.

Ξεχώρισα ήδη 2 κομμάτια  το No Tomorrow και το the Beast Within.

Ραντεβού στις  25/3 στο Gagarin για το live, αλλά και σαν support στην επερχόμενη συναυλία των Deftones, τα λέμε εκεί...μιας και there is no tomorrow..οσο έχω το beast within  ;)

Ακόμα μια κριτική του δίσκου θα βρείτε στο αγαπημένω αρκετών CrackHitler ;)

Μουσική απ' τον πλανήτη Δία.... 

Monday, April 21, 2014

Το αόρατο ρήγμα (Α.Δ) - ενα βιβλίο που έπρεπε να είχα διαβάσει νωρίτερα.

Τα τελευταία χρόνια με την κρίση, όλοι μας γίναμε με τον έναν ή τον άλλο τρόπο, οικονομολόγοι, διεθνολόγοι, κοινωνιολόγοι. Καθώς οι αλλαγές στην  εθνική μιας οικονομία γίνονταν όλο και πιο έντονες, βίαιες, όλο και πιο συχνά οι συζητήσεις μεταξύ φίλων σε έναν καφε ή στο οικογενειακό τραπέζι είχαν ένα και μόνο θέμα. Την κρίση, πότε θα βγούμε από την κρίση, ποιος φταίει για την κρίση, τα μέτρα την αδικία και όλα αυτά που πρέπει να ξεχάσουμε από τα παλιά. 

Προσωπικά δεν το θεωρώ κακό, από το να συζητάς για το πότε θα πάρει η Χ ομάδα πρωτάθλημα, για το τι κάνει η χ celebrity και πως θα αγοράσουμε το z gadget, ρούχο ή θα πάμε εκεί ή αλλού, είναι υγιές σημάδι ο καθένας με το ενδιαφέρον και τις γνώσεις που έχει να προσπαθεί να βρει απαντήσεις για την σημερινή κατάσταση. 

Βέβαια έχουμε και ένα σύστημα το οποίο απαρτίζεται από τους τωρινούς πολιτικούς οι οποίοι μας βομβαρδίζουν με την δική τους ατζέντα και προπαγάνδα, τα ύποπτα και πολλές φορές πληρωμένα μέσα μαζικής ενημέρωσης που αντίστοιχα σιγοντάρουν την ιδεολογία και ατζέντα του κάθε κόμματος και τέλος την κλασική εμμονή του νεο-Ελληνα σε πολιτικές ιδεολογίες και κατάλοιπα που τον ποτίζουν τα τελευταία 30-40 χρόνια. Ο καθένας συνθέτει την δική του άποψη για το τι πήγε λάθος, ποιοι φταίνε και και πως θα βγούμε από την κρίση. 

Δεν κάνω διακρίσεις, ο δεξιός φίλος θα πει φταίνε οι αριστεροί, ο αριστερός οι δεξιοί, οι ακραίοι ότι φταίνε όλοι + υπάρχει και διεθνής συνωμοσία. Πάω στοίχημα πολλοί από εσάς όπως κι εγώ προσπαθήσαμε να διαβάσουμε (κάτι το οποίο είναι αρκετά καλό, γιατί σημαίνει ότι προβληματιστήκαμε). Ψάξαμε τις θεωρίες των πατέρων της σύγχρονης επιστήμης των οικονομικών, τις αρχές του καπιταλισμού, τους φιλελευθερισμού, τους σοσιαλισμού κτλ κτλ. Από τον Adam Smith, στον Marx, στον Keynes , στον Friedrich Hayek και  Milton Friedman 
ονόματα που θα ακούσεις εδώ και εκεί πιο συχνά πια. Ακούσαμε και ασχοληθήκαμε και με πιο πρόσφατες απόψεις / βιβλία σύγχρονων δημοσιογράφων, οικονομολόγων ή star μελετητών της κρίσης, όπως τον Michael Lewis , τον N.Taleb αλλά και δικών μας όπως ο Γ.Βαρουφάκης ή ο γνωστός σε πολλούς internet-ικος μελετητής  techie-chan (φανατικός αναγνώστης). 

Είμαι σίγουρος ότι πολλοί από εσάς έχετε να προσθέσετε πολλά ακόμα ονόματα και βιβλία.  Εγώ κινήθηκα γενικά στα παραπάνω και ίσως είναι ένας λόγος που, ξεζούμισα το βιβλίο του Αρίστου Δοξιάδη  (twitter) μέσα σε μερικές ώρες μεταξύ 2 πτήσεων Αθήνα -Εδιμβούργου.

Δεν υπάρχει άλλο βιβλιο που να διάβασα τόσο αδηφάγα τώρα τελευταία, ο λόγος είναι ότι είναι πραγματικά μοναδικό στην περιγραφή και εξήγηση των προβλημάτων της ελληνικής οικονομίας. Είναι τόσο απλό και κοντινό σε απόψεις και βιώματα που έχουμε ΟΛΟΙ μας που κάποια στιγμή καθώς το διαβάζεις θες να φωνάξεις ΝΑΙ το έχω σκεφτεί κι εγώ αυτό, το έχω ζήσει κι εγώ αυτό, έχω αισθανθεί κι εγώ έτσι για την Χ ανωμαλία στην οικονομία.

 Αυτο είναι που λείπει απο πολλές καλές και κακές προσπάθειες άλλων να εξηγήσουν γιατί φτάσαμε εδώ που φτάσαμε. Ο συγγραφές όπως σωστά δηλώνει στην αρχή αντί να προσπαθήσει να συνδέσει την Ελληνική κρίση με γεγονότα έξω από το μικρό μας τοπικό περιβάλλον μόνο   (πχ την χρηματοπιστωτική κατάρρευση του 2008) και να δώσει έτσι μια εξήγηση για το σήμερα,  χωρίζει το βιβλίο του σε 3 κομμάτια (τουλάχιστον έτσι το κατάλαβα εγώ). Στο πρώτο κομμάτι εξηγεί γιατί η ελληνική οικονομία είναι μια περίπτωση από μόνη της και δεν μπορείς να εξηγήσεις την σημερινή της κατάσταση με θεωρίες και παρατηρήσεις μακροοικονομίας ή συγκρίσεις με άλλες χώρες. Ακόμα πιο συγκεκριμένα σπάει το ηθικό ταμπού που θέλει πολλούς πολιτικούς, δημοσιογράφους ακόμα και σήμερα να θεωρούν ότι τραβάμε ότι τραβάμε γιατί φταίνε οι ξένοι, οι άλλοι αλλά όχι εμείς. Η ελληνική οικονομία έχει παθογένειες (απτές και απλές) εδώ και πολλές δεκαετίες και πολλά χαρακτηριστικά της πάνε πίσω μέχρι την εποχή της Τουρκοκρατία όπως παρατηρεί και ο ίδιος. Αυτή η μικρή οικονομία με τις καθιερωμένες παθογένειες και χαρακτηριστικά (που δεν έγινε ΠΟΤΕ σοβαρή προσπάθεια ακόμα και στην σύγχρονη πολιτική ζωή του τόπου να αμβλυνθούν) μέσα σε ένα ευρύτερο παγκόσμιο σύστημα, κατέρρευσε. Δεν θέλει τεράστιες γνώσεις για να καταλάβεις γιατί κατέρρευσε και αυτό είναι ένα από τα πιο δυνατά σημεία του βιβλίου, οι εξηγήσεις είναι απλές, καθημερινές και με μια συνδυαστική σκέψη καταλήγεις σε λογικά συμπεράσματα.

Στο δεύτερο μέρος,  δημιουργεί ένα ' θεωρητικό πλαίσιο' - όπου θα αναλύσει τις παθογένειες της οικονομίας μας και πως αυτές επιδρούν στην καθημερινότητα μας αλλά και τελικά σχηματίζουν και την τελική μας κατάσταση. Στο τελευταίο γίνεται μια προσπάθεια να προτείνει λύσεις και αλλαγές που θα πρέπει να γίνουν έτσι ώστε οι παθογένειες αυτές να καταπολεμηθούν σε βάθος χρόνου και κάποια στιγμή βελτιωθούμε.

Μην περιμένεις μαγικές λύσεις, ούτε υποσχέσεις ότι σε Χ χρονικό διάστημα όλα θα πάνε καλά, αυτό είναι που μου άρεσε πιο πολύ. Η προσέγγιση στο πρόβλημα της οικονομίας μας είναι τόσο απλή κατανοητή και συνάμα τόσο ρεαλιστική που συνειδητοποιείς ότι πρέπει να αλλάξεις εσύ σαν 'μέλος' της κοινωνίας, , η πολιτική ελίτ που διαλέγεις εσύ να σε κυβερνά και η γενικότερη θεώρηση για το τι είναι φυσιολογικό για μια σύγχρονη οικονομία στο μέγεθος της χώρας μας.

Αν σε κούρασα με όλα τα παραπάνω ή τα έκανες skip, κράτα μόνο αυτές τις γραμμές, πήγαινε και αγόρασε το βιβλίο δεν θα το μετανιώσεις και μόλις το τελειώσεις δάνεισε το σε φίλους σου. Θα θέσει την επόμενη συζήτηση στον καφέ ή στο οικογενειακό τραπέζι, ή στην δουλειά σε πολυ πιο ρεαλιστικά πλαίσια αντί για τον σχολιασμό της κάθε λαϊκιστικής εξήγησής πολιτικών από την κυβέρνηση και την αντιπολίτευση ή του κάθε πληρωμένου δημοσιογράφου που εξυπηρετεί συμφέροντα. 

Wednesday, April 16, 2014

Monolord.... ήχος μόνο για άνδρες από την Σουηδία

Ο τίτλος του post, επίτηδες για να τραβήξει την προσοχή, και για κυρίες παρακαλώ.

Δεν ξέρω πως θα αποφασίζουν να ονομάσουν το είδος της μουσικής που παίζουν οι Monolord, είναι stoner;  είναι sludge; είναι doom, αλλά με το που άκουσα ένα κομμάτι τους, από την πρώτη δουλειά τους, σε μια playlist κάποιου Σουηδού που ακολουθώ στο spotify και μου έχει χαρίσει χωρίς να το ξέρει πολλά group και μουσικές που δεν θα τις ανακάλυπτα μόνος μου, ήθελα να φωνάξω, ΝΑΙ ΡΕ , ΣΠΑΣΕ ΤΟΝ ΕΝΙΣΧΥΤΗ, ΕΤΣΙ ΡΕ!!!! 

Αν έπαιζα σε μπάντα θα ήθελα να παίζω σε τέτοια μπάντα και με τέτοιο ήχο.
Φυσικά επειδή μου άρεσαν αρκετά είπα να τους υποστηρίξω στο bandcamp (καλή φάση, όπως έκανα πρόσφατα και με τους villagers). Θα τους βρείς και στο facebook.

Πάρε να έχεις....να ζήσει η Σουηδία!

Thursday, April 10, 2014

Αυτό το Σάββατο, έχουμε JHUG meet-up kαι μαθαίνουμε για τον Wildfly 8 (JBoss) #jhug #jboss

Αρκετές φορές κάποια μέλη από το JHUG μου λένε, δεν το έγραψες στο blog σου και ξεχάσαμε για το Χ, Υ event. Αυτό το Σάββατο λοιπόν, μιας και έχουμε αρκετό καιρό να τα πούμε, στις 3 (μ.μ) στον γνωστό χώρο του που μας φιλοξενεί τα τελευταία χρόνια (δωρεάν) θα έχουμε μαζί μας τον engineer manager του Jboss Application Server ή WildFly 8 αν το θέλεις, Δ.Ανδρεάδη για να μας μιλήσει για τις δυνατότητες του και να απαντήσει σε  κάθε ερωτήση.

Τα λέμε εκεί!

Wednesday, April 02, 2014

Villagers of Ioannina City

Καιρό είχα να ακούσω κάτι και να ενθουσιαστώ, πόσο μάλλον αν είναι κοντά στο είδος της rock που μου αρέσει δηλαδή stoner/sludge/fusion πες το όπως θες. 

Ακόμα καλύτερα όταν είναι από Έλληνες, οι οποίοι δεν σταματάνε εκεί και μέσα στις παραμορφώσεις και τα βαριά riff, προσθέτουν ελληνική παραδοσιακή μουσική. Stoner rock Γιάννη μου το Μαντήλι σου, ναι θα το πάρω, straight from Ioannina...

Είπα να υποστηρίξω τους Villagers στο bandcamp, (facebook) αγοράζοντας την δουλειά τους.

ps)Κώστα thanks δικέ μου!!!