迁移到 WildFly 8.2.0 后更新失败
Update is failing after migrated to WildFly 8.2.0
我们已将我们的应用程序从 JBoss 5.1.0 GA 迁移到 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
我们能够加载所有页面并成功保存数据。但是我们在使用 EntityHome 时无法更新数据。
我正在使用 h:commandButton 来保存数据
<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}"/>
而userDetailHome如下
@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();
}
}
而userDetailMgr如下
@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();
}
}
基于 UserDetailHome isManaged() 中的 sysout,我观察到在加载页面时我们得到了正确的值(真),在 EntityHome 的 getInstancc() 中加载了选定的日期。
加载页面后,该值在 EntityHome 中不再可用。
当我们尝试更新(任何操作)数据时,我们没有获得在页面加载时加载的选定实例,它正在提供主键为 null 的新实例。由于所选实例在 getInstance() 中不可用,因此它被视为新条目而不更新现有条目。
以下是components.xml
中的配置
<persistence:managed-persistence-context auto-create="true"
name="entityManager"
persistence-unit-jndi-name="java:/projectEntityManagerFactory" />
在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" />
我怀疑这个问题是由于迁移 seam 版本造成的。
如果我遗漏了什么,请告诉我。
我解决了这个问题。之前我们使用的是 JSF 2.1.29,现在我将我的 JSF 降级到 2.1.7,这是由 Seam 2.3.1 提供的内置版本。
我们已将我们的应用程序从 JBoss 5.1.0 GA 迁移到 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
我们能够加载所有页面并成功保存数据。但是我们在使用 EntityHome 时无法更新数据。
我正在使用 h:commandButton 来保存数据
<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}"/>
而userDetailHome如下
@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();
}
}
而userDetailMgr如下
@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();
}
}
基于 UserDetailHome isManaged() 中的 sysout,我观察到在加载页面时我们得到了正确的值(真),在 EntityHome 的 getInstancc() 中加载了选定的日期。 加载页面后,该值在 EntityHome 中不再可用。
当我们尝试更新(任何操作)数据时,我们没有获得在页面加载时加载的选定实例,它正在提供主键为 null 的新实例。由于所选实例在 getInstance() 中不可用,因此它被视为新条目而不更新现有条目。
以下是components.xml
中的配置<persistence:managed-persistence-context auto-create="true"
name="entityManager"
persistence-unit-jndi-name="java:/projectEntityManagerFactory" />
在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" />
我怀疑这个问题是由于迁移 seam 版本造成的。
如果我遗漏了什么,请告诉我。
我解决了这个问题。之前我们使用的是 JSF 2.1.29,现在我将我的 JSF 降级到 2.1.7,这是由 Seam 2.3.1 提供的内置版本。