Domanda

Se sto eseguendo la distribuzione su server con WebSphere 6.1 (Java 1.5), dovrei usare il JDK di IBM sulla mia casella di build? O il JDK di Sun verrà compilato nello stesso binario?

Se dovessi usare IBM, dove posso trovare la versione x64 di Windows?

È stato utile?

Soluzione

Proverei il più possibile a mantenere lo sviluppo il più vicino possibile alla produzione. Ibm e Sun's JDK soddisfano sicuramente entrambi la certificazione SDK, ma non sono affatto identici. La loro strumentazione e gestione della memoria sono almeno leggermente diverse. Se non altro, i bug nel JDK saranno diversi, il cui codice potrebbe inciampare solo in uno scenario rispetto a un altro. Probabilmente accadrà anche solo alle 4 del mattino, e quando la luna è piena, specialmente quando hai compagnia.

Non posso dirti dove ottenere il jdk di IBM, ma se hai una licenza per websphere nella tua azienda, dovresti avere un contatto presso IBM per ottenere un link a quel JDK.

Buona fortuna e cerca sempre di minimizzare le differenze, ove possibile.

Altri suggerimenti

Non dovrebbe fare alcuna differenza. Probabilmente non sarà esattamente lo stesso binario ma compatibile al 100%. Presumo che tu stia utilizzando comunque librerie esterne come log4j o forse ibernazione o qualunque altra cosa e quelle non sono costruite usando IBM JDK.

Tuttavia, ci sono differenze nei JRE. Ad esempio, ricordo che quando ho elencato metodi o campi di una classe usando la reflection, IBM JRE me li dava in un ordine diverso da quello di Sun.

Userei lo stesso JDK per compilare che verrà usato quando l'applicazione verrà distribuita (se ne hai il controllo).

I binari possono essere diversi se il compilatore è diverso, ma dovrebbero essere semanticamente identici. Non so se IBM abbia scritto il proprio compilatore. JRockit JDK utilizza effettivamente il compilatore Sun ma le JVM sono diverse. Quindi con JRockit i binari sono identici.

Se l'applicazione viene utilizzata con diversi JDK in fase di esecuzione, creerei comunque con quello che ritieni verrà utilizzato in fase di distribuzione la maggior parte delle volte e farei alcuni test di runtime con diversi JDK.

IBM JDK viene fornito con VM J9 e SUN JDK funziona su VM Hotspot con algoritmi diversi per funzionare. L'applicazione potrebbe non funzionare allo stesso modo se si distribuisce e si sintonizza SUN JDK e la produzione utilizza IBM JDK per WAS. Verifica con i venditori e apri un ticket, facci sapere come va.

La compilazione con qualsiasi JDK non dovrebbe causare un problema a meno che non si faccia riferimento a classi esterne a java. * e javax. * pacakges (cosa che non si dovrebbe essere.) Naturalmente c'è sempre la possibilità che ci sia una discrepanza tra un determinato fornitore JDK e le specifiche che potrebbero causare errori di runtime davvero strani che sono difficili da rintracciare, ma non l'ho mai visto prima nella mia esperienza.

Vorrei raccomandare di eseguire tutte le suite di test utilizzate utilizzando il JRE di destinazione poiché i comportamenti di runtime differiscono tra i fornitori molto più spesso rispetto alla semantica della compilazione.

I JDK stanno compilando il tuo codice in un bytecode e non direttamente in codice macchina . È previsto che i compilatori di diversi fornitori generino codice compatibile tra venditori. Ad esempio il compilatore IBM per JDK1.5 produrrà codice che gira su SUN JDK 1.5 e versioni successive senza alcun problema.

Un altro problema è il modo in cui i compilatori ottimizzano il bytecode, non ho informazioni sul fatto che alcuni compilatori eseguano un'ottimizzazione migliore di altri. La maggior parte dell'ottimizzazione viene eseguita durante il runtime da JVM (ad esempio strategie JIT (just-in-time) o AOT (anticipatamente)).

Avendo lavorato a lungo con WebSphere, la versione di JDK è molto importante. WebSphere 6.1 viene fornito con un IBM JDK 1.5 (o è 5). Quando si applica la patch a WebSphere, esistono anche patch equivalenti per JDK. Sebbene possa funzionare con una versione diversa di JDK (anche con un altro fornitore), dubito che riceverai molto supporto da IBM se qualcosa va storto.

Se hai bisogno di una JVM a 64 bit, suggerirei che probabilmente c'è una build a 64 bit, mentre non posso commentare Windows in modo specifico, posso dirti che esiste una build di WebSphere 6.1 a 64 bit sia per AIX che per Linux.

La migliore risposta è verificare con il fornitore e vedere se supporteranno la tua configurazione. Quello che non vuoi fare è farlo funzionare, quindi avere un problema in diretta, chiamare il supporto e scoprire che hai un ambiente non supportato.

Dovrebbero compilare con la stessa specifica di bytecode, sebbene possano compilare bytecode diversi (così come allo stesso modo diversi compilatori C generano codice macchina diverso). Non penso che ci sarebbero problemi nell'esecuzione del codice risultante: ho compilato Java 1.4 su un Mac e poi distribuito su J9 IBM in esecuzione su un PocketPC prima senza problemi (questo era prima che J9 potesse gestire il bytecode Java 5) .

Indipendentemente da ciò, farei sicuramente della tua piattaforma di compilazione un punto elenco nel tuo file Leggimi in modo che il tuo client possa vedere se si tratta di un problema.

In alternativa, è possibile compilare e distribuire con ANT e utilizzare Sun JDK con ANT.

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