2015-04-28 19 views
7

Uso il Single Design XPage Design, con tutta la mia logica aziendale scritta come Java nei file in WebContent \ WEB-INF.Ricarica singola copia XPage Design (SCXD) * Java * Application Design

Se ho bisogno di apportare una modifica a un controllo XPage o personalizzato, posso aggiornare il mio modello, aggiornare il design e il cambiamento viene prelevato immediatamente.

Tuttavia, se voglio apportare modifiche al codice Java, tutto sembra memorizzato nella cache e l'unico metodo che ho trovato per raccogliere le modifiche è il riavvio dell'attività http.

Finora ho provato:

  • aggiornare la progettazione del database SCXD
  • sostituendo la progettazione del database SCXD
  • pulizia del database SCXD
  • modifica del faces-config (sia nel modello che nel database SCXD)
  • eliminazione dei file .class per il codice Java compilato nel database SCXD e ricostruzione
  • l'emissione di un "dire http xsp Refresh" comando al server
  • sostituendo il database SCXD con una nuova copia
  • sostituendo la progettazione del database che sta puntando al database SCXD

nulla sembra per ottenere il web per raccogliere le modifiche al codice Java, oltre a riavviare l'attività http.

C'è qualcosa che ho perso?

+0

Questo funziona bene per me.Ho appena installato un nuovo nsf SCXD + un nuovo nsf abilitato per SCXD, aggiunto una classe Xpage e Java all'interno di una nuova cartella src nel percorso WebContent \ WEB-INF (e configurato il percorso di compilazione su entrambi nsfs) e le mie modifiche in SCXD Java nel principale SCXD nsf vengono prelevati immediatamente. Hai mai funzionato? –

+0

Sospetto che vada bene per una nuova classe Java. Sono le modifiche a un metodo preesistente che causa problemi. (Gli stessi sintomi si sono verificati con 8.5.3 codice Java e XPage in normali aggiornamenti di progettazione.) –

+0

C'è un [non-SO "bounty"] (http://www.intec.co.uk/single-copy-xpage-design -some-learning-and-why-its-not-for-me/# comment-202436) su questo argomento, nel caso in cui qualcuno fosse interessato. Immagino di poter incontrare chiunque abbia risolto questo problema con ConnectUsSphereED. –

risposta

2

Abbiamo riscontrato questo problema come SPR # LHEY9X5EBP.

Ho inviato questa domanda al team di XPages e Maire Kehoe ha fornito le seguenti informazioni e soluzioni per provare.

Non è un problema noto. Sembra un bug in NSFComponentModule.refresh(), quando c'è un templateModule, non trova mai alcuna modifica ai file e non reimposta mai il classLoader.

Soluzione alternativa: fare clic sul pulsante per eseguire il ripristino.

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
<xp:button value="Reset App ClassLoader" id="button1"> 
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
     <xp:this.action><![CDATA[#{javascript:inapp.ResetUtil.reset()}]]></xp:this.action> 
    </xp:eventHandler> 
</xp:button> 

codice Java:

package inapp; 
import com.ibm.domino.xsp.module.nsf.ModuleClassLoader; 
public class ResetUtil { 

    public static void reset(){ 
     ClassLoader appClassLoader = Thread.currentThread().getContextClassLoader(); 
     ((ModuleClassLoader)appClassLoader).resetDynamicClassLoader(); 
     // That code will give: 
     // Script interpreter error, line=1, col=17: Error calling method 'reset()' on java class 'inapp.ResetUtil' 
     // Access denied (java.lang.RuntimePermission getClassLoader) 
     // need to edit C:\Domino\jvm\lib\security\java.policy file to have: 
     // grant codeBase "xspnsf://server:0/disc2.nsf/-"{ // nsf name here must be .toLowerCase of actual nsf name. 
     // permission java.lang.RuntimePermission "getClassLoader"; 
     //}; 
    } 
} 

autorizzazioni per consentire che il codice Java per l'esecuzione. In C: \ Domino \ jvm \ lib \ security \ java.policy aggiungere una riga in questo modo, aggiornato al tuo nome NSF:

grant codeBase "xspnsf://server:0/disc2.nsf/-"{ // nsf name here must be .toLowerCase of actual nsf name. 
    permission java.lang.RuntimePermission "getClassLoader"; 
}; 
+0

Ottima informazione! Un chiarimento: è necessario eseguire questo codice una volta per server, una volta per modello o una volta per database? –

+0

Purtroppo non ha funzionato (l'app è in esecuzione in un browser, non è sicuro che sia un fattore). Non è stato possibile modificare le autorizzazioni di sicurezza a livello NSF, ma ho aperto completamente la sicurezza per testare l'opzione di ripristino: concessione { permesso java.security.AllPermission; }; Tuttavia, non stava ancora raccogliendo le modifiche nel codice Java nel database SCXD. Sono stati prelevati solo dopo il riavvio di HTTP. Non sono sicuro se questo è collegato al commento di Cameron su Twitter relativo ai plugin OSGi aggiornati ma non ricaricabili. –

+0

Ok, l'ho passato a Maire, così come l'inoltro delle altre questioni sollevate su Twitter alla squadra. Vi dirò se c'è qualcos'altro da provare. Abbiamo anche registrato un SPR per il problema originale di cui sopra: SPR # LHEY9X5EBP –