domenica 28 aprile 2013

openshift prepariamoci a pulire le cartelle dei log e tmp, usando il cron

utili letture:
http://middlewaremagic.com/jboss/?p=2534

https://www.openshift.com/page/openshift-environment-variables

https://www.openshift.com/forums/openshift/log-rotation-not-enabled

https://bugzilla.redhat.com/show_bug.cgi?id=917294

1) stoppare tutti i servizi:

source /usr/bin/rhcsh

ctl_all stop

1)  purgare la cartella dei log di php + vecchi di 3 giorni e la cartella dei files tmp
#!/bin/bash

cd $OPENSHIFT_PHP_LOG_DIR
find . -type f \( -name access_log-\* -or -name error_log-\* \) -mtime +3 | xargs tar -czvf backup_logs-$(date +%Y%m%d).tar.gz
find . -type f \( -name access_log-\* -or -name error_log-\* -or -name backup_log-\* \) -mtime +3 -exec rm {} \;
cd $OPENSHIFT_MYSQL_DB_LOG_DIR

find . -type f \( -name access_log-\* -or -name error_log-\* \) -mtime +3 | xargs tar -czvf backup_logs-$(date +%Y%m%d).tar.gz
find . -type f \( -name access_log-\* -or -name error_log-\* -or -name backup_log-\* \) -mtime +3 -exec rm {} \;

cd /tmp
rm -f *

2) ricreare i link simbolici nella cartella root del server php (dato che tutti i files stanno nella cartella DATA) usando ciclo for


4) riavviare tutti i servizi

source /usr/bin/rhcsh


ctl_all start


openshift: force restart

Nel caso in cui si riempiono le cartelle tmp o quelle dei log:


rhc app force-stop -a appName [per forzare stop ]
e poi
rhc app force-start -a appName [per ripartire ]

martedì 6 novembre 2012

openshift: restart mysql

utilissimo!!
durante up upgrade della piattaforma va giu  mysql..
non posso riavviarlo da shell
...

mi connetto su freechat...e trovo assistenza!!

mi suggeriscono questo semplice comando:
rhc app cartridge restart -a testapp -c mysql-5.1


DA RICORDARE!!!






sabato 1 settembre 2012

git: eliminare un repository locale

basta eliminare la cartella .git

nel caso in cui ci siano cartelle annidate (tipo sottomoduli):


find $GIT_DIR -name *.git* -ok rm -Rf {} \;
http://stackoverflow.com/questions/1213430/how-to-fully-delete-a-git-repository-created-with-init

venerdì 31 agosto 2012

applicazione war con due entity manager contemporanemente

ambiente: jboss-7.1.1 
applicazione: war con due entity, due session bean repository, un service rest che opera usando entrambi i session bean.
caricare il driver mysql tra i moduli di jboss7

(scarica da qui: https://github.com/fiorenzino/dual-jpa.git)

ricordarsi di:
1) persistence.xml aggiungere i nomi delle classi che deve gestire ciascun em
2) persistence.xml non usare <property name="hibernate.hbm2ddl.auto" value="update" /> altrimenti crea le tabelle in entrambi i db (consiglio di crearle prima di deployare)


esempio di entity:

@Entity
public class UserA implements Serializable {

private Long id;
private String name;
....


@Entity
public class UserB implements Serializable {

private Long id;
private String name;

....



esempio di persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="PuA">
<jta-data-source>java:jboss/datasources/ExampleA</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
<class>it.coopservice.test.model.UserA</class>
</persistence-unit>
<persistence-unit name="PuB">
<jta-data-source>java:jboss/datasources/ExampleB</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
<class>it.coopservice.test.model.UserB</class>
</persistence-unit>
</persistence>

3) nei repository iniettare gli entity manager specificando la persistence unit:

esempio di session bean: 



@Stateless
@LocalBean
public class SessionA implements Serializable {
@PersistenceContext(unitName = "PuA")
protected EntityManager em;
...



@Stateless
@LocalBean
public class SessionB implements Serializable {
@PersistenceContext(unitName = "PuB")
protected EntityManager em;

...


4) nello standalone.xml mappare i datasource usando driver XA (altrimenti non sarà possibile effettuare operazioni nella stessa transazione su entrambi i datasource:

esempio di datasource in standalone.xml:


<datasources>
<xa-datasource jndi-name="java:jboss/datasources/ExampleA" pool-name="ExampleAD" enabled="true" use-ccm="false">
<xa-datasource-property name="URL">jdbc:mysql://localhost:3306/exampleA</xa-datasource-property>
<driver>com.mysql</driver>
<xa-pool>
   <is-same-rm-override>false</is-same-rm-override>
   <interleaving>false</interleaving>
   <pad-xid>false</pad-xid>
   <wrap-xa-resource>true</wrap-xa-resource>
</xa-pool>
<security>
   <user-name>root</user-name>
   <password>flower</password>
</security>
<recovery>
   <recover-credential>
<user-name>root</user-name>
<password>flower</password>
   </recover-credential>
</recovery>
    </xa-datasource>
<xa-datasource jndi-name="java:jboss/datasources/ExampleB" pool-name="ExampleBD" enabled="true" use-ccm="false">
<xa-datasource-property name="URL">jdbc:mysql://localhost:3306/exampleB</xa-datasource-property>
<driver>com.mysql</driver>
<xa-pool>
   <is-same-rm-override>false</is-same-rm-override>
   <interleaving>false</interleaving>
   <pad-xid>false</pad-xid>
   <wrap-xa-resource>true</wrap-xa-resource>
</xa-pool>
<security>
   <user-name>root</user-name>
   <password>flower</password>
</security>
<recovery>
   <recover-credential>
<user-name>root</user-name>
<password>flower</password>
   </recover-credential>
</recovery>
    </xa-datasource>
</datasources>



 <drivers>
                    <driver name="com.mysql" module="com.mysql">
                        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                    </driver>
 </drivers>




a questo punto sara' possibile usare un service che si inettta entrambi i session bean delegati a ciascun respository e fare operazioni transazionali:


esempio di service che opera su entrambi i session beans:

@Stateless
@LocalBean
public class ServiceAB implements Serializable {

@Inject
SessionA sessionA;

@Inject
SessionB sessionB;

public String createAB(String nameA, String nameB) {
UserA userA = new UserA(nameA);
Long idA = sessionA.persist(userA);
UserB userB = new UserB(nameB);
Long idB = sessionB.persist(userB);
return "a:" + idA + " - b:" + idB;
}
}



esempio di servizio rest per fare i test :


@Path("/v1/test")
@Stateless
@LocalBean
public class Rest implements Serializable {

@Inject
SessionA sessionA;
@Inject
SessionB sessionB;

@Inject
ServiceAB serviceAB;

@GET
@Path("/addA/{name}")
@Produces(MediaType.TEXT_PLAIN)
public Long addA(@PathParam("name") String name) {
UserA userA = new UserA();
userA.setName(name);
return sessionA.persist(userA);
}

@GET
@Path("/addB/{name}")
@Produces(MediaType.TEXT_PLAIN)
public Long addB(@PathParam("name") String name) {
UserB userB = new UserB();
userB.setName(name);
return sessionB.persist(userB);
}

@GET
@Path("/addAB/{nameA}/{nameB}")
@Produces(MediaType.TEXT_PLAIN)
public String addAB(@PathParam("nameA") String nameA,
@PathParam("nameB") String nameB) {
return serviceAB.createAB(nameA, nameB);
}
}

ricordarsi di aggiungere un rest activator:


@ApplicationPath("/rest")
public class JaxRsActivator extends javax.ws.rs.core.Application {

}






giovedì 23 agosto 2012

appunti git

1) nel caso in cui esiste gia' un reporisoty locale e ci vuoi attacare un repo remoto
Create a new repository on the command line
touch README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/fiorenzino/b-flower.git
git push -u origin master

Push an existing repository from the command line
git remote add origin https://github.com/fiorenzino/b-flower.git
git push -u origin master


per distrugger repository remoti
git push <remote> :<remote_branch>

es. git push origin :FORGE-610

per aggiungere al precedente commit:
git commit --amend

mercoledì 22 agosto 2012

turbo maven


mvn -T 4 clean install
mvn -T 2C clean install

and skip test:

-Dmaven.test.skip=true