Файл Jar Java как потоковый загрузчик классов - PullRequest
2 голосов
/ 23 сентября 2011

Как загрузить классы из файла JAR, хранящегося в виде большого двоичного объекта в базе данных, так как загрузчик классов URL-адресов принимает только URL-адрес или путь к файлу?

Ответы [ 5 ]

2 голосов
/ 23 сентября 2011

Написание собственного ClassLoader может быть довольно запутанным, особенно для новичка. Недавно мне нужно было динамически загрузить несколько банок, и я нашел этот ответ очень полезным. Он объясняет, как использовать ResourceFinder, класс из Apache xbean или что-то еще. Это единственный файл, который вы можете легко вставить в свой проект.

Наиболее выгодно для вашей ситуации, хотя ResourceFinder загружается по URL, функция readContents (используемая для фактической загрузки файла JAR) выглядит следующим образом:

private String readContents(URL resource) throws IOException {
    InputStream in = resource.openStream();
    BufferedInputStream reader = null;
    StringBuilder sb = new StringBuilder();

    try {
        reader = new BufferedInputStream(in);

        int b = reader.read();
        while (b != -1) {
            sb.append((char) b);
            b = reader.read();
        }

        return sb.toString().trim();
    } finally {
        try {
            in.close();
            reader.close();
        } catch (Exception e) {
        }
    }
}

, который можно легко изменить для работы с любым потоком / блобом, который у вас есть. Некоторые незначительные изменения в классе могут, я уверен, заставить его делать именно то, что вы хотите, или, по крайней мере, указать вам правильное направление. Писать ClassLoaders с нуля - это не весело.

EDIT: Знаешь, я только что посмотрел еще раз и не уверен, что тебе удастся избежать незначительных изменений в ResourceFinder. Тем не менее, посмотрите, посмотрите, что вы можете получить от этого.

2 голосов
/ 23 сентября 2011

Реализация собственного подкласса из java.lang.ClassLoader, который выполняет загрузку из базы данных.

Может быть, этот пост поможет начать: http://www.javablogging.com/java-classloader-2-write-your-own-classloader/

1 голос
/ 23 сентября 2011

Если вы посмотрите на код для JarClassLoader в руководстве по Java , с которого вы начнете.

Существуют и другие доступные ресурсы, если вы используете Google для Jar Class Loader.
Вам нужно будет изменить код для передачи в ByteStream, который вы получили от BLOB в БД.

0 голосов
/ 23 сентября 2011

реализация вашего собственного загрузчика классов - очевидный ответ. в зависимости от того, как вам нужно использовать классы, которые могут быть проблематичными. другой, менее известный вариант - реализовать собственный обработчик URL. Вы могли бы придумать собственную схему URL, например "db://<dbname>/<tablename>/<jarfile>" или что-то в этом роде. вы бы реализовали пользовательский URLStreamHandler, подробности здесь .

0 голосов
/ 23 сентября 2011
 one way to laod jar file .. it may helpful to you.



 public class JarLoad {
        public static void main(String[] args) throws ZipException, IOException {
    File jarfile = new File("C\\scan.jar");
    if(! jarfile.isDirectory()){
        ZipFile jar = new ZipFile(jarfile);
        Enumeration enumeration = jar.entries();
        while(enumeration.hasMoreElements()){
            ZipEntry zipEntry = (ZipEntry)enumeration.nextElement();
            System.out.println(zipEntry.getName());
        }

    }

}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...