Domanda

Attualmente stiamo eseguendo la migrazione della nostra applicazione dal nostro ambiente di produzione a un nuovo data center.

  • Ambiente di produzione attuale: Java 1.4, Java EE 3, WAS 5.1, JSF 2.1
  • Nuovo ambiente per data center: Java 1.5, Java EE 5, WAS 6.1, JSF 2.1
La nostra applicazione è basata su JSF 2.1 e contiene il codice seguente in una delle chiamate AJAX:
request.getSession().getServletContext().getRequestDispatcher(
                    "/results.faces").include(request, response);
Ed è qui che ci imbattiamo in problemi.

Caso 1: struttura EAR secondo le specifiche standard
. EAR - > GUERRA - > WEB-INF - > lib - > * .jar (tutti i barattoli specifici dell'applicazione sono in WEB-INF / lib). Questo non funziona e ci impegniamo a ottenere eccezioni per la classe non trovata dal classloader. Inoltre, la precedente chiamata AJAX ha esito negativo (non generato in uscita)

Caso 2: EAR contiene tutti i file JAR dell'applicazione nella radice (MANIFEST.MF ha il percorso di classe specificato manualmente).
Questo approccio funziona perfettamente e tutti i file JAR vengono caricati senza problemi. Inoltre, anche la chiamata AJAX va bene.

Qualche idea sul perché ciò possa accadere.

- & nbsp; Ashish

È stato utile?

Soluzione

Sì, è perché i server di app Java EE hanno una gerarchia di programmi di caricamento classi simile a questa: prima viene chiamato il programma di caricamento classi bootstrap; il prossimo è il caricatore di classe di livello EAR, quindi il caricatore di classe di livello WAR. Caricatori di classe di livello superiore non cercheranno di seguito le classi di cui hanno bisogno. Se non trovano ciò di cui hanno bisogno, verrà generata una ClassNotFoundException.

Quindi i JAR in WEB-INF / lib non erano visibili al caricatore di classi di livello EAR. Quando sposti questi JAR risolvi il problema. Rende tutti questi JAR visibili anche a tutte le GUERRE nella tua EAR.

Una cosa che potresti voler controllare è la specifica per il tuo web.xml e altri file. Le specifiche servlet e JSP sono cambiate da qualche parte lungo la strada, quindi JAR come JSTL e simili sono passati dalla versione 1.0 alla 1.1. Potresti voler controllare attentamente il tuo web.xml e tutti i JAR per assicurarti che corrispondano alle specifiche supportate dal tuo server di app Java EE.

Sfortunatamente, aggiornare il server delle app non è facile come lanciare un EAR o un WAR.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top