| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Файл .properties и Web-приложение |
| Автор: MisterCleric 23.5.2006, 15:05 | ||
| Здравствуйте, уважаемые. Почитал все на форуме о properties и так и не понял нужно оно мне или нет. А проблема стоит такая: У меня есть класс для работы с БД, его методы вызываются из JSP. Так вот, хочу все запросы к БД записать в файл BDProp.properties наподобие:
Чтобы можно было их в любой момент корректировать. Стоит ли мне делать это в файле properties, если да, то где его бандлить: в JSP или можно мой класс сделать Листенером или Фильтром и все делать в нем, а если так, то как тогда связать такой класс с JSP? |
| Автор: batigoal 23.5.2006, 15:29 |
| Отставив в сторонку пока вопрос с хранением запроса в Properties, обращаю твоё внимание на гораздо более интересную вещь. Делать так настоятельно НЕ рекомендуется. Используй PreparedStatement. В противном случае ты серьезно потеряешь в производительности. Дело в том, что для каждого такого "склеенного" запроса будет создаваться новый план выполнения. В случае PreparedStatement - план будет составлен один раз. А что касается твоего вопроса - мы делали такие запросы константными строками в классах. |
| Автор: MisterCleric 23.5.2006, 15:42 |
| Спасибо за замечание, но эт я просто для примера привел - так, набросок. А делаеться как раз через PreparedStatement и насчет констант я знаю. Смысл в том, что бы сделать этот класс универсальным для выполнения запросов, которые я бы безболезненно мог бы редактировать даже со странички. |
| Автор: MisterCleric 23.5.2006, 16:21 |
| Ага. А в JSP просто передавать моему классу ключ тогда, когда мне надо. Я в фильтрах и листенерах пока не селен, так что делаю все через JSP. Но если нет, то тогда заброшу пока тему о properties |
| Автор: ALKS 23.5.2006, 20:38 |
| если ты будеш использовать для чтения файла properties класс java.util.Properties то фактически каждый раз вынимая запрос будеш читать фаил а сие есть зло. если ты будеш использовать java.util.ResourceBundle то напоришся на его внутринний кэш т.е. корректировать запросы на лету - не получиться. я бы в твоем случае, хранил бы запросы... в БД. |
| Автор: MisterCleric 24.5.2006, 12:12 | ||
Ага. Спасибо.
Пока и не собираюсь Вот java.util.ResourceBundle меня и интересует. Где мне его создавать - в классе или JSP? А класс мне переделывать под фильтр или листенер или постоить цепочку бинов доступа к этому классу? В общем подскажите основную идею работы с java.util.ResourceBundle, если я хочу разделить бизнесс-логику и прдеставление. |
| Автор: chief39 24.5.2006, 12:32 |
| Частенько делали простенький, заточенный под конкретную задачу, конструктор запросов. + Константы, как Lamer George заметил. В пропертисах можно хранить имена таблиц и полей. При старте - подгружать их и делать препаред стейтменты, используя свой конструкторчик(который, кстати, будет зачастую гарантировать отсутствие досадных синтаксических ошибок в запросе) |
| Автор: MisterCleric 24.5.2006, 12:45 |
| Это все клево. Но задача состоит в том, чтобы код моего класса для работы с БД был переносим в другое приложение с другой БД без подрехтовки и перекомпиляции. В общем всем спасибо. Что-то я понял. Буду следовать вашим советам. Как получится, выставлю код на обозрение (если интересно) |
| Автор: ALKS 24.5.2006, 15:32 |
| MisterCleric, ResourceBundle.getBundle("cool_property_file") - это статический вызов! тебе не нужно создавать никакого объекта. более того этот класс обеспечивает внутринний кэш, так что в большинстве случаев ты будеш тягать уже закэшированные в память данные. и совершенно безразлично где ты будеш вызывать. удобно тебе в JSP - юзай в JSP. |
| Автор: chief39 24.5.2006, 16:28 | ||
Делай конструктор, который использует стандартный СКЛ в пропертисы заноси имена таблиц и полей, которые на другой системе подрихтуешь Но если все запросы в корне будут различаться при переносе.... - тогда, конечно, лажа |
| Автор: MisterCleric 5.6.2006, 13:45 | ||||||
| Всем здрасте! Значит так. У меня что-то вышло, как и обещал выкладываю. Бин для работы с БД:
Поскольку DataSource берется из JNDI, то бин независит от сервера БД Поскольку все SQL-выражения берутся из ResourceBundle, а его параметры передаються в конкретной задаче, то он не зависит от приложения. Файл .properties выглядит примерно так:
И примерно такова работа с ним:
Не претендую на гениальность. Уверен, что можно еще больше разделить бизнес-логику и представление. И по ходу вопрос можно ли сделать implements Filter по обращению к БД? |