2012-03-28 9 views
3

Eclipseで実行可能なJava SEアプリケーションがあります。通常のJava 6 SE環境で動作するようにJPAをブートストラップします。データベース内の異なるテーブルに対する各要求は100ms以上かかることはありません。アプリケーションはより速く実行されます。

問題は、実行可能なjarをエクスポートして、java -jar myapp.jarと言うとき、データベースへの各要求に約9秒かかります。私は日食

+2

どのように測定しましたか?このプロセスを実行するために使用したVMの引数はどれですか? – questzen

+0

同じロギングレベルですか? – Adam

+0

計算された時間をミリ秒単位で記録することでそれを測定します。私はLog4jを使用し、ログレベルは同じです= "DEBUG" –

答えて

1

を引き起こしているクラスの異なるバージョンをロードしていますかどうかを確認するために、その都度I私は、エンティティマネージャを作成して、データベースへの要求をしていた。

Persistence.createEntityManagerFactory("mysqldb"); 

私はそのようなシングルトンエンティティファクトリを使用して、エンティティ・マネージャの作成を最適化するために:

private static EntityManagerFactory em = Persistence 
     .createEntityManagerFactory("mysqldb"); 

public static EntityManagerFactory getEmf() 
{ 
    return em; 
} 

これはEclipse以外のアプリケーションのパフォーマンスを改善するために働いていましたが、Eclipseで実行するとパフォーマンスに変化はありません。

アプリケーションがEclipseから起動されたときに、それがよりうまくいった理由はわかりませんが、この解決策は私の問題を現時点で解決しました。

+0

+1あなた自身の問題を並べ替えるためにここにフォローアップ - あなたがそれをどこかに持って聞いて – davidfrancis

0

から、それを実行したときに

は、私は日食のコンパイラを使用する方法のわからないアプリケーションが高速である理由を理解していません。日食が使用するAntスクリプトは次のとおりです。

あなたは-verbose使用することができ
<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project default="create_run_jar" name="Create Runnable Jar for Project Server"> 
<!--this file was created by Eclipse Runnable JAR Export Wizard--> 
<!--ANT 1.7 is required          --> 
<target name="create_run_jar"> 
    <jar destfile="myapp.jar" filesetmanifest="mergewithoutmain"> 
     <manifest> 
      <attribute name="Main-Class" value="myapp.main.Main"/> 
      <attribute name="Class-Path" value="."/> 
     </manifest> 
     <fileset dir="dir.../Myapp/build/classes"/> 
     <zipfileset excludes="META-INF/*.SF" src= 
      ..exclude all libraries 
    </jar> 
</target> 
</project> 
0

:両方のバージョンでクラスを、それが実際には景気減速

+0

-verboseを追加すると:Eclipseの設定でクラスを取得します。 jarをエクスポートするとき、またはjava -jarを実行するときmyapp.jar -verbose:class nothingが表示されます。 –

+0

-verbose:classを-jarの前に入れてください。 – davidfrancis

+0

申し訳ありません。私は、クラスの読み込みのコンソール出力ファイルを生成し、私はdiffを使用して、ファイルを比較しました。大きな違いは、Eclipseの場合のライブラリは作成したユーザーライブラリから読み込まれ、それ以外の場合はクラスがJARに含まれるライブラリから読み込まれる点です。私は本当にこれが問題になるとは思わない –

関連する問題