gpt4 book ai didi

java - 如何在远程 session bean 类中使用 ByteBuffer?

转载 作者:行者123 更新时间:2023-12-01 11:58:47 25 4
gpt4 key购买 nike

我们使用 cassandra 来满足我们的一些数据需求。有一个列族(表),其中有一列blob类型。

根据datastax documentation ,cql blob 的数据类型为 java.nio.ByteBuffer

我们有一个用于对象映射到 cassandra 表的类,我们说 SampleEntity,它的定义如下

        @Table(name="sampletable", keyspace="main")
public class SampleEntity{
@Column("id")
private UUID id;

@Column("data")
private ByteBuffer complexData;

//...getters and setters
}

我们有一个无状态 session bean 类(远程 ejb),它具有使用实体管理器将对象持久保存到数据库的代码。该类实现了一个用 @Remote 注解的接口(interface)(javax.ejb.Remote)。

     @stateless
public class SampleEntityBean implements SampleEntityBeanRemote{

//inject entity manager
.... SomeDatatype entityManager

UUID createEntity(SampleEntity entity){
entityManager.persist(entity);
}

}

现在,我们通过使用 @EJB 注释注入(inject) SampleEntityBean 在应用程序的许多地方使用它。因此,这意味着该方法是使用 RMI 底层远程调用的。

问题是 ByteBuffer 不可序列化,并且由于 不可序列化异常:java.nio.HeapByteBuffer 导致无法编码(marshal) ejb 参数

这意味着,一方面我需要 ByteBuffer 来存储 blob,另一方面我可能不会使用它,因为它不可序列化。

那么,有什么方法可以以标准方式解决这个问题吗?

有什么方法可以使用一些不同的数据类型(例如byte[]),并且可能在最后一刻使用注释将其转换为ByteBuffer

最佳答案

据我所知,没有办法。映射 API 使用字段类型而不是 getter/setter,因此您无法将其存储为 byte[],但让 getter 返回 ByteBuffer。看来您需要使用两种不同的 DTO,一种用于 Cassandra 驱动程序,一种用于 EJB。

查看 JIRA 中其他人已经请求自定义序列化的驱动程序:https://datastax-oss.atlassian.net/browse/JAVA-566所以去投票吧:)

关于java - 如何在远程 session bean 类中使用 ByteBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28138732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com