不确定如何构建问题。这是一个尝试:
我有两个airospike缓存(套)说X,Y。
jar有两个版本,每个版本都有一个com.xyz.MyClass类
jar1:
com.xyz.MyClass{
com.abc.Request request;
...
}
jar2:
com.xyz.MyClass{
com.pqr.Request request;
...
}
现在来自jar1的MyClass的一些对象存储在缓存X和 jar2中MyClass的一些对象存储在缓存Y中。
我想从两个缓存中反序列化数据,执行一些计算并存储在数据库中。
我无法序列化,因为两个罐子中MyClass的完全限定名称是相同的。
我将删除其中一个缓存(但这需要一些时间)。 因此,希望暂时解决此问题。
我能以一种很好的方式处理这个问题吗?
也许反序列化为中间件(不关心包,但只关心类结构)然后反转到MyClass。
注意:两个类都具有相同的结构,只是成员变量的包名称不同。
P.S。 :不想使用多个类加载器。
答案 0 :(得分:0)
实现它需要大量的魔力,并且不允许使用类加载器魔法删除一半的选项。
我建议的解决方案是编辑序列化数据。对象序列化的格式是已知的,并且是Java规范的一部分。因此,您可以编辑此字节以将一个类名替换为另一个,但我建议您在开始实现此之前再三考虑。这可能不是那么简单的任务。
答案 1 :(得分:-1)
生成两个不同的 serialVersionUID&#39> 并在每个类中使用它们。
Create Table #tblData (Id int, UniqueKey VARCHAR(10), DateTimeNow DATETIME, UpdateBy VARCHAR(10))
insert into #tblData values (1, 'uq1', getdate(), 'abc'), (2, 'uq2', getdate()+1, 'xyz')
--select * from #tblData
create Table #tblMaster (MasterId INT IDENTITY(100,1), DateTimeNow DATETIME, UpdateBy VARCHAR(10))
create Table #tblChild (ChildId INT IDENTITY(10,1), MasterId INT, UniqueKey VARCHAR(10), DateTimeNow DATETIME)
declare @id int
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR FAST_FORWARD FOR
SELECT Id FROM #tblData
OPEN @MyCursor
FETCH NEXT FROM @MyCursor INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
declare @UniqueKey VARCHAR(10) declare @DateTimeNow datetime
declare @iIdentity int
create table #OutputTbl (Id Int, UniqueKey VARCHAR(10), DateTimeNow DATETIME)
select @UniqueKey = UniqueKey, @DateTimeNow = DateTimeNow from #tblData where Id = @id
INSERT INTO #tblMaster(DateTimeNow, UpdateBy) SELECT DateTimeNow, UpdateBy FROM #tblData where Id = @id
SELECT @iIdentity=SCOPE_IDENTITY()
INSERT INTO #OutputTbl values (@iIdentity, @UniqueKey, @DateTimeNow)
select * from #OutputTbl
drop table #OutputTbl
FETCH NEXT FROM @MyCursor INTO @id
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
drop table #tblChild
drop table #tblMaster
drop table #tblData
您可以使用 Eclipse IDE 或 JDK的serialver工具生成您自己的serialVersionUID。
注意:如果没有声明serialVersionUID,JVM将使用自己的算法生成默认的SerialVersionUID。 你可以查看算法here.
默认的serialVersionUID计算对类详细信息非常敏感,可能因不同的JVM实现而异,并且在反序列化过程中会导致意外的InvalidClassExceptions。