2015-09-15 1 views
0

Nous avons migré notre application de JBoss 5.1.0 GA à WildFly 8.2.0, pour y parvenir, nous avons amélioré nos technologies en versions inférieures.La mise à jour échoue après la migration vers WildFly 8.2.0

JBoss Seam 2.2.0 to Seam 2.3.1 
Hibernate 3.3.0 to 4.0.1 
JSF 1.2 to 2.1 

Nous sommes capables de charger toutes les pages et d'enregistrer les données avec succès. Mais nous ne sommes pas en mesure de mettre à jour les données lorsque nous utilisons EntityHome.

J'utilise h: commandButton pour enregistrer les données

<h:commandButton id="save" 
       styleClass="button" 
         value="Save" 
        action="#{userDetailMgr.doPersist}" 
        rendered="#{!userDetailHome.managed}"/> 

     <h:commandButton id="update" 
       styleClass="button" 
         value="Save" 
        action="#{userDetailMgr.doUpdate}" 
        rendered="#{userDetailHome.managed}"/> 

Et le userDetailHome est comme ci-dessous

@Name("userDetailHome") 
public class UserDetailHome extends 
    EntityHome<UserDetailHome> { 
//Override the isManaged() method to identify the results 
@Override 
public boolean isManaged() { 
System.out.println("Managed Value " + super.isManaged()); 
return super.isManaged(); 
} 
} 

Et userDetailMgr est comme ci-dessous

@Name("userDetailMgr") 
@Scope(ScopeType.SESSION) 
public class UserDetailMgr extends AbstractManager 
implements Serializable { 
@In 
EntityManager entityManager; 
public String doUpdate() { 
userDetailHome.update(); 
} 
public String doPersist() { 
userDetailHome.persist(); 
} 
} 

Basé sur sysout en UserDetailHome isManaged() J'ai observé que pendant le chargement de la page, nous obtenons la valeur correcte (t rue) en chargeant la date sélectionnée dans getInstancc() de EntityHome., Une fois la page chargée, la valeur n'est plus disponible dans EntityHome.

Lorsque nous essayons de mettre à jour (n'importe quelle opération) des données, nous n'obtenons pas l'instance sélectionnée qui est chargée pendant le chargement de la page et donne la nouvelle instance avec la clé primaire comme nulle. Puisque l'instance sélectionnée n'est pas disponible dans getInstance(), elle est traitée comme une nouvelle entrée et ne met pas à jour l'entrée existante.

Le ci-dessous sont les configurations components.xml

<persistence:managed-persistence-context auto-create="true" 
name="entityManager" 
persistence-unit-jndi-name="java:/projectEntityManagerFactory" /> 

Dans persistence.xml

<property name="jboss.entity.manager.factory.jndi.name" 
value="java:/projectEntityManagerFactory" /> 
<property name="hibernate.transaction.jta.platform" 
value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 

Je soupçonnais cette question est due à la migration de la version de couture.

Faites-moi savoir s'il y a quelque chose qui me manque.

+0

O/T (peut-être pas) ... Wildfly 8.2 contient Mojarra 2.2.7, alors pourquoi passer à la version 2.1? (et 2.1 est une api, pas une version) Seam est mort, pourquoi ne pas migré vers CDI? Wildfly contient CDI 1.2 ... Il contient aussi Hibernate 4.3.7, alors pourquoi 'upgradé' à 4.0.1 (pourquoi ne pas utiliser JPA?). Probablement seulement à cause des trucs Seam si j'ai raison ... hmmmmm .... – Kukeltje

+0

@kukeltje Puisque nous utilisons Seam 2.3.1, qui ne supporte pas JSF 2.2.7, nous utilisons JSF 2.1x. Bien que la couture soit morte, nous voulons exécuter notre application sur WildFly avec moins de changements et d'impulsions, nous avons donc décidé d'aller avec la couture 2.3.1. Nous utilisons JPA dans notre projet que je n'ai pas mentionné dans le post .. Même si je soupçonne que c'est lié à Seam. –

+0

Ok, mais maintenant vous mettez à niveau une application héritée vers une nouvelle application qui est déjà une nouvelle application héritée ... Si j'étais CTO ... – Kukeltje

Répondre

0

J'ai résolu ce problème. Auparavant, nous utilisons JSF 2.1.29, maintenant j'ai rétrogradé mon JSF en 2.1.7 qui est intégré fourni par Seam 2.3.1.