WedX - журнал о программировании и компьютерных науках

Как загрузить файлы в сеансовый компонент

У меня есть приложение Java EE EE5 EJB3. Я разрабатываю с использованием NetBeans 6.7 и GlassFish 2.x. Мне нужен файл конфигурации (*.xsl, *.xml), специфичный для развертывания/клиента.

Мои вопросы:

1) куда класть файлы, которые являются внешними по отношению к файлу уха?

2) Как загрузить файлы в сеансовый компонент? можно ли использовать инъекцию?

Мне удается ввести @Resource для имени файла, используя ejb-jar.xml.

Спасибо заранее. ГРАММ.

26.12.2009

Ответы:


1

Я думаю, это не то, что вы ожидаете, но правильный ответ: вам не следует этого делать! Согласно спецификациям EJB, а точнее Ограничениям программирования:

Корпоративный компонент не должен использовать пакет java.io для доступа к файлам и каталогам в файловой системе.

И за этим утверждением следует такое объяснение:

API-интерфейсы файловой системы плохо подходят для доступа бизнес-компонентов к данным. Бизнес-компоненты должны использовать API-интерфейс менеджера ресурсов, например JDBC, для хранения данных.

Причины этого утверждения следующие:

  1. Доступ к файловой системе не является транзакционным и может поставить под угрозу возможность распространения компонентов.
  2. Доступ к файловой системе из EJB поставит под угрозу его развертывание (ресурс не находится под контролем контейнера EJB, а EJB не может быть легко перемещен в кластере).
  3. Доступ к файловой системе является потенциальной дырой в безопасности.

Теперь, когда вы это знаете, если вы все еще хотите делать то, что имели в виду, и если ваш контейнер EJB не ограничивает использование классов из пакета java.io, тогда я бы поместил файл только для чтения в путь к классам, предпочтительно в JAR , и получить к нему доступ с помощью методов getResource() или getResourceAsStream() из java.lang.Class. Но на самом деле вы должны помнить о спецификации, она поможет вам создавать переносимые приложения.

27.12.2009
  • Спасибо, Паскаль. Можете ли вы предложить альтернативный способ решения этого требования? огромное спасибо. ГРАММ. 27.12.2009
  • Мы уже дали вам подсказки на этой странице (свойства JDBC, JNDI), но я позволю ewernli ответить на этот вопрос, поскольку вы приняли его ответ. 27.12.2009
  • Привет Паскаль. Мне нужно быть более конкретным :). Мне нужно загрузить файл xsl для перевода xml, отправленного через веб-службу или http-сообщение. каждому клиенту потребуется, чтобы файл немного отличался. Я использовал инъекцию JNDI и @Resource, но не понимаю, как таким образом можно загрузить файл xsl. огромное спасибо. ГРАММ. 27.12.2009
  • Просто уточню: как вы отличаете клиентов? Собираетесь развернуть несколько EAR? Вы пользуетесь Метро? 27.12.2009
  • основной EAR будет одинаковым (jar и war) для всех развертываний, разница будет в файлах xsl. Что такое метро? Спасибо за вашу помощь. 27.12.2009

  • 2

    Если вы можете собрать один EAR для каждого целевого развертывания (возможно, maven profile может помочь в этой области), то вы можете затем загрузить его как ресурс.

    Другой вариант — ознакомиться с Спецификацией развертывания приложений J2EE (JSR-88 ), чтобы иметь один EAR с планом развертывания N для каждой среды.

    Вы также можете решить сохранить файл в файловой системе (даже если это запрещено). Если вы хотите, чтобы путь был в ejb.xml то нужно опять же собирать или разворачивать EAR по разному - большого выигрыша тогда нет. Другой вариант — использовать пользовательский ресурс JNDI Glassfish, чтобы иметь возможность настроить путь прямо из консоли администратора. Ваше приложение. может загрузить файл в соответствии с настроенным путем.

    27.12.2009
  • Спасибо за ваш ответ. Если я воспользуюсь приведенным выше советом и не буду использовать файловую систему, можете ли вы объяснить, какова будет альтернативная стратегия? Могу ли я упаковать файлы в библиотеку и использовать ее как внешнюю библиотеку из основной эпохи? таким образом я могу предварительно упаковать библиотеку только для каждого развертывания. огромное спасибо. ГРАММ. 27.12.2009
  • Не уверен, что именно вы имеете в виду, но обычно, если вы упаковываете файлы своего клиента в .jar и помещаете .jar в .ear, вы должны иметь возможность загружать файл как ресурс. 28.12.2009
  • привет, да, это то, что я имел в виду. Я предполагаю, что у меня может быть файл jar по умолчанию, в котором есть файлы по умолчанию, а затем для каждого клиента я могу заменить только этот jar в ухе? огромное спасибо. ГРАММ. 28.12.2009

  • 3

    См. этот вопрос: Обработка файлов в Java EE.

    Спецификация запрещает доступ к файлам с помощью java.io, но не запрещает доступ к файлам вообще.

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

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

    Свойства JNDI можно использовать в качестве альтернативы файлу конфигурации. Свойства JNDI определяются в дескрипторе развертывания и привязывают значение к имени JNDI во время развертывания. Приложение может искать значение внутри приложения, используя имя JNDI.

    27.12.2009
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    © 2024 wedx.ru, WedX - журнал о программировании и компьютерных науках
    Для любых предложений по сайту: [email protected]