giovedì 29 dicembre 2011

openshift: vedere lo spazio disco occupato

[UPDATE]

adesso c'è quota!!

è possibile aggiungerlo negli script client side (tipo post_deploy/pre_deploy) etc.



Al momento non c'è un comando che mostra chiaramente l'occupazione disco...
un domani forse verrà aggiunto tra le informazioni restituite da rhc-user-info -laccountname

Per ora, come recita:

https://www.redhat.com/openshift/community/forums/express/questions-on-express-quota
basta fare un login ssh 
ssh  $UUID@$HOSTNAME 

 e lanciare il comando:
$ du -sh ~ /tmp

( o simili 
http://www.magicmill.net/linux/grap/grap-11.html)
se lo spazio occupato è troppo alto, cominciate con le pulizie di natale con:
rhc-ctl-app -a nomeapplicazione -c tidy  -l account@gmail.com

openshift: vedere host e port

come suggeriscono nel forum:
https://www.redhat.com/openshift/community/forums/express/support-for-standalone-java-app


It'll be a port *and* IP you

It'll be a port *and* IP you need to bind to. Add the following to your .openshift/action_hooks/post_deploy script to see what you should be binding to:
echo "Bind to this port: $OPENSHIFT_INTERNAL_IP:$OPENSHIFT_INTERNAL_PORT"
Then use that IP and port for binding.

utile...

martedì 27 dicembre 2011

openshift: vedere il threaddump

prima eseguire il comando:
rhc-ctl-app -a appname -c threaddump -lxxxxx@gmail.com


e poi per rivedere il threaddump:

rhc-tail-files -f appname/jbossas-7.0/stdout.log -lxxxxx@gmail.com -a appname

verrò fuori qualcosa come:


Heap
 PSYoungGen      total 27136K, used 22338K [0x00000000fe000000, 0x00000000fff90000, 0x0000000100000000)
  eden space 22080K, 99% used [0x00000000fe000000,0x00000000ff588ad0,0x00000000ff590000)
  from space 5056K, 5% used [0x00000000ffa70000,0x00000000ffab8000,0x00000000fff60000)
  to   space 4992K, 0% used [0x00000000ff590000,0x00000000ff590000,0x00000000ffa70000)
 PSOldGen        total 64896K, used 34863K [0x00000000fa000000, 0x00000000fdf60000, 0x00000000fe000000)
  object space 64896K, 53% used [0x00000000fa000000,0x00000000fc20bd88,0x00000000fdf60000)
 PSPermGen       total 78656K, used 78637K [0x00000000f4200000, 0x00000000f8ed0000, 0x00000000fa000000)
  object space 78656K, 99% used [0x00000000f4200000,0x00000000f8ecb6b8,0x00000000f8ed0000)

per capire cosa sono:
http://javandoblog.blogspot.com/2010/08/per-chi-sviluppa-in-java-prima-o-poi.html

lunedì 26 dicembre 2011

openshift: che figata!

Sono anni che sogno di avere un jboss in hosting...e adesso con openshift è possibile!

adesso è possibile avere un virtual server a propria diposizione con mysql, phpmyadmin, 300 mega di ram e 500 mega di spazio disco:

Alcune highlights dell'ultima ora:

1) aggiungere un alias alla propria applicazione:
immaginate di comprare un nome per la vs applicazione su uno dei tanti rivenditori in rete, comprando anche l'uso del dns..a questo punto basta usare il comando:
rhc-ctl-app -a nomeapplicazione -c add-alias --alias www.hostname.org -l account@gmail.com

2) connesioni ssh al ns host:
rhc-user-info -l account@gmail.com

per ogni applicazione ci sarà un url git:
Git URL: ssh://xxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxx.rhcloud.com

ssh -t xxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxx.rhcloud.com

e voilà siete dentro la vs macchina:


Welcome to OpenShift shell

    This shell will assist you in managing openshift applications.

    !!! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!!
    Shell access is quite powerful and it is possible for you to
    accidentally damage your application.  Procede with care!
    If worse comes to worse, destroy your application with rhc-ctl-app
    and recreate it
    !!! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!!

    type "help" for more info.


3) pulizia dello spazio disco non +usato (tmp/log/git history)


rhc-ctl-app -a nomeapplicazione -c tidy  -l account@gmail.com


che farà le seguenti mosse:

Stopping app...
Running 'git gc --prune --aggressive'
Emptying log dir: /var/lib/libra/xxxxxxxxxxxxxxxxxxx/nomeapplicazione/logs/
Emptying tmp dir: /tmp/
Emptying tmp dir: /var/lib/libra/xxxxxxxxxxxxxxxxxxx/nomeapplicazione/tmp/
Emptying tmp dir: /var/lib/libra/xxxxxxxxxxxxxxxxxxx/nomeapplicazione/jbossas-7.0/standalone/tmp/
Starting app...


4) riavviare mysql:
rhc-ctl-app -a nomeapplicazione -e restart-mysql-5.1



utilissimi link per cominciare a giocare:



http://www.jboss.org/openshift/articles.html


da cui:
http://community.jboss.org/blogs/scott.stark/2011/08/10/openshift-expressflex-cartridge-comparision
http://community.jboss.org/blogs/scott.stark/2011/08/10/jbossas7-configuration-in-openshift-express
http://community.jboss.org/blogs/scott.stark/2011/08/10/differences-between-the-express-and-flex-jbossas7-configurations
http://community.jboss.org/wiki/TrackingThreadsInJBossAS7
http://community.jboss.org/blogs/scott.stark/2011/08/10/jbossas7-configuration-in-openshift-express
https://www.redhat.com/openshift/blogs/seeing-cdi-working-in-openshift
https://www.redhat.com/openshift/community/blogs/how-to-create-an-openshift-github-quick-start-project


importante:
http://jaitechwriteups.blogspot.com/2011/08/deploy-java-ee-application-on-openshift.html


pannello di controllo
https://openshift.redhat.com/app/control_panel




martedì 20 settembre 2011

jboss 7: non ci sono i quartz mdb..ma c'è @Schedule

come dicono sul forum ufficiale, " TimerService is already available in 7.0.1 "

http://community.jboss.org/thread/172213?tstart=60

I would suggest to change the MDBs to singletons (EJB3.1) and use the EJB3.1 Timer Service of JEE6. The migration should be quite simple if you do not rely too much on quartz


Per chi non avesse mai provato i nuovi timer in jee6:
http://blogs.oracle.com/arungupta/entry/totd_146_understanding_the_ejb

provare!!!

jboss7: creare servizi rest - json

In jboss7 è semplice creare servizi rest!

Per iniziare basta dare un okkio al progetto di esempio distribuito come applicazione di esempio:
https://docs.jboss.org/author/display/AS7/Kitchensink+quickstart

L'unica difficoltà incontrata, nasce nel voler generare contenuti di tipo json, ovvero segnando i metodi con: @Produces("application/json")
Il problema riscontrato nasce nel mapping di relazioni di tipo @OneToMany, o meglio nell'escludere queste relazioni dal mapping del risultato (evitando l'errore:
org.codehaus.jackson.map.JsonMappingException: failed to lazily initialize a collection of role
date un okkio a questo post sul jbo7 forum: http://community.jboss.org/thread/169352 )

Facciamo un esempio pratico...
Immaginiamo di avere due entity Percorso, Punto (un percorso ha una relazione @OneToMany con i punti che lo costituiscono).

@Table(name = "percorsi")
@Entity
@XmlRootElement
public class Percorso implements Serializable {
private Long id;
private String nome;
        private List<Punto> punti;
.....

        @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

       @OneToMany(fetch = FetchType.LAZY, mappedBy = "percorso")
@XmlTransient
@JsonIgnore
public List<Punto> getPunti() {
if (punti == null)
this.punti = new ArrayList<Punto>();
return this.punti;
}

public void setPunti(List<Punto> punti) {
this.punti = punti;
}
}

@Table(name = "punti")
@Entity
@XmlRootElement
public class Punto implements Serializable {
private Long id;
private Percorso percorso;


       @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}


        @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_percorso")
@XmlTransient
@JsonIgnore
public Percorso getPercorso() {
return percorso;
}

public void setPercorso(Percorso percorso) {
this.percorso = percorso;
}
}

Immaginiamo di generare un servizio rest,

@Path("/v1/percorsi")
@RequestScoped
public class PercorsiREST {

.....

che permette di recuperare un percorso:

        // repository che gestisce il caricamento da db dei dati
        @Inject
PercorsiRepository percorsiRepository;

@GET
@Path("/{id:[0-9][0-9]*}")
@Produces("application/json")
public Percorso getPercorsoById(@PathParam("id") long id) {
Percorso percorso = percorsiRepository.fetch(id);
if (percorso == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
return percorso;
}

Saremo in grado di invocarlo all'indirizzo: http://localhost:8080/primetracks/rest/v1/percorsi/3 e restituirà una risposta json del tipo:
 
 [{"id":3,"nome":"04-08-2011"}]

Dato che la collezione di punti è stata annotata con @JsonIgnore i punti non verranno restituiti nel corpo della risposta.
Conoscendo l'id del percorso andremo ad invocare un secondo metodo, che fornisce i punti che lo compongono:

        @GET
@Path("/{id:[0-9][0-9]*}/punti")
@Produces("application/json")
public List<Punto> getPuntiByPercorsoId(@PathParam("id") long id) {
Percorso percorso = percorsiRepository.fetch(id);
if (percorso == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
return percorso.getPunti();
}
Che invocheremo all'indirizzo: http://localhost:8080/primetracks/rest/v1/percorsi/3/punti e restituirà una risposta json del tipo:

[{"id":130}, {"id":131}]

Do notare come l'annotazione @XmlTransient , svolge la stessa funzione nel caso si voglia mostrare il risultato in formato xml, usando @Produces("text/xml") al posto  di @Produces("application/json").

Ultima nota, per usare l'annotazione @JsonIgnore va aggiunto in maven:
                 <dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.6.3</version>
</dependency>
Inoltre per usare a runtime questa libreria, presente tra i moduli di jboss7, va aggiunto nel META-INF/MANIFEST.MF:
Dependencies: org.codehaus.jackson.jackson-core-asl


Provate!!



sabato 10 settembre 2011

recupero files eliminati

se vi capita di cancellare dei files per sbaglio, date un okkio qui:

http://ubuntumanual.org/posts/357/recover-your-deleted-files-in-ubuntu

io non ci sono riuscito..e alla fine mi sono riscritto il codice perso...

comunque provate questo:
Photorec


Scaricato il tar.gz, usate il comando:
./photorec_static


seguendo il wizard e l'artcioletto citato sopra, si riesce a lanciare il recupero che produce una serie di cartelline, da setacciare per recuperare il/i file perso/i. I files vengono ripristinati in ordine non ben definito nelle cartelline, e diventa difficila recuperare un file/un tipo di files...


andate di shell con qualche comando simile a questo (immaginate di avere nella cartella test5 il risultato del ripristino e di copiare i file .java in una cartella .java):

find test5 -name \*.java -exec  cp {} test_java/ \;



in bocca al lupoo!