Differenze nelle modalità di funzionamento di Java EE 7
Quando si passa da Java EE 6 a Java EE 7, potrebbero esserci delle differenze nella modalità di funzionamento nell'applicazione dovute a modifiche dell'implementazione e a chiarimenti della specifica. In Liberty, non è obbligatorio passare al livello di Java EE successivo ed è possibile continuare a utilizzare le funzioni Java EE 6 esistenti. In WebSphere Application Server tradizionale V9.0, solo le tecnologie JAX-RS e JPA possono rimanere al livello Java EE 6 ed è necessario configurarle esplicitamente sul server. Tutte le altre tecnologie devono essere migrate al livello Java EE 7.
CDI 1.2
| Nome regola | Descrizione regola | Correzione automatica |
|---|---|---|
| CDI riconosce archivi di bean impliciti | La specifica CDI (Contexts and Dependency Injection) 1.1 ha introdotto la modalità di rilevamento bean implicita, dando luogo a modifiche al comportamento ed alle prestazioni rispetto all'implementazione di Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 in WebSphere Application Server. | No |
| CDI scansiona alla ricerca di bean impliciti quando non esiste un file beans.xml | La specifica CDI (Contexts and Dependency Injection) 1.1 ha introdotto la modalità di rilevamento bean implicita, dando luogo a modifiche al comportamento ed alle prestazioni rispetto all'implementazione di Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 in WebSphere Application Server. | No |
| Ricerca di una modifica al comportamento nel metodo InjectionPoint getAnnotated | Nell'implementazione di CDI (Contexts and Dependency Injection) 1.0, il metodo getAnnotated in una classe che implementa l'interfaccia javax.enterprise.inject.spi.InjectionPoint può restituire un'istanza di javax.enterprise.inject.spi.Annotated. In CDI 1.2, il metodo getAnnotated deve restituire un'istanza di AnnotatedField o AnnotatedParameter, a seconda che il punto di inserimento sia un parametro o un campo inserito in un costruttore o un metodo. |
No |
| Ricerca di uno schema valido in beans.xml | Questa regola analizza i file beans.xml per vedere se lo spazio dei nomi fornito nell'attributo xmlns corrisponde alla posizione dello schema corrispondente. |
java-ee-7.yml org.openrewrite.java.migrate.BeansXmlNamespace |
| Verificare la presenza di uno spazio dei nomi valido in beans.xml | Questa regola analizza i file beans.xml per vedere se viene fornito uno spazio dei nomi valido sull'attributo xmlns. |
No |
| Ricerca dell'abilitazione di intercettatori, decoratori ed alternative in altri file JAR | Nell'implementazione di CDI 1.2 Weld, gli intercettori, i decoratori e le alternative abilitati nel file beans.xml in un file JAR sono abilitati solo per quel file JAR. | No |
| Le classi che utilizzano sia annotazioni Specializes e Alternative non vengono inserite in altri moduli | Questa regola contrassegna le classi annotate con le annotazioni @Specializes e @Alternative. |
No |
| Non utilizzare lo schema OpenWebBeans per beans.xml | Lo schema OpenWebBeans per il file beans.xml non è supportato nell'implementazione di Liberty CDI 1.2. | java-ee-7.yml org.openrewrite.xml.liberty.WebBeansXmlRule |
| I campi produttore nei bean di sessione devono essere statici | Nell'implementazione CDI 1.2 Weld, l'applicazione non si avvia e lancia un'eccezione quando nelle classi dei bean di sessione vengono dichiarati campi non statici con l'annotazione @Produces |
java-ee-7.yml org.openrewrite.java.migrate.AddStaticVariableOnProducerSessionBean |
| Il file openwebbeans.properties non viene utilizzato | Questa regola contrassegna i file di configurazione META-INF/openwebbeans/openwebbeans.properties nell'applicazione. La funzione Java EE 7 CDI 1.2 si basa sull'implementazione del riferimento Weld di CDI, che non utilizza questi file di configurazione. | No |
| I campi transitori nei bean con ambito la sessione eseguono correttamente il failover | Questa regola contrassegna i campi con il modificatore transient nelle classi annotate con @SessionScoped. |
No |
EL 3.0
| Nome regola | Descrizione regola | Correzione automatica |
|---|---|---|
| Cambiamento del comportamento nel metodo coerceToType con il parametro null | Expression Language 3.0 introduce una modifica al comportamento quando viene fornito un valore null al primo parametro di coerceToType(Object obj, Class<?> targetType). |
No |
JAX-RS 2.0
| Nome regola | Descrizione regola | Correzione automatica |
|---|---|---|
| È necessario implementare le interfacce @Local JAX-RS | Nell'implementazione di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0, quando si trasmettono le interfacce JAX-RS come valori all'annotazione @javax.ejb.Local, la classe che utilizza l'annotazione deve implementare le interfacce trasmesse. |
No |
| API Java per RESTful Web Services (JAX-RS) e Contexts and Dependency Injection for Java (CDI) | Questa regola identifica la presenza di JAX-RS e CDI nell'applicazione. WebSphere Application Server V9.0 tradizionale, conforme a Java EE 7, viene fornito con JAX-RS 2.0 di default, ma consente di tornare a JAX-RS 1.1 se necessario. | No |
| È necessaria una configurazione per utilizzare SSL in JAX-RS 2.0 | Per utilizzare la funzione la SSL (Secure Sockets Layer) JAX-RS 2.0 sul server Liberty, è necessario abilitare la funzione ssl-1.0 o quella appSecurity-2.0 e configurare la proprietà com.ibm.ws.jaxrs.client.ssl.config nel codice del client JAX-RS 2.0. |
No |
| I package org.codehaus.jackson non sono disponibili | I pacchetti org.codehaus.jackson esposti come API di terze parti in JAX-RS 1.1 non sono più esposti nella piattaforma Java WebSphere Application Server. |
No |
| L'inserimento delle API di Apache Wink nel package assieme all'applicazione potrebbe richiedere modifiche all'applicazione | Quando le API di Apache Wink vengono fornite con l'applicazione, l'applicazione deve fornire una sottoclasse di javax.ws.rs.core.Application, ed almeno una delle implementazioni del metodo getClasses() e getSingletons() non deve restituire null. |
No |
| Le API di Apache Wink non sono disponibili | I package org.apache.wink non sono disponibili per le applicazioni Java API for RESTful Web Services (JAX-RS) che utilizzano implementazioni di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0. |
No |
| Le API Apache Wink Client non sono disponibili | I package org.apache.wink.client non sono disponibili per le applicazioni JAX-RS che utilizzano implementazioni di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0. |
No |
| La classe com.ibm.websphere.jaxrs.server.IBMRestFilter non è più supportata | Le API com.ibm.websphere.jaxrs.server.IBMRestFilter non sono disponibili nell'implementazione di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0, perché sono basate sull'implementazione di JAX-RS 1.1 Wink. |
No |
| La classe org.apache.wink.client.handlers.LtpaAuthSecurityHandler non è più supportata | Le API org.apache.wink.client.handlers.LtpaAuthSecurityHandler non sono disponibili per le applicazioni JAX-RS (Java API for RESTful Web Services) che utilizzano l'implementazione di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0, perché si basano sull'implementazione di JAX-RS 1.1 Wink. |
No |
| Il package org.apache.wink.common.model.atom non è disponibile | Il package org.apache.wink.common.model.atom non è disponibile per le applicazioni Java API for RESTful Web Services (JAX-RS) che utilizzano implementazioni di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0. |
No |
| Il package org.apache.wink.common.model.multipart non è disponibile | Nell'implementazione di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0, il package org.apache.wink.common.model.multipart è stato sostituito con il package com.ibm.websphere.jaxrs20.multipart di IBM. |
No |
| Utilizza i metodi isReadable e isWriteable per controllare il tipo di supporto | Nell'implementazione di WebSphere Application Server Java EE (Java Platform, Enterprise Edition) 7 JAX-RS 2.0, le interfacce
MessageBodyReader e MessageBodyWriter, con le annotazioni @Consumes e @Produces, potrebbero limitare i tipi di supporti gestiti. |
No |
JMS Client 2.0
| Nome regola | Descrizione regola | Correzione automatica |
|---|---|---|
| Ricerca di una modifica al comportamento nella priorità dei messaggi e nell'attributo NoLocal | JAXB e XML Binding precedenti a 4.0 forniscono la classe Validator obsoleta. Questa classe non è disponibile nel bind XML 4.0 poiché la convalida su richiesta non è più supportata. |
No |
| Ricerca di una modifica al comportamento nei metodi setClientID e createDurableSubscriber | Questa regola segnala i metodi javax.jms.Session.createDurableSubscriber, javax.jms.TopicSession.createDurableSubscriber e javax.jms.Connection.setClientID perché lanciano eccezioni diverse in JMS Client 2.0. |
No |
Servlet 3.1
| Nome regola | Descrizione regola | Correzione automatica |
|---|---|---|
| Ricerca di una modifica al comportamento nell'elaborazione dell'elemento absolute-ordering | Nel Servlet 3.0, se l'attributo metadata-complete è impostato su "true", tutti gli archivi di frammenti web vengono utilizzati indipendentemente dal fatto che siano referenziati nell'elemento <absolute-ordering> del file web.xml. Nel Servlet 3.1, i frammenti Web che non sono elencati nell'elemento <absolute-ordering> sono esclusi dall'elaborazione. | No |
| Ricerca di una modifica al comportamento nei servlet asincroni | In Servlet 3.0, se una si include una stringa di query ad una richiesta, la stringa viene resa disponibile tra le risorse distribuite. In Servlet 3.1, se si fornisce una stringa di query alla risorsa di distribuzione, questa stringa di query viene resa disponibile alla risorsa distribuita invece che alla stringa di query della richiesta originale. | No |
| Ricerca di una modifica al comportamento nel metodo getServerInfo | Questa regola contrassegna i riferimenti al metodo javax.servlet.ServletContext.getServerInfo() perché l'implementazione della funzione Servlet 3.1 restituisce un valore diverso da quello dell'implementazione della funzione Servlet 3.0. | No |
| Ricerca di una modifica al comportamento nel metodo sendRedirect | Questa regola contrassegna i riferimenti al metodo javax.servlet.http.HttpServletResponse.sendRedirect() perché il comportamento predefinito rispetto agli URL relativi è diverso nell'implementazione della funzione Servlet 3.1 rispetto a quello della funzione Servlet 3.0. | No |
| Ricerca di una modifica al comportamento nell'interfaccia ServletContextListener | Le classi che implementano l'interfaccia javax.servlet.ServletContextListener devono essere annotate con l'annotazione javax.servlet.annotation.WebListener o definite come una classe listener nel file web.xml o web-fragment.xml. | No |
| Ricerca di una modifica al comportamento nel metodo setComment | Questa regola contrassegna i riferimenti al metodo javax.servlet.SessionCookieConfig.setComment() perché l'implementazione della funzione Servlet 3.1 genera un'eccezione IllegalStateException una volta inizializzato il contesto del servlet, a differenza del Servlet 3.0. | No |
| Ricerca di una modifica al comportamento relativo agli elementi duplicati nei descrittori web | In Servlet 3.0, un'applicazione può essere distribuita anche se i descrittori web contengono elementi <ordering> o <absolute-ordering> duplicati. In Servlet 3.1, un'applicazione con questi elementi duplicati non può essere distribuita. | No |
| Ricerca di una modifica al comportamento relativo all'unione della destinazione dell'inserimento del riferimento alla risorsa | Il comportamento dell'unione della destinazione dell'inserimento del riferimento alla risorsa è diverso nell'implementazione della funzione Servlet 3.1 rispetto a quello della funzione Servlet 3.0. Il comportamento dell'applicazione esistente potrebbe cambiare a causa delle destinazioni dell'inserimento appena attivate definite nel file web-fragment.xml precedentemente eseguite dal file web.xml. | No |
| Ricerca di una modifica al comportamento nell'associazione del modello dell'URL | In Servlet 3.0, un'applicazione verrà correttamente avviata anche se lo stesso modello di URL è associato a più servlet. In Servlet 3.1, l'applicazione non parte e genera un'eccezione. | No |
| Ricerca di nuovi metodi aggiunti a javax.servlet.ServletOutputStream e javax.servlet.ServletInputStream | Servlet 3.1 introduce nuovi metodi in javax.servlet.ServletOutputStream e javax.servlet.ServletInputStream. Questi metodi non sono stati aggiunti in Servlet 3.0 e devono essere implementati in caso di migrazione a Servlet 3.1. | No |
Da OpenJPA a EclipseLink JPA
| Nome regola | Descrizione regola | Correzione automatica |
|---|---|---|
| Disabilitazione della cache di secondo livello dell'unità di persistenza | OpenJPA disabilita per impostazione predefinita la cache di secondo livello, mentre EclipseLink per impostazione predefinita l'abilità. Utilizzare la correzione rapida per modificare la configurazione della cache dell'unità di persistenza affinché conservi lo stesso comportamento della cache in EclipseLink. | java-ee-7.yml org.openrewrite.java.migrate.JpaCacheProperties |
| Non utilizzare i provider OpenJPA nel file persistence.xml | Durante la migrazione da OpenJPA a EclipseLink utilizzare il provider JPA predefinito invece di un provider specifico OpenJPA. | java-ee-7.yml org.openrewrite.java.migrate.javaee7.OpenJPAPersistenceProvider |
| Non utilizzare stringhe OpenJPA per proprietà e suggerimenti della query | Le stringhe definite di OpenJPA utilizzate per proprietà e suggerimenti della query devono essere sostituite con un equivalente EclipseLink, ove disponibile. | No |
| OpenJPA a EclipseLink informazioni e potenziali problemi | Questa regola contiene informazioni generali per la migrazione a Java EE 7 ( OpenJPA ), nonché informazioni sui problemi che WebSphere Migration Toolkit per i binari delle applicazioni (scanner binario) non rileva. | java-ee-7.yml org.openrewrite.java.migrate.javax.openJPAToEclipseLink |
| La proprietà di configurazione openjpa.LockManager deve essere migrata | La proprietà OpenJPA LockManager proprietà, openjpa.LockManager, deve essere migrata utilizzando un'API di blocco fornita nella specifica JPA 2.1. | No |
| La proprietà di configurazione openjpa.jdbc deve essere migrata nel file di associazione | Il proprietà dello schema OpenJPA, openjpa.jdbc, deve essere migrata nella configurazione del file di associazione definito dalla specifica. | No |
| L'interfaccia org.apache.openjpa.enhance.PersistenceCapable non è disponibile | L'interfaccia org.apache.openjpa.enhance.PersistenceCapable , che viene inserita in fase di compilazione, non è disponibile per le applicazioni JPA che utilizzano l'implementazione WebSphere tradizionale o Liberty Java EE 7 JPA 2.1 |
No |
| I package org.apache.openjpa non sono disponibili | Le API org.apache.openjpa non sono disponibili nell'implementazione WebSphere Java EE 7 JPA 2.1. | No |
| I file di associazione non sono elaborati durante la migrazione da OpenJPA a EclipseLink | La serie di regole per la migrazione da OpenJPA a EclipseLink migra i problemi trovati nelle annotazioni JPA ma non migra i problemi nei file di associazione dell'entità. | No |
| È necessario migrare le proprietà di configurazione di OpenJPA e WebSphere JPA | È necessario migrare le proprietà di configurazione JPA 2.0 specifiche del fornitore di OpenJPA e WebSphere JPA Utilizzare le proprietà standardizzate ed EclipseLink. | No |