Я сейчас работаю над одним грязным веб-приложением. В этом приложении есть класс, который содержит все источники данных. И когда нужно подключиться к конкретному источнику данных, метод в экземпляре класса вызывается с параметром для выбора источника данных. И класс выглядит следующим образом
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)
.....
Поскольку страниц больше, чем «Я могу сосчитать», нелегко заменить код, который устанавливает объект соединения в сеансе для каждой страницы. И все приложение основано на этом объекте соединения (источники данных также играют важную роль).
Есть ли способ, которым я могу изменить этот класс, чтобы он мог сохраняться в сеансе?
Заранее спасибо