Waarde uit JPasswordField halen

Een kleine tip voor mensen die de tekst van een JPasswordField willen halen. De getText() methode is deprecated dus moet je het als volgt gaan doen.

String wachtwoord = new String(passwordField.getPassword());

De getPassword() van JPasswordField geeft een array van chars terug waarvan je dan een String object van maakt. Let op! Gebruik niet de toString() methode van de array want die geeft het adres terug van die array.

Java Persistence API: annotations

Java Persistence API (JPA in het kort) is eigenlijk de API die ervoor zorgt dat je je objecten kan opslaan in databases. Bijvoorbeeld je hebt een database voor liedjes. Je hebt een songs, albums en artiesten tabel. Daarin zitten bepaalde kolommen die dan per record waarden krijgen. Nu is het zo dat ik in me opleiding een basis gekregen heb van JPA. Daar leerden we enkele annotaties kennen als @Entity en @OneToMany. De annotaties zeggen dat die klasse een tabel is en dat de properties van de klasse de kolommen zijn. Nu heb je ook dat je relaties hebt tussen objecten en tabellen. Bijvoorbeeld een liedje kan in meerdere albums voorkomen en een album kan meerdere liedjes hebben. Dat is een ManyToMany relatie. Een andere relatie is een OneToMany (of ManyToOne) relatie. Voorbeeld is dat een song een artiest heeft en een artiest kan meerdere liedjes hebben. In SQL vorm en met behulp van ERD toestanden wordt dit als volgt weergegeven.

Nu is het zo dat ik al ontwikkelaar altijd eerst de database ontwerp doe en dan pas de software eromheen ga maken. Nu had ik een ERD gemaakt en alle tabellen aangemaakt en dan komt de ontwikkeling in Java. Omdat het mijn eerste grote toepassing is in Java met combinatie van een database, zat ik mij af te vragen of ik geen JPA kon gebruiken (want zelf een ORM maken neemt dan terug veel tijd in beslag). Ik had al een basis kennis in me broekzak en wist dat JPA eigenlijk nogal een eigenzinnige manier heeft van namen te geven aan tabellen en kolommen. Ook had ik geen zin om de structuur aan JPA over te laten maar JPA moest mijn structuur volgen. Dus die naam gebruiken voor die entiteit en die namen voor die kolommen en de relaties moesten zo gaan noemen. Dus ik ging op zoek hoe ik dat kon doen. Ik vond dingen als @JoinTable en @JoinColumn voor de relaties en @Table en @Column voor de namen van tabellen en kolommen.

Laat ons eens beginnen met de code te geven die Netbeans maakt als je een entiteit maakt.

Song.java
Album.java
Artiest.java

Je ziet dat er relaties zijn. In JPA moet een relatie altijd een eigenaar hebben. Je ziet dat er soms staat mappedBy en dan een naam. Dat is de naam van de klasse property die de eigenaar is van de relatie. Zo weet JPA dat aan de andere kant van de relatie naar die mappedBy moet gekeken worden om zo de corresponderende objecten te vinden.

Nu willen we dat de tabel namen en kolommen gelijken op onze ERD. Dit is belangrijk want als die database al in gebruik is door andere toepassingen, dan willen we niet dat JPA alles gaat verknoeien door zelf namen te geven. Ik heb de code nogmaals gepost met de annotaties erbij en in commentaar staat er uitleg bij.

Song.java
Album.java
Artiest.java

En nog een screenshot van de tabellen en kolommen die gemaakt zijn.

Voor meer uitleg of vragen kan je altijd een reactie nalaten hier.

Metasploit

Voor het vak computer- en netwerkbeveiliging moesten we een opdracht maken. Ik heb gekozen om eens een exploit te doen met Metasploit. Dat is een framework dat exploits bevat die je lekker kan runnen. Het leuke eraan is dat je code aan de exploit kan toevoegen die uitgevoerd wordt op de slachtoffer zijn computer. De leukste payload is degene die een shell sessie opent bij de slachtoffer. Kan je leuk commando’s uitvoeren op zijn computer. Anyway, ik heb een exploit gedaan omtrent Java. Maar meer kan je zien op het filmpje. Enjoy.

Java vs .NET quote

Vandaag een leuke quote/verhaaltje/mopje gevonden over Java en .NET.

A group of 4 Microsoft .NET programmers and a group of 4 Java programmers are going on a train to an expo. The MS programmers buy a ticket each, and then watch the Java programmers proceed to buy one ticket between them.

The MS programmers are intrigued and when they get on the train, they watch the Java programmers to see what they do when the guard comes to check the tickets. It turns out that, before the guard comes, they all cram into the toilet. The guard knocks on the door, and asks for the ticket. The guard takes it from under the door, and slides it back.

The MS programmers are all impressed, so on the way back, they buy only one ticket. Only to watch the Java folks get on the train without buying a ticket at all.

When they get on the train, the MS people cram into the toilet, as they saw the Java folks on the earlier journey. The Java programmers then knock on the door, and say “Ticket please”. The MS programmers slide the ticket under the door, as they saw the Java programmers do earlier.

“Thank you”, they say. “You steal our methods, but you don’t understand them.”

Mindios in JSP

Owja Mindios is voor de 101ste maal herrezen en ditmaal in JSP vorm. Voor het vak Internet programmeren moeten we voor het examen een site maken in JSP/JSF of Flex met Persistency. Ik ga daarom Mindios implementeren in JSP met mijn eigen JSP mini-frameworkje dat ik in februari gemaakt heb.

Eventjes over het project zelf spreken. Met Mindios kan je projecten beheren. Daar valt onder om een team samen te stellen van verschillende levels (developpers, testers, …). Dit kan doordat mensen zich aanmelden bij jou project. Jij plaatst een advertentie waarop leden kunnen soliciteren. Er komt ook een soort van tijdslijn met taken op die moet voldaan zijn. Taken worden toegedeelt aan een team of teamleden. Je kan dan ook bepalen dat al die taken moeten voltooid zijn om je project te releasen. Een release bestaat uit een aantal downloads voor platformen. De projectleider kan die release uploaden als de taken voor die release voltooid zijn. Daarnaast heeft ieder project een wiki pagina met daarin standaard categoriën als bugs, tutorials, FAQ, …

Eind deze week moet 80%-100% af zijn.

MultiExplorer 1.0 final release

Het is zover…de final release van MultiExplorer’s eerste versie. Er zijn nieuwe bestandtypes toegevoegd, een nieuwe beeld, opties bovenaan om bestanden/mappen te verwijderen, aan te maken, kopiëren, plakken en te hernoemen. Er zijn ook een aantal bugjes uitgehaald. De menubalk is ook weg omdat er maar één functie was, namelijk een nieuwe tab openen. Dit is vervangen door een plus-icoon-tab achteraan de andere tabs (inspiratie door Firefox). Foutmeldingen worden zoveel mogelijk zelf opgelost, de fouten die nog niet automatisch worden verholpen worden getoont in een venster met de boodschap. Standaard worden de bestanden van de huidige gebruiker getoont van deze computer.

De kopieer/plak functie werkt volledig maar heeft jammer genoeg geen progressbalk. Dus grote bestanden kopiëren kan lang duren. Wanneer je een bestand kopieert, dan wordt de “plakken” knop actief in alle tabs. Dit betekent dat je dit bestand kan plakken in alle tabs. Je kan gerust van PC naar FTP plakken en visa versa maar ook van PC naar PC en van FTP naar FTP. De functionaliteit hangt niet af van het soort data provider.

Wat komt er nog? Ik ga na de examens hier een Google project voor oprichten, ga wat uitbreidingen toevoegen:

  • Zoekfunctie
  • Mappen kopiëren en plakken
  • Progressbalk voor acties die aan het uitvoeren zijn (files deleten, plakken, van map veranderen, …)
  • JTable gebruiken in plaat van JList zodat het beeld “Tegels” de bestanden naast elkaar kan plaatsen.

Download: MultiExplorer2Final.jar (801 kB)
MD5 checksum: 4faa22f31e69de3727bc5d314e5690ec
SHA-1 checksum: 3974f30b574339522216d9412c501715aab48a03

MultiExplorer RC1

Jup jup, ik zit niet stil. Het gaat goed mijn MultiExplorer. Het enige wat ontbreekt zijn features als mappen aanmaken, bestanden openen met een extern programma afhankelijk van het type bestand,  kopieren/plakken van de ene tab naar de andere tab en een “Map aan het openen…” lader. Die lader is nodig voor verkenning via netwerk en dit traag kan gaan. Deze features worden zondag met de final release toegevoegd. Ditmaal een screenshot want de vorige keer was ik dit vergeten.

Download: MultiExplorer2ReleaseCandidate.jar (536 kB)
MD5 checksum: e50b8a18b55fcb515cb8983f667d45e6
SHA-1 checksum: b917c04f0d84331e7bbae22c2e481ada78b7eb01