我目前正在开发一个杂乱的Web应用程序。在这个应用程序中,有一个类保存所有数据源。当需要连接到特定的数据源时,用参数调用类实例中的方法来选择数据源。
public class MyConnection implements Runnable,DbConnection, Serializable
{
private static final long serialVersionUID=2007L;
public static transient DataSource FirstDatasource;
public static transient DataSource SecondDatasource;
BaseDbConnection _bidc;
....
在每个页面中,这个对象被获取并设置为会话(我不知道为什么会这样)。它和当前的设置很好地配合。(集群、负载平衡等)
但我的工作是实现故障转移,当我启用会话复制(在内存中-简单TCP)时,编写会话失败,并引发以下异常
org.apache.catalina.ha.session.DeltaManager requestCompleted
SEVERE: Unable to serialize delta request for sessionid [FE02AF01C76F41D042FE04692462D983.tomcat1]
java.io.NotSerializableException: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
.....
由于页面数量超过了“我可以计算”个数,所以很难替换在会话中从每个页面设置连接对象的代码。完整的应用程序基于这个连接对象(数据源也起着重要的作用)。
有没有方法可以更改这个类以便在会话中持久化?
提前谢谢