我有兴趣了解 Eclipse RCP,我有一些基础知识,但我想知道更多它的功能。因此,我鼓励自己创建一组需求,对其进行分析,并提出关于如何使用 Eclipse RCP 作为基础框架来满足这些需求的设计决策,并最终使用 Eclipse RCP 实现它们。现在,也许要求太难了,或者我还不太了解 Eclipse RCP,我正在努力想出合适的解决方案来满足要求!
以下是需求的总结(请原谅可能不够详细,这真的只是一些鼓励自己的例子):
我想要一个 Eclipse RCP 应用程序来监控一些服务器。这些服务器最初是应用程序知道的程序(意味着它确切地知道它们的来龙去脉)。然而,在未来,该应用程序应该能够允许用户指定具有不同特征的任意程序供该应用程序监控(因此不仅是已知的服务器,还包括它之前不知道的一些其他服务器)。该应用程序还需要一个 XML 配置文件,其中包含需要监控的服务器的所有详细信息(例如主机、端口、用户名和密码)。此 XML 配置文件将使用 JAXB 进行编码和解码。
所以根据以上要求,我想出了以下细节:
XML 看起来像这样:
<configuration>
<components>
<serverA>
<host></host>
<port></port>
<username></username>
<password></password>
</serverA>
<serverB>
<host></host>
<port></port>
<username></username>
<password></password>
</serverB>
<!--- this will be the place for other components specified by user -->
</components>
</configuration>
应用程序知道的服务器在哪里。
在源代码中,类的层次结构如下:
组件 <--- 服务器 <--- ServerA, ServerB
ServerA和ServerB从Server派生,分别映射到and元素。
配置的点条目位于名为 Configuration 的类中,该类包含 ServerA 列表和 ServerB 列表。现在,因为应用程序应该能够监视它不知道的其他程序,所以 XML 配置文件也应该是可扩展的,因此 Configuration 类还包含一个 Object 列表,它映射到用户在配置文件。
配置.java
public class Configuration
{
@XmlElement
private List<ServerA> serveras;
@XmlElement
private List<ServerB> serverbs;
@XmlAnyElement
private List<Object> otherServers;
}
现在,这也是你们解决问题的方法吗?我想,我不知道,我只是对应用程序能够监视用户指定的其他程序的要求感到困惑。我知道我首先设置了它,但我这样做是想说“这看起来像是可以利用 Eclipse RCP 的扩展点的东西”,但现在已经进入配置文件,我不清楚应该如何配置文件与plugin.xml有关吗?
在我的脑海里,我希望配置文件指定应用程序需要监控的程序的详细信息(主机、端口、用户名和密码)。 plugin.xml 用于指定应用程序还需要监视的用户定义程序的扩展点和扩展。那么这是否意味着,最终对于用户自定义程序,用户需要在plugin.xml中将它们配置为扩展,然后在配置文件中指定它们的其他细节?
最佳答案
有几种方法可以解决这个问题。但让我试一试。
你有一堆不同的服务器,具有不同的监控特性。但是对于您的 eclipse 应用程序,它们看起来都必须相似。
假设您有一个 Eclipse RCP 应用程序,其中包含一些用于监视服务器的 UI。对于此应用程序,服务器实际上是什么无关紧要,但应该有一个通用接口(interface)来连接它们。
一种可能是您有一个表示服务器通信协议(protocol)的接口(interface),然后您在主插件中定义了一个扩展点,允许贡献该协议(protocol)的实现。因此,您将能够创建某个接口(interface)的实例集合(我们称之为 IMonitoringProtocol)。该接口(interface)将包含您在 UI 上显示状态所需的方法。
此外,您将拥有一个列出所有服务器的 XML 配置文件。此配置文件的元素之一是用于监控的协议(protocol)。
因此,当您启动您的应用程序时,您将实例化所有提供的协议(protocol),并读取配置文件。然后,您可以通过匹配配置条目找到与服务器通信的正确协议(protocol)。
这允许您在未来为未知的服务器添加新协议(protocol)。
关于java - Eclipse RCP 案例研究,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/656852/