2017-07-14 7 views
1

スプリングブートアプリケーションに接続しようとしています。WARファイルとして実行すると、Sybase JDBC接続ログインに失敗しました。 Eclipse内で実行するとログインが成功する

私はJConnect jconn4 jdbcドライバを使用しています。

ログインパスワードは、Sybaseサーバーでを暗号化あるので、私はパスワードを暗号化するためにはBouncyCastle暗号化APIを使用しています。以下は

は、コードのブロックです:

このコードは、後に、私は春のJDBCTemplateを使用するために、これを変更する予定です、接続をテストするためにプレーンJDBCを使用しています。

Connection con = null; 

    try { 
     Class.forName("com.sybase.jdbc4.jdbc.SybDriver"); 
     logger.info("Loaded Sybase driver successfully....."); 
    } catch (ClassNotFoundException cnfe) { 
     cnfe.printStackTrace(); 
    } 

String url = "jdbc:sybase:Tds:<url>:<port>/<databasename>"; 
    Properties props = new Properties(); 
    props.put("ENCRYPT_PASSWORD", "true"); 
    props.put("JCE_PROVIDER_CLASS", "org.bouncycastle.jce.provider.BouncyCastleProvider"); 
    props.put("user", "username"); 
    props.put("password", "pwd"); 

con = DriverManager.getConnection(url, props); 

のSybaseサーバーへのログイン成功:

  1. は、Eclipse IDE内でアプリケーションを実行します。ログインは、Sybase Serverに失敗した

  1. Windowsのコマンドプロンプト内で生成されたWARファイルを実行します。
  2. Linuxのシェル(のDev/QAサーバ)内で生成されたWARファイルを実行します。私が試したalreday何

1.Compared jars.Becauseの下に同じjarファイルの複数バージョンが存在するためランタイム時にアプリケーションが使用するjarファイルのバージョンファイルはクラスパス(さまざまな依存関係)にあります。

jconn4-7.07.jar(sybase jdbcドライバ)。

bcprov-jdk16-1.43.jar(bouncycastle crypto API)。

ランタイムでアプリケーションで使用されているjarを見つけるために、以下のコードブロックを使用しました。

Class clazz = null; 
try { 
    clazz = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider"); 
    logger.info("BouncyCastleProvider is ... " + clazz.toString()); 

    if (clazz != null && clazz.getProtectionDomain() != null 
      && clazz.getProtectionDomain().getCodeSource() != null) { 
     URL codeLocation = clazz.getProtectionDomain().getCodeSource().getLocation(); 
     logger.info("BouncyCastleProvider jar is ... " + codeLocation.toString()); 
    } 

} catch (ClassNotFoundException e) { 
    logger.info(e.getMessage()); 
} 

2.Found 4のpom.xmlの依存階層 Eclipseのウィンドウとてbcprov-jdk1x-x.xx.jarファイルのバージョンはポンポンでこれらのファイルの 3 'を除外' 。これは回避することですバージョンjarファイルのが矛盾しています。

それは:-(動作していません。

WARとして実行している間Eclispe以内に接続していないことが可能であるのはなぜ?

すべてのヘルプ/方向はあまり有用であろう。

答えて

1

研究の多くとほとんど10時間の努力のを過ごし、私は接続のプロパティに「CHARSET」を追加することによってこの問題を解決することができるよ。

props.put("CHARSET", "iso_1"); 

話の道徳:問題はもっと大きくなるかもしれませんが、解決策はありません:-)。

関連する問題