处理必须在许多类中更改的导入

时间:2018-12-20 08:36:49

标签: java

在我的应用程序中,Java类通过一些jar与Cobol进行通信。我使用引用jar内部类(在其中指定版本)的导入来调用它们。例如:

import com.dsi.business.SSA_YU.integration.jdo.P_YUCCS00.C_YUCCS00;
import com.dsi.business.SSA_YU.integration.jdo.P_YUCCS00.INHEADER;
import com.dsi.business.SSA_YU.integration.jdo.P_YUCCS00.INPBST;

然后在方法中使用(其他地方我每次都要更改版本):

public void doSomething(int param1, C_YUCCS00 msg) {
...
}

我的问题是:这些jar中的每一个都是在许多Java类(例如100-150)中导入的。如果“罐子”的版本(实际上是内部类的名称)发生变化,我将必须导入新的罐子,并因此调整导入,如下所示:

import com.dsi.business.SSA_YU.integration.jdo.P_YUCCS01.C_YUCCS01;
import com.dsi.business.SSA_YU.integration.jdo.P_YUCCS01.INHEADER;
import com.dsi.business.SSA_YU.integration.jdo.P_YUCCS01.INPBST;

这意味着要进行很多更改和版本很多类。

您知道是否有解决方法吗?有一种方法可以将导入放入一个单独的Java类中,以仅用于导入并调用该类? 预先谢谢你

3 个答案:

答案 0 :(得分:2)

一种解决方案是使用代理类,该代理类包含版本化类并且具有与基础版本化类相同的公共方法。然后,将在您的代码部分中使用每个代理类,而不是版本化类。一个不清楚的部分是如何初始化一个代理类,因为从这个问题还不清楚,版本化类和应用程序类之间的交互是如何发生的

import com.dsi.business.SSA_YU.integration.jdo.P_YUCCS00.C_YUCCS00;

public class C_YUCCProxy {
    private  C_YUCCS00 underlying;

    //First example of constructor if new objects are created
    public C_YUCCProxy() {
         this.underlying = new C_YUCCS00();
    }

    //Second example using existing object
    public C_YUCCProxy(C_YUCCS00 object) {
         this.underlying = object;
    }

    public void doLogic(int value) {
        underlying.doLogic(value);
    }

    public String getStringValue() {
        return underlying.getStringValue();
    }
    //... all other public methods
}

然后在应用程序代码的其他部分

public void doSomething(int param1, C_YUCCProxy msg) { 

     msg.doLogic(42);
     String response = msg.getStringValue();
}

答案 1 :(得分:0)

如果涉及更多的类和程序包:

您可能最好,编写自己的ClassLoader,该类确实将包和类名重命名为更通用的名称。可能与字节码库(例如ASM)结合在一起。

或者您可以使用字节码库(如ASM)完全转换生成的库。 还有很多工作。

答案 2 :(得分:0)

使用Eclipse for IDE,使用其全局(跨源文件)文本搜索并替换,以将所有的“ _YUCCS00”外观替换为“ _YUCCS01”。

然后逐一处理所有错误。 (如果版本过渡在[您正在使用的功能中]具有向后兼容性,则将出现错误,但是请注意,如果您选择任何其他解决方案,则此类错误也会自行显示,并且可能只会在运行时自行显示时间。)

您可能仍然需要针对每个受影响的应用程序重复执行此操作,但至少不再是“按类重复”。

您真正要做的是迫使其他团队停止发布版本的versions脚方式。它背叛了高水平的“我们只考虑自己的利益”的态度(因此完全没有考虑用户(您)的利益,这对于出版图书馆罐子的团队来说有点奇怪)。为此,您可以向管理层显示其他团队坚持下去所造成的损失。