Преобразование байтов в тип без изменения приложения (т.е. сохранение метода преобразования в БД) с помощью Spring 3.0 - PullRequest
1 голос
/ 21 марта 2010

Есть ли способ сохранить стратегию преобразования (для преобразования некоторых байтов) в базу данных, а затем выполнить ее во время выполнения.

Если бы нужно было сохранить полный файл Java, вам нужно было бы скомпилировать его, сохранить класс и кое-что добавить в уже работающую систему. Я не уверен, как это было бы возможно.

Но было бы неплохо использовать какой-нибудь динамический язык в JVM. Я вижу пример исполнения Groovy изнутри весеннего контекста здесь http://www.devx.com/tips/Tip/42789

, но это все еще статично по своей природе, поскольку контекст приложения содержит ссылку на реализацию и не может быть изменен базой данных.

Это все равно, что дать конечному пользователю использовать DSL (предметно-ориентированный язык) для хранения и выполнения стратегий конвертации. Конечный пользователь сможет ввести свои пользовательские правила

Возможно, с JavaConfig контекста это возможно. Сейчас я изучаю варианты, особенно с Spring 3.0. Ваши предложения в любом направлении будут приветствоваться.

Ответы [ 2 ]

1 голос
/ 21 марта 2010

Для меня это звучит так, как будто вы хотите сериализовать Java-классы в БД. Насколько мне известно, это совершенно нормально, хотя я никогда не делал это сам. Вот ссылка на учебник , но вы можете легко зайти в Google, чтобы узнать больше.

OTOH, подумав, зачем вам на самом деле нужно хранить полный экземпляр класса в БД? Разве этого недостаточно, чтобы сохранить полное имя класса, затем загрузить класс и создать его экземпляр (с желаемыми свойствами, которые также могут быть получены из конфигурации) через Spring?

Обновление: ОК, теперь я понимаю ваш случай лучше.

Сериализация может быть приемлемым вариантом, если вы можете ограничить своих конечных пользователей в предоставлении сериализуемых классов стратегии. Обратите внимание, что сериализация имеет свои особенности, поэтому для ее правильной работы требуется более глубокое знание Java. Джош Блох в Effective Java 2nd Ed. посвящает всю главу 11 сериализации. Выполнение кода, предоставленного сторонними организациями, также может представлять угрозу безопасности.

Другим возможным вариантом может быть реализация элементов вашего DSL самостоятельно, а затем предоставление конечным пользователям того, что они хотят, из элементов, предоставленных вами. Это было бы безопаснее и надежнее, поскольку у вас все еще был контроль над тем, что попадает в БД и что выполняется.

0 голосов
/ 22 марта 2010

Если вы хотите, чтобы поведение, хранящееся в БД, было похоже на сценарий, рассмотрите что-то вроде http://mvel.codehaus.org/ - это очень легко сделать.

...