我有一個客戶想保持.class
文件Blob
在oracle 11g
數據庫(要求由於.class
對金融批次和加密邏輯,客戶端不希望將其放在應用程序服務器上)。調用類(編譯Java文件),從數據庫文件,並在應用服務器上運行時執行它
我的問題是
是否有可能調用時有應用程序,它從數據庫中檢索.class文件(編譯Java文件),並執行這樣的功能?
在此先感謝。
我有一個客戶想保持.class
文件Blob
在oracle 11g
數據庫(要求由於.class
對金融批次和加密邏輯,客戶端不希望將其放在應用程序服務器上)。調用類(編譯Java文件),從數據庫文件,並在應用服務器上運行時執行它
我的問題是
是否有可能調用時有應用程序,它從數據庫中檢索.class文件(編譯Java文件),並執行這樣的功能?
在此先感謝。
是的,你需要編寫一個自定義的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讀入數組並返回。
會有可能你分享一個例子在此先感謝 –
謝謝我會嘗試它。 –
他們真的想將類存儲在數據庫中,但是從外部應用程序/ JVM加載並運行它?他們不想[在數據庫中運行Java類](http://docs.oracle.com/cd/E18283_01/java.112/e10588/cheleven.htm)?這可以從外部應用程序調用。例如用PL/SQL程序包裝器,但是猜測它取決於類將要做什麼。 –
在這種情況下,我們需要存儲.class文件DB,如果它是用於批處理的,我們可以從DB本身運行(但又需要知道如何),並且它與加密有關,它需要在應用程序端執行。 –