1

「TMSCore」Javaプロジェクトで、実行時に「待機中」のテキストを表示する単純なJavaクラスがあります。

 package com.stock.bo;

    public class example {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
             System.out.println("================================> waiting");
        }

    }

TMSCore.jar を作成し、この example.class を jar ファイルのエントリ ポイントとして設定しました。

次に、このプロジェクトのモジュールを C:\Jboss\jboss-as-7.1.1\modules\org\tms\main に作成し、jar を同じパスに貼り付けました。

それから私はmodule.xmlを作成し、同じパスに貼り付けました

モジュール.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.tms">
   <resources>
    <resource-root path="TMSCore.jar"/>
   </resources>
</module>

次に、webproject/web-inf ディレクトリに jboss-deployment-structure.xml を作成しました

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="org.tms"/>
    </dependencies>
  </deployment>
</jboss-deployment-structure>

上記の jboss-deployment-structure.xml を含む戦争でサーバーを起動すると、コンソールに展開された TMSCore.jar が表示されます

しかし、jar 内の「待機中」のテキストがコンソールに表示されない

私の要件は、jboss が起動したら、コンソールに「===============================> 待っている」というメッセージが表示されることです。

または、jbossサーバーの起動時に実行するjarを作成する方法を提案できますか?

ところで私はJBOSS7.1を使用しています

4

2 に答える 2

2

jar を実行することはできませんが、シングルトンで起動メソッドを実行できます。

@Startup
@Singleton
 public class FooBean {

   @PostConstruct 
   void atStartup() { ... }

   @PreDestroy
   void atShutdown() { ... }

}

これは、アプリケーションの起動時とシャットダウン時に発生します。そこから必要な関数を呼び出します。

http://docs.oracle.com/javaee/6/tutorial/doc/gipvi.htmlを参照してください。

于 2013-05-06T15:11:58.247 に答える
2

私が正しければ、JBoss はライブラリを実行せず、ファイルに含まれるクラスのみをロードするためです。jarそのため、メイン関数を配置して実行可能ファイルを生成してjarも役に立ちません。

サーバー上にグローバル モジュールを配置することが目標である場合は、次の変更をお勧めします。

  1. モジュールを作成します (既に行ったように)
  2. で依存関係として宣言しjboss-deployment-structure.xmlます(既に行ったように)
  3. サーバー上でグローバルモジュールとして宣言して、JBoss によって一度だけロードされるようにします。構成ファイルstandalone.xmlを編集し、セクションを変更します。

    <subsystem xmlns="urn:jboss:domain:ee:1.0">
        <global-modules>
            <module name="org.tms" />
        </global-modules>
    </subsystem>
    

これで、一度だけロードされたクラスを持つモジュールができました。クラスのインスタンスが 1 つだけ必要な場合はExample、シングルトンを使用することをお勧めします。

public class Example {

    // The only one instance
    private static Example instance;

    // Private constructor to avoid creation of other instances of this class
    private Example()
    {
        System.out.println("================================> waiting");
    }


    public static Example getInstance()
    {
        if(instance == null)
        {
            instance = new Example();
        }
        return instance;
    }

}

次に、サーバー上のすべてのプロジェクトで使用します

Example ex = Example.getInstance();

既存のインスタンスを返します(または最初にインスタンスを作成します)。

注意:私は試すことができないので、それがうまくいくという保証はありません.


編集:クラスを少し変更Exampleすると、クラスのロード中に実行できるようになる可能性があります。

public class Example {

    // The only one instance
    private static Example instance = new Example();

    // Private constructor to avoid creation of other instances of this class
    private Example()
    {
        System.out.println("================================> waiting");
    }

    public static Example getInstance()
    {
        return instance;
    }

}

繰り返しますが、テストされていません。

于 2013-05-02T21:48:54.553 に答える