【发布时间】:2022-01-23 02:47:32
【问题描述】:
我有两个捆绑包
1. I18n Service (Internationalization)
2. Persistence Service (Database)
问题是 Bundle I18n 使用数据库服务以不同的语言存储 Texts 和 Messages。而Persistence Service,也使用I18m来存储一些不同语言的Error Messages,所以每个Service相互依赖,但它们不应该一起工作,因为它们都提供不同类型的Service。
我的问题,有谁知道Pattern 或Strictire 可以帮助我解决这个问题吗?我需要注册这些服务并允许它们相互使用。
在 Persistence Service Activator 中,我删除了以下依赖项:
dependencyManager.add(createComponent()
.setImplementation(PersistenceImpl.class)
.add(createServiceDependency()
.setService(I18nService.class)
.setRequired(true))
);
但是I18n 不能这样做,在这种情况下,它们都不会启动:
dependencyManager.add(createComponent()
.setImplementation(I18nImpl.class)
.add(createServiceDependency()
.setService(PersistenceService.class)
.setRequired(true))
);
谢谢。
【问题讨论】:
-
请edit您的问题包含有关您的服务如何相互交互的更详细说明。翻译(?)想要将数据存储在某处的“国际化”听起来很奇怪。在这种情况下,让它依赖于数据库服务可能不正确。添加某种图表,您拥有(或想要创建)哪些服务、它们应该做什么、它们之间如何交互以及为什么以具有循环依赖关系的方式设计它们。
-
@Progman 为什么说“国际化”Bundle 不能对数据库进行事务处理?你知道更好的做法吗?请随时分享您的想法。
-
这就是为什么我要求澄清您拥有的服务以及您想要构建的服务。还要描述服务之间应该如何交互。
-
@Progman 很简单,
I18n提供 2 个基本服务:1. 字符串资源的注册和 2. 字符串资源的调度。这一切都存储在数据库中并在运行时加载到内存中。还有Persistence Service,它为需要它的任何其他模块(包括I18n)提供数据库服务,并且它还注册了自己的资源字符串(即“字段ABC应该是一个字符串”等)。因此,如您所见,两者都互相利用。