`

解决JCO3只能在当前工作路径下获取JCoDestination的问题

    博客分类:
  • SAP
阅读更多

经过反编译SAP的JCO3的java代码,发现:JCO3在FileDestinationsDataProvider类中强制使用当前工作路径为jcoDestination的父路径,要想任意指定路径,一个较快的解决办法就是替换掉com.sap.conn.jco.rt.FileDestinationsDataProvider.java这个类,一下是此类的加强版的java代码:

package com.sap.conn.jco.rt;

import com.sap.conn.jco.ext.*;
import com.sap.conn.jco.util.FastStringBuffer;
import java.io.*;
import java.util.Properties;

public final class FileDestinationsDataProvider implements DestinationDataProvider, ServerDataProvider {
  private static String DESTINATION_FILES_SUFFIX = ".jcoDestination";
  private static String SERVER_CFG_FILES_SUFFIX = ".jcoServer";
  private File destinationDirectory;

  FileDestinationsDataProvider(String directory) throws FileNotFoundException {
    destinationDirectory = null;
    /*
    File destinationDirFile = null;
    FastStringBuffer error = new FastStringBuffer(128);
    destinationDirFile = new File(directory);
    if (checkFile(destinationDirFile, error)) {
      destinationDirectory = destinationDirFile;
    } else {
      throw new FileNotFoundException(error.toString());
    }
    */
  }

  private boolean checkFile(File file, FastStringBuffer error) {
    if (file.exists()) {
      if (file.canRead()) {
        return true;
      }
      if (error != null) {
        error.append("File ");
        error.append(file.getAbsolutePath());
        error.append(" exists, but cannot be read. ");
      }
    } else
    if (error != null) {
      error.append("File ");
      error.append(file.getAbsolutePath());
      error.append(" does not exist. ");
    }
    return false;
  }

  public Properties getDestinationProperties(String destinationName) {
    return loadProperties(destinationName, DESTINATION_FILES_SUFFIX);
  }

  public Properties getServerProperties(String serverName) {
    return loadProperties(serverName, SERVER_CFG_FILES_SUFFIX);
  }

  private Properties loadProperties(String destinationName, String suffix) {
    File destinationFile = new File(destinationDirectory,
                                    (new StringBuilder()).append(destinationName).append(suffix).toString());
    FastStringBuffer buf = new FastStringBuffer(256);
    if (!checkFile(destinationFile, buf)) {
      throw new RuntimeException(buf.toString());
    }
    FileInputStream fis = null;
    Properties properties = new Properties();
    try {
      Properties properties1;
      try {
        properties.load(fis = new FileInputStream(destinationFile));
        properties1 = properties;
      } catch (IOException ex) {
        throw new RuntimeException("Unable to load the destination properties", ex);
      }
      return properties1;
    } finally {
      if (fis != null) {
        try {
          fis.close();
        } catch (Exception e) {}
      }
    }
  }

  public boolean supportsEvents() {
    return false;
  }

  public void setDestinationDataEventListener(DestinationDataEventListener destinationdataeventlistener) {
  }

  public void setServerDataEventListener(ServerDataEventListener serverdataeventlistener) {
  }

}
 



附件里有我打包好的经过修改的JCO3的类库文件!

 

0
1
分享到:
评论
2 楼 23号 2010-12-17  
真他妈的混蛋,真打包成jar文件发布都不行。
1 楼 dasenlin1204 2009-10-08  
请帮忙看一下,我以前用的是sapjco.jar,现在要升级到sapjco3.jar,我手里没有sapjco3的资料,现在要写一个sapjco3接口连接源类,不知道怎么写,请指导一下,我原来的sapjco的写法如下:import com.sap.mw.jco.IRepository;
import com.sap.mw.jco.JCO;
import com.sap.mw.jco.JCO.Pool;
import com.sap.mw.jco.JCO.Client;

/**
* <p>Title: SAPJCO接口连接源类</p>
* <p>Copyright: Copyright (c) 2006</p>
*/
public class SapJcoDataSource
{
 
  private String strUserName = "";
  private String strPassword = "";
  private String strHost = "";
  private String strClient = "";
  private String strSystemNumber = "";
  private String strLanguage = "EN";
  private int iPoolSize = 5;
  private Pool pool = null;
  private IRepository repository = null;

  /**
   * <p>构造函数</p>
   */
  public SapJcoDataSource()
  {
  }

  public String getUserName()
  {
    return strUserName;
  }
  public void setUserName(String username)
  {
    this.strUserName = username;
  }

  public String getPassword()
  {
    return strPassword;
  }
  public void setPassword(String password)
  {
    this.strPassword = password;
  }

  public String getHost()
  {
    return strHost;
  }
  public void setHost(String host)
  {
    this.strHost = host;
  }

  public String getClient()
  {
    return strClient;
  }
  public void setClient(String client)
  {
    this.strClient = client;
  }

  public String getSystemNumber()
  {
    return strSystemNumber;
  }
  public void setSystemNumber(String sysnr)
  {
    this.strSystemNumber = sysnr;
  }

  public String getLanguage()
  {
    return strLanguage;
  }
  public void setLanguage(String language)
  {
    this.strLanguage = language;
  }

  public int getPoolSize()
  {
    return iPoolSize;
  }
  public void setPoolSize(int poolSize)
  {
    this.iPoolSize = poolSize;
  }

  public IRepository getRepository()
  {
    getConnectionPool();
    return repository;
  }
  public Client getConnection()
  {
    String connectPoolName = getConnectionPool().getName();
    return JCO.getClient(connectPoolName);
  }
  private Pool getConnectionPool()
  {
    if (pool == null)
    {
      String strPoolName = "pool_" + strHost + strSystemNumber + strClient;
      pool = JCO.getClientPoolManager().getPool(strPoolName);
      if (pool == null)
      {
        JCO.addClientPool(strPoolName, iPoolSize, strClient, strUserName,
                          strPassword,
                          strLanguage, strHost, strSystemNumber);
        pool = JCO.getClientPoolManager().getPool(strPoolName);
        pool.setConnectionTimeout(60 * 1000);
        pool.setMaxWaitTime(60 * 1000);
        pool.setMaxConnections(iPoolSize * 2);
      }
      if (repository == null)
      {
        repository = JCO.createRepository("DefaultRepository", strPoolName);
      }
    }
    return pool;
  }

  /**
   * <p>Release a client</p>
   * @param connection the client to release
   */
  public void release(Client connection)
  {
    if (connection == null)
      return;
    try
    {
      JCO.releaseClient(connection);
    }
    catch (Exception e)
    {
      try
      {
        connection.reset();
        JCO.releaseClient(connection);
      }
      catch (Exception e1)
      {
      }
    }
  }

}


相关推荐

    sapjco-sapjco3部署在linux windows所需文件

    3. **配置so文件**:将`sapjco3.so`复制到系统的`lib`目录,例如`/usr/lib`,或者在`LD_LIBRARY_PATH`环境变量中添加该库的路径。 4. **设置权限**:可能需要调整`sapjco3.so`的权限,使其可由Java进程读取和执行。...

    sapjco3.jar下载

    描述中提到的“有些技术不可用,下了三个版本才可以用”可能是指在尝试不同版本的 SAP JCo3 以找到与当前环境兼容的版本。 在集成 SAP JCo3 时,通常需要进行以下步骤: 1. **安装 JCo**: 下载并安装 SAP JCo ...

    JAVA链接SAP相关jar包(sapjco3.jar、sapjco3.dll、libsapjco3.so)

    最后,libsapjco3.so是针对Linux系统的动态链接库,作用与sapjco3.dll类似,负责在Linux环境下实现Java与SAP系统的通信。在部署Java应用到Linux服务器时,需要确保该库在系统的LD_LIBRARY_PATH环境变量中,以便Java...

    sapjco3.dll结合sapjco3.jar包下载

    是因为没有找到 sapjco3.dll这个库的路径,安装了JDK的环境中,这个库默认的位置不是在system32下,而是在 JDK/JRE/BIN下面。 sapjco3 开发环境设置 1.开发中需要将sapjco3.jar加入到项目的build path中 2.或者将其...

    JAVA 调用SAP端接口的相关包(sapjco3.jar,sapjco3.dll,sapjcorfc.dll)

    在Windows环境中,`sapjcorfc.dll`通常与`sapjco3.dll`一起工作,为Java应用程序提供与SAP R/3系统的连接。 使用这些文件进行SAP接口调用的步骤如下: 1. **配置JCo**: 在Java项目中添加`sapjco3.jar`到类路径,...

    sapjco3最新版

    5. **错误处理和日志记录**:JCo3提供详细的错误处理机制和日志记录功能,有助于开发者诊断和解决集成过程中的问题。 6. **安装与配置**:在部署SAP JCo3时,需要将库文件添加到Java项目类路径中,并进行相应的系统...

    Sapjco3 环境部署

    为了确保SAPJCO3能够在不同的操作系统上正常工作,我们需要对Windows和Linux环境进行相应的配置。本文将详细介绍在Windows和Linux环境下部署SAPJCO3的具体步骤。 #### 二、Windows环境部署 ##### 1. 引入SAPJCO3库...

    sapjco3 jar包

    1.sapjco3.dll 需要与 sapjco3.jar 在同一目录 2.设置系统环境变量,将sapjco3所在目录加入系统环境变量 例如: 新建环境变量 变量名: JAVA_SAPJCO 变量值: E:\sapjco3\sapjco3-win32 将新建的 JAVA_SAPJCO 环境...

    sapjco3配置和测试源码

    压缩包中的"JCo3配置说明.docx"文档应详细阐述了这些步骤,并可能包含了一些特定的注意事项或解决常见问题的方法。"测试源码"文件夹包含的是示例代码或用户自定义的代码,用于测试SAP JCo3的配置是否成功。"sapjco3-...

    SAP JCo 3 for Windows X64

    它包含了编译后的二进制文件(如sapjco3.dll)的符号信息,帮助开发者在出现问题时进行调试。 5. Readme.txt:这是标准的文档文件,可能包含了安装指南、版本信息、使用注意事项或其他重要说明。 6. examples:这...

    sapjco3.jar

    此外,为了调试和优化,SAP JCo3还提供了丰富的日志功能,可以通过配置`JCoContext.setLogLevel(int logLevel)`来控制日志级别,帮助开发者追踪和解决问题。 总的来说,SAP JCo3.jar是Java与SAP集成的核心组件,它...

    sapjco3.dll

    windows环境设置1.sapjco3.dll需要与sapjco3.jar在同一目录2.设置系统环境变量,将sapjco3所在目录加入系统环境变量例如:新建环境变量变量名:JAVA_SAPJCO变量值:E:\ sapjco3 \ sapjco3- win32将新建的JAVA_SAP...

    sapjco3资源包

    SAP JCo3(Java Connector 3)资源包是一款用于连接SAP系统的重要组件,它提供了在Java应用程序中与SAP R/3系统交互的能力。这个压缩包包含了适用于不同操作系统的版本,包括Windows 32位、Windows 64位、Linux 64位...

    sapjco3各个版本

    在Linux环境下,SAP JCo3通常需要与特定的JDK版本搭配使用,以确保兼容性和稳定性。 - **Windows**:Windows版本的SAP JCo3适应于Windows Server和桌面操作系统,如Windows 7、Windows 10等。在Windows下,安装过程...

    SAP JCo2 to SAP JCo3

    SAP JCo2(Java Connector 2)是SAP用于连接和集成SAP应用程序与Java应用程序的一个中间件组件,而SAP JCo3(Java Connector 3)则是SAP为其Java Connector推出的下一代版本。在本文中,我们将探讨如何从SAP JCo2...

    如何安装SAP JCo3

    在IT行业中,SAP JCo3(Java Connector 3)是一种关键的技术,它允许Java应用程序与SAP系统进行通信和数据交互。SAP JCo3是SAP NetWeaver的一部分,提供了一种标准的接口,使得开发人员可以利用Java语言轻松地集成...

Global site tag (gtag.js) - Google Analytics