高级自定义 > 服务和基础结构自定义 > 开发服务器逻辑 > 轻量化服务
  
轻量化服务
轻量化服务存在于客户端和业务服务层之间的应用程序层中。轻量化服务不会自动启动和发送事件,因此属于轻型服务。因此,未在 wt.properties 文件中使用 wt.services 条目指定轻量化服务。
轻量化服务方法的设计应旨在执行以下操作:
减少客户端和服务器之间的往返行程数。
提供比业务服务方法级别更高的任务特定的功能。
确保客户端事务处理完整性。
轻量化服务可以发送事件,但不应对其进行监听。如果某项服务未自动启动,则在启动之前,其将无法得知应监听的事件。
轻量化服务是确保客户端事务处理完整性的有效方法。可将多个客户端-服务器操作分组为单个、轻量化服务方法调用,这将在单个事务处理中在服务器上执行这些操作。
轻量化服务可通过以下两种方式实现:
通过可扩展 wt.services.StandardManager 的模型化类
通过可实现 wt.method.RemoteAccess 的非模型化内部类
以下子节将介绍这两种实现。
建模实现
轻量化服务的模块化类似于业务服务,原因在于这类服务是由远程接口定义的,并且具有扩展 StandardManager 的实现类。远程接口使服务能够在方法服务器中运行,并由远程客户端 (例如,独立的 JAVA 客户端) 调用。服务接口和实现类之间的映射是通过命名约定完成的。轻量化服务的实现类必须与名称开头带有 "Standard" 的接口具有相同的名称。
要使用轻量化服务,请创建生成的 Forwarder 类的实例,并通过该转发程序调用服务的方法。这类似于业务服务,其中 Helper 类的静态属性使用 Forwarder 类的实例进行初始化。在这两种情况下,调用服务操作的机制是相同的。
示例:在 WTDesigner.mdl 的 wt.services.test 包中可以找到名为 CommentLogger 的轻量化服务。CommentLogger 接口可定义轻量化服务,以将消息记录到服务器日志文件中。对于希望在服务器日志中包含消息的独立 JAVA 客户端,此服务可能非常有用。如果没有此类服务,则所有 System.out.println 调用都会将其输出发送到浏览器的 Java 控制台窗口,而不是服务器日志文件。StandardCommentLogger 通过扩展 wt.services.StandardManager 和 CommentLogger 接口来实现此服务。请注意,名称必须为 StandardCommentLogger,才能使 ManagerService 找到 CommentLogger 服务的实现类。由于 CommentLogger 具有 RemoteInterface 的构造型,因此会自动生成名为 CommentLoggerFwd 的 Forwarder 类。这是此类用于调用 CommentLogger 服务方法:
CommentLoggerFwd logger = new CommentLoggerFwd();
logger.log("a message");
内部类实现
实现轻量化服务的第二种方法是利用可实现 wt.method.RemoteAccess 的非模型化内部类。内部类实现的示例如下所示。目标是调用复杂的服务器端活动,收集客户端感兴趣的信息,同时最大程度地减少客户端加载的类的数量。这些技术可提高客户端的性能,原因在于加载类会很慢且成本高昂。
在此示例中,请注意内部类的类型。要避免 IllegalAccess 冲突,必须将转发程序声明为 "public static class"。使用此声明,MethodServer 可实例化和调用内部类的方法。
另请注意用于调用所需服务器方法的技术。为了避免加载指定为要在 MethodServer 中执行的操作的一部分的类,我们将目标内部类和感兴趣的方法指定为字符串。对类本身的任何参考都将导致这种情况并且将其需要的所有类加载到客户端 VM 中,这并非所需操作。