2014-01-31 37 views
0

我有一個客戶想保持.class文件Bloboracle 11g數據庫(要求由於.class對金融批次和加密邏輯,客戶端不希望將其放在應用程序服務器上)。調用類(編譯Java文件),從數據庫文件,並在應用服務器上運行時執行它

我的問題是

是否有可能調用時有應用程序,它從數據庫中檢索.class文件(編譯Java文件),並執行這樣的功能?

在此先感謝。

+0

他們真的想將類存儲在數據庫中,但是從外部應用程序/ JVM加載並運行它?他們不想[在數據庫中運行Java類](http://docs.oracle.com/cd/E18283_01/java.112/e10588/cheleven.htm)?這可以從外部應用程序調用。例如用PL/SQL程序包裝器,但是猜測它取決於類將要做什麼。 –

+0

在這種情況下,我們需要存儲.class文件DB,如果它是用於批處理的,我們可以從DB本身運行(但又需要知道如何),並且它與加密有關,它需要在應用程序端執行。 –

回答

1

是的,你需要編寫一個自定義的java.lang.ClassLoader,它使用從數據庫讀取的字節來定義類。

它會是這個樣子:

public class DatabaseClassLoader extends ClassLoader 
{ 
    private DataSource dataSource; 

    public DatabaseClassLoader(ClassLoader parent, DataSource dataSource) 
    { 
    super(parent); 
    this.dataSource = dataSource; 
    } 

    @Override 
    public Class<?> loadClass(String name) throws ClassNotFoundException 
    { 
    byte[] classDefinition = loadClassDefinition(name); 

    if (classDefinition != null) 
    { 
     Class c = defineClass(name, classDefinition, 0, classDefinition.length); 
     resolveClass(c); 
     return c; 
    } 
    else 
    { 
     return super.loadClass(name); 
    } 
    } 

    private byte[] loadClassDefinition(String name) 
    { 
    ... 
    } 
} 

loadClassDefinition嘗試加載表示使用該名稱作爲SQL查詢的關鍵類的字節 - 你必須精確地定義如何它自己做,但大綱會查詢表格,將blob讀入數組並返回。

+0

會有可能你分享一個例子在此先感謝 –

+0

謝謝我會嘗試它。 –

相關問題