我们目前正在使用java 1.7将我们的tapestry应用程序迁移到新服务器。应用程序运行顺利,直到此迁移导致应用程序中的大多数功能出现故障。经过分析,我们发现用@Persist注释的对象不再是持久化的。
btw:
相同的Tomcat版本
相同的操作系统
使用tapetsry 5.3.6和相关的罐子。
它是否与java版本或其他东西todo?有什么帮助吗?
答案 0 :(得分:0)
通常@Persist的默认值为" Session"在你的情况下,理论上应该是真的。但正如你所说,情况已不再如此。
Persist倾向于遍历整个层次结构以确定其默认值。
也许在你的情况下,某个类中的某个人,即更高层次的人,使用了注释@Meta("tapestry.persistence-strategy=flash")
,它会自动将你程序中的所有@Persist设置为&#34; flash&#34;。< / p>
如果你实现了一个HttpSesseionListener并通过那个调试,你可以试着找出发生了什么,这样你就可以知道你的会话是否正在创建。
import java.util.Date;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se)
{
HttpSession session = se.getSession();
System.out.print(getTime() + " (session) Created:");
System.out.println("ID=" + session.getId() + " MaxInactiveInterval="
+ session.getMaxInactiveInterval());
}
public void sessionDestroyed(HttpSessionEvent se)
{
HttpSession session = se.getSession();
// session has been invalidated and all session data (except Id)is
no longer available
System.out.println(getTime() + " (session) Destroyed:ID=" +
session.getId());
}
private String getTime()
{
return new Date(System.currentTimeMillis()).toString();
}
}
如果您应该尝试使用Listener,请使用以下命令在web.xml中调用它:
<listener>
<listener-class>YOURPACKAGENAME.MyHttpSessionListener</listener-class>
</listener>
说实话,在网络上找不到Tapestry更复杂问题的帮助很多,我觉得很难过。
通过在创建变量会话后的某个位置在Listener中设置断点,您应该能够看到问题的开始时间和地点(或者可能不是因为永远不会创建会话,这意味着@某人确实改变了持久性默认值
我自己的项目有很多麻烦,到目前为止还没有找到任何答案。
希望这个能给你一个正确方向的推动,这样你就能找到问题的根源。