C ++服务提供商如何扩展Java应用程序?

时间:2014-07-07 18:48:02

标签: java c++ interface java-native-interface service-provider

我正在使用服务提供者概念创建可扩展的Java应用程序。我有一个名为PoolTuningStrategy的抽象类,它是一个服务,我的应用程序的USERS以服务提供者的形式提供他们的服务,扩展了这个PoolTuningStrategy类,用户以jar文件的形式提供他们的实现,我的应用程序使用ServiceLoader类动态加载服务提供者如下

int i=0;
for (PoolTuningStrategy foo : ServiceLoader.load(PoolTuningStrategy.class,urlloaders)) 
            strategy[i++]=foo;

现在,strategy []包含所有实现集。现在我的问题是“如何创建一个扩展我的Java抽象类PoolTuningStrategy的C ++类,以便我可以使用C ++服务提供程序。”实际上我希望我的应用程序能够被Java和C ++程序员扩展。我只使用Java完成它,但我不知道如何通过C ++实现来扩展我的Java应用程序。

2 个答案:

答案 0 :(得分:3)

您可以创建一个通过JNI委托给C ++实现的Java类。但是,C ++类不能从Java继承,Java类也不能从C ++继承。你必须改为使用委托。

答案 1 :(得分:0)

接近这一点的一种方法是使用商业产品JunC++ion,它有效地允许C ++类实现Java接口。

在Java方面,您可以创建一个新的具体类CppPoolTuningStrategy,它接受​​一个回调接口IPoolTuningStrategySPI的实例。然后,您的C ++用户可以实现该接口。

这使您的C ++用户无需编写Java粘合代码。但是,它确实引入了第三方产品的成本。