mercoledì 6 settembre 2023

Passare a wildfly 27 e java 20 con applicativi j2ee (war/ear sarcazzo)

Intanto scusate perche' era un po' che non scrivevo, ma essendo pesantemente su microservizi c'e' poco da scrivere (seguira' un altro post dove dico cosa ne penso)

Premessa: avete un applicativo j2ee scritto per wildfly 10/18 $sarcazzo con jdk8/11 e funziona.

siccome aggiornare e' necessario (anche se tragico a volte) vi trovate nella situazione che se deployate il vostro applicativo avete una fraccata di errori. E' dovuto al fatto che son passati per puro sadismo da javax a jakarta.

Quindi tutto quello che e' sotto javax semplicemente non funziona.

Come fare a migrare in qualche piccolo semplice passo

  1. sostituite tutto quello che e' "javax*" con "jakarta" (si anche la roba sul persistence, sull inject etc)


  2. ho detto TUTTE anche sulle entity! Sui ws, sui dao. TUTTE.
  3. AGGIORNATE LE LIBRERIE (soprattutto quelle che generano roba al runtime tipo mapstruct)
  4. guardate se il vostro jql fa uso di query implicite (es. from $entity) perche' di default non e' permesso o lo cambiate o aggiungete una property al persistence ( <property name="hibernate.jpa.compliance.query" value="false"/>)
  5. testate testate testate e non fatevi abbattere da eventuali errori in console, guardatevi lo stack guardate cosa l'ha causato e passate all'errore successivo...

martedì 7 settembre 2021

Windows non riconosce penna USB

Mi si presenta un'amica e mi dice che il computer non le riconosce la penna usb (con le foto di whatsapp fatte dal nipote).
Il mio primo pensiero e' che non fosse in fat32 (tipo il nipote ha una mela o robe simili). Viene portando sia la penna usb che il portatile. Ok.

Attacco la penna usb al suo pc per vedere che razza di errore desse ed in effetti windows mi dice che la penna usb e' brutta, che fa schifo, gli fa male (ok non era proprio questo il messaggio).

Prendo il mio fidato debian e la penna si apre.
Prendo gparted per sentire cosa dice e laconicamente mi risponde "fat32".

Ok. Buco usb guasto. Prendo un'altra penna usb (mia) l'attacco a quella porta usb e funziona.
NON e' la porta usb.

Per sfizio provo un'altra porta usb con la sua penna usb e...


...funziona.

Morale: anche quando funziona tutto windows ci mette del suo per complicarti la vita...

lunedì 24 maggio 2021

1918 I giorni del coraggio - recensione



Allora premetto che sicuramente sono io ad essere ipercritico. Ok?

Bon per cui se siete arrivati fin qui intanto grazie.

Trama del film molto gracilina: nel senso un giovane ufficialetto che ha degli "agganci" (zio generale o giu' di li) si fa assegnare all'unita' di un suo amico. Invece di infrattarsi in fureria si fa sbattere in prima linea per stare con questo tizio che gli broccola la sorella. Arriva un attacco tedesco e muore.
Fine.

Nessun personaggio viene "approfondito" vengono presentati come se tu li vedessi se fossi li in trincea (che potrebbe pure andare bene se fosse un documentario, ma nemmen troppo, nel senso ogni soldato e' una persona con la sua storia i suoi sentimenti, ed e' molto piu' interessante se te li fanno conoscere).

Il film copre TRE GIORNI la scenografia e' sicuramente ben costruita e pure gli effetti speciali. Ma tolti quelli non rimane assolutamente niente.

La sorella "broccolata" si vede solo a fine film per dire.

Quindi, nonostante non si sia lasciato ad andare ad eccessi di iperbole (tipo midway per citarne uno) e si sia mantenuto ad uno stretto realismo, questo realismo è fin troppo eccessivo (per il mio gusto), avrei appunto apprezzato qualche "digressione" qualche approfondimento sui personaggi (almeno quelli principali).

mercoledì 10 febbraio 2021

Profonda conoscenza di cosa


Link all'annuncio originale

Oggi stavo lurkando un po' per annunci, vi tralascio i soliti (tipo quello che vuole esperienza su tutto lo scibile umano tipo j2ee ed angular - che se uno si dedica ad angular di solito fa frontend, mentre se e' bravo in j2ee di solito e' un backandista ma non cominciamo). Quando mi sono imbattuto in questo...

Java nasce "basandosi" sul C, infatti molti costrutti e sintassi sono simili. Pero' nell'intenzione di chi l'ha sviluppato era di migliorare certi aspetti del C, tra cui i puntatori.
In molto soldoni in C sei tu che allochi (e deallochi) la memoria per una variabile. Se te ne dimentichi possono sorgere problemi.

In Java questa cosa e' gestita automaticamente dal garbage collector, ovvero lo "spazzino" che se serve (e solo se serve) si preoccupa di andare a far pulito della roba allocata ma non utilizzata.

Come dicevo e' un processo totalmente automatico e trasparente, non e' una cosa che un programmatore debba gestire.
Quindi chiedere profonda conoscenza di come funziona il garbage collector "mi fa strano" per il semplice motivo che e' qualcosa che non userai mai, a meno di non andare a lavorare per Oracle...

giovedì 4 febbraio 2021

Non e' esattamente il solito post

Piu' che altro un rant... Anzi due...

Primo la storia dei microservizi (in ambiente dockerizzato). Sinceramente non capisco questa moda (non so come altro definirla). Posso capire di evitare monoliti, ma se devi esporre tot WS non capisco il senso di avere un progetto per ogni ws esposto.
Si certo li puoi mettere su macchine separate, ma comunque avrai che se la macchina X e' down quel servizio non e' raggiungibile, a meno di non avere 2X macchine.

Se invece ho un applicativo solo replicato su un cluster, ho lo stesso un numero di macchine superiore a 1, ma ho due grossi vantaggi. Non c'e' un servizio che va giu, se va giu' va giu' tutta la macchina e un'altra identica prende il suo posto. Questo vuol dire che ho tutti i ws in continuita' di servizio.
La seconda e' che i cluster hanno meccanismi per comunicare tra le macchine (load balancing, replicazione dei job, keep-alive etc). Questo vuol dire che se un ejb o un job non deve andare giu' in un cluster ho la possibilita' di "spostarlo" sulla macchina viva.

Mi da' l'idea di qualcuno che voleva fare un cluster ma non sapeva come fare, per cui ha ripiegato sulla soluzione "semplice" (che poi da' anche piu' problemi).

Qual'e' il problema? CHe non usano un server (in realta' lo usano ma non lo sanno), usano spring boot (che ha dentro tomcat). In teoria spring boot "fa tutto lui" tu dovresti solo concentrarti sullo scrivere codice.

Non che ci sia qualcosa di male ad avere un programmatore concentrato, e' il resto il problema. Un programmatore non dovrebbe saper solo programmare, non dico che debba essere un sistemista, ma devi avere una certa comprensione di come funziona tutto quello che non e' codice. Per il semplice fatto che ti ci devi interfacciare.

Spring ha il grossissimo problema (non solo lui, tutti i tool che sostituiscono qualcosa) di mascherare il funzionamento di quello che c'e' sotto (con il peggiorativo che in ambiente J2EE finisci per usare tomcat che e' un servlet container). Quindi finche' funziona tutti contenti. Quando poi ci sono problemi e' molto piu' complicato sapere dove intervenire proprio perche' non hai immediatamente accesso alla struttura sottostante, ma c'e' spring che ti maschera gli errori.

Se poi aggiungi che chi ha sempre usato spring non ha una grande comprensione di come funzioni l'ambiente in cui il suo sw gira (per forza di cose). Il danno e' dietro l'angolo.

Nel mondo dello sviluppo web sono state fatte un monte di framework carini (es jsf). Il problema e' che sono sempre framework. Alla fine si tratta sempre di pagine web (html + js o jsp) e che lavori sempre con le servlet, c'e' una request e una response, anche se non lo vedi.

Per carita' e' infinitamente piu' comodo trovarsi i valori nelle variabili gia' "infilati" senza doverseli estrarre dalla Request, pero' conoscere come funziona "sotto il cofano" puo' darti una mano nel capire quando si verifica un problema.

Wildfly ha una gestione "alla linux" ovvero ci sono i suoi file di configurazione e tramite un banalissimo editor di testo puoi fare tutte le modifiche che vuoi (a server fermo). E' stabile e potente.

Di tomcat dico solo che non conosco nessuno che non lo riavvii almeno una volta al giorno.

Quindi? Niente ridatemi wildfly...

domenica 31 gennaio 2021

Quando le decisioni sono prese da incompetenti

...e che non ascoltano chi le cose le sa...

Ma andiamo con ordine. Ero ancora presso $ente - per "risolvere" un problema (che francamente non ricordo), l'hosting partner propose di cambiare versione di oracle dalla 10 alla 12.

Studiamo cosa cambia, ci facciamo fare un db di "prova" uguale a quello di collaudo, facciamo tutte le prove che dobbiamo, ci studiamo cosa dobbiamo cambiare, il dialetto per hibernate etc etc... La cosa e' fattibile e lo diciamo alla $capa.

$capa era di quelle persone con un sacco di certificazioni ma nessuna competenza tecnica, pochissima capacita' di ascolto, presunzione di essere un essere semi-divino e soprattutto convinta che gli altri cercassero costantemente di fregarla.

All'epoca il mio suggerimento fu di pianificare questa migrazione, in modo da capire cosa ci fosse tra le nuove features del 12 che non erano sul 10 e che avrebbero potuto venire a nostro pro.

Il db era parecchio grosso (peggiorato dal fatto che qualche genio aveva deciso di usarlo pure come storage di file), tabelle di 100 milioni di righe erano pressoche' normali.
Una feature molto utile del 12 sono le tabelle "partizionabili" - ovvero divise per un certo "criterio". Tipo se le partizioni per anno, puoi fare una select solo sulla partizione dell'anno che ti interessa senza dover per questo cercare su tutta la tabella. Questo riduce la select su un numero di righe molto minore migliorando drasticamente le prestazioni.

Ma ovviamente la $capa decise che avevamo furia e quindi questo passaggio dovesse avvenire a parita' (quindi vanificando il senso del cambio versione) e che eventualmente ci sarebbe stato tempo "dopo" per i miglioramenti.

Dopo. In un ambiente di produzione? Chi si metterebbe a fare certi cambiamenti?

Quindi il cambio versione e' servito sostanzialmente a cambiare versione ma non a migliorare. Perche' gli strumenti messi a disposizione dalla 12 non sono stati usati, e la 12 viene usata come fosse una 10. Prestazioni identiche, problemi non risolti e via.

D'altra parte non dovrebbe stupirmi, quando feci presente il problema di tenere i file su db mi fu risposto "quando non c'e' piu' spazio ne aggiungiamo".
Tipo microsoft insomma...

giovedì 28 gennaio 2021

Domanda ai negazionisti

Allora lasciamo perdere le testimonianze TUTTE concordi dei reduci.

Lasciamo perdere anche quelle dei sovietici (e americani) che hanno liberato i lager e hanno visto e fotografato.

Lasciamo perdere le testimonianze fotografiche di Brasse.

Lasciamo perdere le testimonianze dei Sonderkommando sopravvissuti (Shlomo Venezia per dirne uno)

Lasciamo perdere tutte le costruzioni ritrovate (dei crematori, lager etc).

Lasciamo perdere le testimonianze dei nazi (Hosse p.es).

Ammettiamo che le ceneri ed i reperti ritrovati siano falsi (notare la genialata, ti servono resti umani bruciati per simulare che siano stati bruciati degli umani)...

...ed ammettiamo che per un momento sia tutto falso. Quindi le camere a gas costruite dopo dagli alleati per screditare i nazi, i testimoni in qualche modo "convinti" a fornire una versione concorde (e nessuno che a distanza di 50 anni che parli o che venga fuori la falsificazione ma vabbe'...)

Dicevo, ammettiamo un secondo per ipotesi tutto questo. Ma tutte quelle persone scomparse (dai 3 ai 7 MILIONI) dove CAZZO SONO FINITE????
Prendiamo un numero "mediano" (5 milioni). Su una popolazione come l'italia sono c.ca 1 persona su 10 che scompare nel nulla.
Ti scompare qualcuno che conosci ogni 10 e nessuno si preoccupa dove siano finiti?

5 milioni di persone che nessuno sappia dove sono finite...
...ok...