Cette règle marque les fichiers persistence.xml afin de signaler à l'utilisateur tout changement de comportement dans OpenJPA concernant le code généré avec ListAttribute.
Si vous migrez une application qui n'utilise pas la spécification JPA 2.0, vous ne rencontrerez pas ce problème. Si l'application n'utilise pas l'API des critères ou l'API de métamodèle à partir de la spécification JPA 2.0, vous ne rencontrerez pas ce problème.
Les applications potentiellement affectées par cette modification sont celles qui utilisent l'interface de l'API des critères JPA sécurisée pour les types ou l'interface de l'API de métamodèle JPA directement. Notez que cette API de métamodèle a été introduite dans le cadre de la spécification JPA 2.0. Deux versions de WebSphere incluant la spécification JPA 2.0 présentent le problème décrit précédemment. Il s'agit de :
WebSphere version 8.5 utilise et fournit OpenJPA 2.2.0. Dans les éditions précédentes (voir paragraphe précédent), l'implémentation du métamodèle OpenJPA générait un objet ListAttribute pour chaque tableau. Ce comportement est correct si le tableau est stocké en tant que PersistentCollection, mais il ne l'est pas pour les tableaux non annotés (par exemple, byte[], char[]). Dans OpenJPA 2.2.0, ce comportement a été corrigé de sorte que les tableaux qui ne sont pas stockés en tant que PersistentCollections utilisent un SingularAttribute à la place d'un ListAttribute.
Pour préserver la compatibilité amont, vous pouvez définir une propriété et une valeur dans le fichier persistence.xml. En particulier, pour utiliser du code qui n'a pas été régénéré, vous pouvez définir <property name="openjpa.Compatibility" value="UseListAttributeForArrays=true"/> dans le fichier persistence.xml . Si votre environnement d'application régénère le code de métamodèle, vous ne rencontrerez pas ce problème et vous n'aurez pas besoin d'utiliser cette propriété. Le code régénéré possédera la déclaration correcte. Cependant, si l'application ne régénère pas le code de métamodèle, ce qui peut être le cas lors d'une migration binaire, vous pouvez utiliser cette propriété pour permettre d'utiliser l'ancien code généré avec le nouvel environnement d'exécution.
Pour contribuer à la préservation de la compatibilité amont, lors de la transformation de la configuration, la propriété système UseListAttributeForArrays=true est définie. Toutefois, une propriété système pour OpenJPA est ignorée si elle est déjà définie dans l'application. Cette règle indique à l'utilisateur si la définition de la propriété système UseListAttributeForArrays sera ignorée car elle ne peut pas remplacer un paramètre openjpa.Compatibility existant dans le fichier persistence.xml.
Cette règle marque les fichiers persistence.xml lorsque
Lorsque le correctif automatisé pour cette règle sera disponible, il modifiera la règle UseListAttributeForArrays valeur dans la openjpa.Compatibility pour que la valeur contienne value="UseListAttributeForArrays=true" .
L'action recommandée est l'une des suivantes :
Pour plus d'informations, voir