【问题标题】:How can I use java-specific types in Thrift service?如何在 Thrift 服务中使用特定于 java 的类型?
【发布时间】:2012-02-27 14:06:45
【问题描述】:

我正在编写一个 Thrift 服务,其基本功能是将所有查询代理到 EJB Bean。基本上,服务会收到一个调用,查找一个本地 bean,将查询转发给 bean,然后将答案转发回客户端。

主要问题是 thrift IDL 不支持特定于语言的类型。例如,方法参数之一是实现接口 Inamed 的对象(它扩展了 Serializable)。

如何告诉 thrift 我想从“my.package.interfaces.INamed”导入此接口并将其用作有效参数/返回类型?

【问题讨论】:

    标签: java thrift


    【解决方案1】:

    如果你想通过 Thrift 发送任意对象,你可以将它们序列化并作为 Thrift 二进制数据发送,然后在另一端反序列化它们。不过这会绕过类型检查。

    但是 Thrift 被设计为与语言无关,所以我认为您不能在 IDL 中表达特定于语言的类型。

    你能定义一个匹配 INamed 的 Thrift 结构,然后在你的其他 Thrift 方法中使用它吗?

    【讨论】:

    • 我无法定义这个结构 - 我所知道的关于我收到的对象的所有信息是它具有接口 INamed,我对它的类一无所知,所以我不知道它包含的字段,所以我不能写一个结构。我了解语言独立性概念,但我希望 Thrift 允许更具体的语言机制,例如“void setName(1:javatype(my.package.interfaces.INamed) name)”
    • 我认为我可以做的另一件事是使用 thrift 生成代码,然后修改 gen-code 以调整类型和导入等内容,但我觉得这不是正确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多