2013-04-03 10 views
6

Ho un'applicazione in esecuzione su Openshift. Funziona bene, ma il test è difficile perché devo spingere ogni piccola cosa a openshift e attendere l'intero edificio e riavviare per vedere i cambiamenti.Testing spring opensift applicazione localmente

Quindi sto cercando di trovare un modo per testare l'applicazione localmente. Un altro ragazzo ha chiesto la stessa cosa qui: How to test an openshift application on local host, ma mi chiedo se esiste una soluzione più semplice.

Ho utilizzato il progetto quickstart qui http://github.com/openshift/spring-eap6-quickstart.git per avviarlo. Quindi in pratica si tratta di un'applicazione Spring che utilizza Hibernate.

quello che ho in mente di avere due set di file di configurazione (persistence.xml etc.) nel progetto, uno per server Tomcat locale e uno per Jboss EAP e cambiamento web.xml in base al server che voglio distribuire a. È fattibile? Sembra così semplice, ho paura di eventuali problemi a sorpresa prima di modificare il progetto .

+0

I suggerimenti di adietisheim sono probabilmente i migliori e anche il tuo approccio sembra buono. Fare un tentativo con un semplice progetto. –

risposta

3

Questo è il modo in cui ho finito. Ho rinominato il file originale web.xml, con qualcosa come web-openshift.xml. Quando i progetti vengono creati in OpenShift, viene utilizzato il profilo Maven openshift. Puoi trovarlo nella sezione <profiles> di pom.xml. Così ho aggiunto una linea al mio pom.xml:

<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <configuration> 
     .... 
      <webXml>src/main/webapp/WEB-INF/web-openshift.xml</webXml> <!--add this--> 

Questo rende il maven-war-plugin di utilizzare il file web-openshift.xml come descrittore di deployment web quando si costruisce la guerra. Poi ho aggiunto un file web.xml, che verrà utilizzato per la mia build locale. In quei file si configurano le servlet con:

<init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/jboss-as-spring-mvc-context.xml</param-value> 

Quindi cambiando la <param-value> nei miei due web.xml file, sono stato in grado di configurare primavera e Hibernate in modi diversi.

Quindi ho aggiunto i vasi contrassegnati come <provided> in pom.xml alla directory \lib dell'installazione Tomcat. Ora sono in grado di distribuire ed eseguire l'applicazione sia a OpenShift che a Tomcat.

0

Se si dispone di una connessione veloce, è possibile eseguire l'app su un server locale e lasciare che persistence.xml punti a openshift db. Per accedere al db in remoto è necessario utilizzare il port forwarding (https://www.openshift.com/blogs/getting-started-with-port-forwarding-on-openshift). Sarà necessario configurare il client rhc (https://www.openshift.com/developers/rhc-client-tools-install) ed eseguire il client rhc port forwarding per accedere al database. Puoi quindi puntare semplicemente eseguire il progetto eclipse sul tuo server tomcat, e lo farà (con persistence.xml presumo tu stia usando un db) connettersi al database. Qualsiasi modifica al codice verrà trattata come qualsiasi altro progetto Tomcat. Non è necessario avere un web.xml separato per la maggior parte dei casi (a meno che non si disponga di alcune configurazioni specifiche di openshift).

È possibile utilizzare anche strumenti come Toad per connettersi al db se lo si desidera.

+0

Grazie, sembra promettente, ma penso che avrò ancora bisogno di due configurazioni diverse per la persistenza. Ad esempio per lo sviluppo locale ho bisogno di impostare 'hibernate.show_sql = true' – lunr

0

In un'applicazione che ho sia in locale che in Openshift, ho usato la cartella persistente app-root/data per memorizzare qualsiasi configurazione specifica di OpenShift.

Nella mia rete.xml, io includo le proprietà come segue:

<context:property-placeholder location="file:${user.home}/app-root/data/configuration.properties"/> 

Se si sta gestendo le proprietà di configurazione sensibili come nomi utente e password, le variabili env di OpenShift può andare un lungo cammino. Ad esempio, è possibile inserire le seguenti proprietà nel vostro pom.xml, sotto il profilo OpenShift:

<properties> 
    <db.username>${env.OPENSHIFT_POSTGRESQL_DB_USERNAME}</db.username> 
    <db.password>${env.OPENSHIFT_POSTGRESQL_DB_PASSWORD}</db.password>      
    <db.connectionURL>postgresql://${env.OPENSHIFT_POSTGRESQL_DB_HOST}:5432/${env.PGDATABASE}</db.connectionURL> 
</properties> 

Per recuperare la proprietà di connessione al database dalle variabili d'ambiente OpenShift. È quindi possibile utilizzare il filtro delle risorse di maven per inserire queste proprietà in qualsiasi file in directory specifiche come src/main/resources

Le mie proprie proprietà di connessione db locale sono gestite in un profilo nel mio file ~/.m2/settings.xml.

Questo approccio mi permette di:

  • mantenere tutte le proprietà sensibili fuori dal mio codice pubblico repository
  • molto semplice passare da OpenShift e distribuzione locale abilitando/disabilitando esperto di costruire profili.