在 REST 调用上使 Java 服务器保持 DCOM 对象处于活动状态

发布于 2024-07-13 18:38:26 字数 409 浏览 9 评论 0原文

我正在为我的 Java 服务器实现 REST API。 通过 API 获得的资源之一实际上是创建一个 C++ DCOM 对象并反映其值。 我使用的 Java 到 COM 桥接器是 J-Integra。

问题是我需要保持该 DCOM 对象处于活动状态以供后续 REST 调用使用,但只要该对象的 Java 引用存在,该对象就处于活动状态 - 最多直到 REST 会话过期为止。

如何使 DCOM 对象保持活动状态,直到我不再需要它为止? 到目前为止,我唯一想到的就是使用 EJB,它将成为启动 DCOM 对象并保存其引用的 EJB。 我不是 EJB 方面的专家,但我认为 a) 这是一个过度的解决方案 b) EJB 可能被服务器缓存(钝化?),从而丢失 DCOM 引用。

有什么建议么?

谢谢 因巴尔

I'm implementing a REST API for my Java server. One of the of the resources obtained through the API is actually creating a C++ DCOM object and reflecting its values.
The Java to COM bridge I'm using is J-Integra.

The problem is that I need to keep that DCOM object alive for subsequent REST calls, but the object is alive just as long as its Java reference is - which is until the REST session expires at most.

How can I keep the DCOM object alive until I no longer needs it?
The only thing I thought of till now was using an EJB which then will be the one to initiate the DCOM object and hold its reference. I'm not an expert on EJBs, but I think that a) its an overkill solution b) the EJB may be cached (passiviate?) by the server, losing the DCOM reference at that.

Any suggestions?

Thanks
Inbar

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一片旧的回忆 2024-07-20 18:38:26

如何让 DCOM 对象保持活动状态
直到我不再需要它?

我想这取决于不再需要该对象意味着什么。 你怎么知道你什么时候完成了它?

这些 DCOM 实例适用于整个站点还是仅适用于特定用户? 如果在站点范围内,接收这些请求的资源是否可以保留对该对象的引用? 如果没有,也许您需要另一个层来为您管理这些对象。

您使用什么框架来实现 REST?


这里有更多信息:DCOM 对象
正在异步执行一组任务。 所以,
Java 中对它的主要调用
服务器立即返回,而
DCOM 对象继续执行。
不幸的是,它已经很旧了
对象,我无法控制它
实现或接口 - 我不能
改变这一点。 DCOM 对象没有
甚至还有 COM 事件。 唯一的方法是
知道是否完成,就是轮询
它使用特定的方法
(获取状态)。 我不想投票
来自我的 REST API 实现,如
这将打破 REST 概念。 我
无法提前知道如何
DCOM 对象需要很长时间
运行,所以我无法保持会话
活了那么久。

基本上,您想使用 REST 调用来启动操作,但不关心它何时完成或其状态是什么? 如果是这样,您是否可以启动一个线程来启动 DCOM 操作,轮询状态直到操作被视为完成,然后销毁 DCOM 操作?

How can I keep the DCOM object alive
until I no longer needs it?

I guess that depends on what it means to no longer need the object. How do you know when you're done with it?

Are these DCOM instances applicable site-wide, or just for a specific user? If site-wide, is it possible for the resource that is receiving these requests to keep a reference to that object? If not, perhaps you need Yet Another Layer to manage those objects for you.

What framework are you using for REST?


Here's some more info: The DCOM object
is executing a set of tasks async. So,
the main call to it from the Java
server returns immidietialy, while the
DCOM object continues execution.
Unfortuantley, it's quite an old
object and i have no control over its
implementation or interface - I can't
change that. The DCOM object doesn't
even have COM events. The only way to
know if it is done or not, is to poll
it using a specific method
(getStatus). I don't want to poll it
from my REST API implementation, as
this will break the REST concept. I
have no way to know in advance how
long it will take for the DCOM object
to run, so I can't keep the session
alive that long.

So basically, you want to use a REST call to start an operation but don't care when it finishes or what its status is? If so, can you start a Thread that will start the DCOM operation, poll the status until the operation is deemed to be complete and then destroy the DCOM operation?

纵情客 2024-07-20 18:38:26

将组件注册到 COM+,然后它就保持活动状态。 在此查看更多信息 链接

Place the component registered at COM+, and it stay alive. Check more info at this link.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文