`

解决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最新版

    5. **错误处理和日志记录**:JCo3提供详细的错误处理机制和日志记录功能,有助于开发者诊断和解决集成过程中的问题。 6. **安装与配置**:在部署SAP JCo3时,需要将库文件添加到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.或者将其...

    如何安装SAP JCo3

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

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

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

    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...

Global site tag (gtag.js) - Google Analytics