0

我的服务每次请求都会将大量数据(来自 txt 文件)加载到内存中。但是,我想将数据保存在内存中。因为它是从相同的 txt 文件中读取的。

public class pirTMain {
  public String[] RUN_pirT(...){
  ...
  //this object will read txt files to initialize
  ELC elc = new ELC(elcFolder.getPath()); 

  //use elc to initialize a graph
  pirT.initGraph(userID, nodeFile.getPath(), userScore, elc, true, begin, target); 

  //Use graph to search paths
  itinerary = pirT.search(userID, TopK, begin, beginWithTime, target, targetWithTime); 
  ...

我已经阅读了 Axis2 文档。它说我可以将服务范围更改为“应用程序”。但是我还是不知道怎么做,因为我使用eclipse插件生成web服务*.arr。谁能建议我如何将 elc 对象与其他服务分开?然后,我的 pirTMain 类可以使用它。

pirTMain 是“请求”。

elc 是“应用程序”。

多谢。

4

1 回答 1

0

有很多不同的方法可以实现这一点,我想到的最简单的方法是创建对读取行的静态引用,以便在同一虚拟机中的所有线程之间共享它:

@WebService
public MyServiceClass {
    private static String[] readLines = null;

    private static synchronized getLines(){
         if (readLines == null)
             readLines = ....;

         return readLines;
    }

    public int getNumberOfLines(){
         return MyServiceClass.getLines().length;
    }

    public String getLine(int position){
         return MyServiceClass.getLines()[position];
    }
    ...

}

可能不是“最干净”的方式,但它有效并且很容易做到。如果您愿意,您还可以将登录包装在更标准的“单例模式”中。请记住,getLines 应该同步以保证线程安全,但如果遇到瓶颈删除同步关键字,您可能会在第一次调用时获得无用的读取,但它会更快。

于 2013-09-10T16:55:48.120 回答