2013-05-02 79 views
0

我有一個簡單的java類,在「TMSCore」java項目中顯示「等待」文本執行。如何在jboss7啓動時執行jar文件?

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 \模塊\有機\ TMS \主,並粘貼在相同的路徑中的罐子

然後我有創建module.xml並在同一路徑粘貼

module.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部署,structure.xml

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

當我開始使用含有上述的JBoss部署,structure.xml我的戰爭中,服務器在我的控制檯其表現部署TMSCore.jar

,但我的「等待」在我的罐子文本不顯示在控制檯上

我的要求是我應該得到「================================」在我的控制檯上一旦jboss是啓動了

否則任何人都可以建議如何讓一個jar來啓動jboss服務器執行?

BTW我使用JBOSS7.1

回答

1

如果我是正確的,那是因爲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> 
    

現在你必須有隻加載一次類的模塊。我需要有你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; 
    } 

} 

還是那句話:沒有測試。

1

您不能運行jar,但可以在單例中執行啓動方法。

@Startup 
@Singleton 
public class FooBean { 

    @PostConstruct 
    void atStartup() { ... } 

    @PreDestroy 
    void atShutdown() { ... } 

} 

這會在應用程序啓動和關閉時發生。我會從那裏調用你需要的功能。

請參閱http://docs.oracle.com/javaee/6/tutorial/doc/gipvi.html