Почему являются родительские потоки в Java препятствовавшим контейнером EE?

Вы можете использовать панд (pip install pandas):

import pandas as pd
df = pd.read_csv('your_file_name.csv', index_col=0)
df.to_dict()['cost price']
Out:
{'aba':'8.32', 'abb':'11.12', ...}
118
задан Peter O. 17 April 2015 в 13:16
поделиться

7 ответов

Этому препятствуют, потому что все ресурсы в среде предназначены, чтобы управляться и потенциально контролироваться, сервером. Кроме того, большая часть контекста, в котором используется поток, обычно присоединена к потоку самого выполнения. При простом запуске собственного потока (который я полагаю, что некоторые серверы даже не позволят), он не может получить доступ к другим ресурсам. То, что это означает, то, что Вы не можете получить InitialContext и сделать поиски JNDI для доступа к другим системным ресурсам, таким как Фабрики Соединения JMS и Источники данных.

существуют способы сделать это "правильно", но это зависит от используемой платформы.

commonj WorkManager характерен для WebSphere и WebLogic, а также других

[еще 111] информация здесь

И здесь

Также несколько дубликаты этот с этого утра

ОБНОВЛЕНИЕ: Обратите внимание на то, что этот вопрос и ответ касаются состояния Java EE в 2009, вещи улучшились с тех пор!

84
ответ дан Community 24 November 2019 в 01:59
поделиться

Для EJBs этому не только препятствуют, это явно запрещается спецификация :

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

и

компонент уровня предприятия не должен пытаться управлять потоками. Компонент уровня предприятия не должен пытаться запустить, остановить, приостановить, или возобновить поток или изменить thread’s приоритет или имя. Компонент уровня предприятия не должен пытаться управлять группами потока.

причина состоит в том, что EJBs предназначены для работы в распределенной среде. EJB мог бы быть перемещен от одной машины в кластере другому. Потоки (и сокеты и другие ограниченные средства) являются значительным барьером для этой мобильности.

34
ответ дан Dan Dyer 24 November 2019 в 01:59
поделиться

Причина, что Вы не должны порождать свои собственные потоки, состоит в том, что ими не будет управлять контейнер. Контейнер заботится о большом количестве вещей, которые разработчик новичка может найти трудно для воображения. Например, вещи как объединение потока, кластеризация, восстановления катастрофического отказа выполняются контейнером. При запуске потока, можно потерять некоторых из тех. Также контейнер позволяет Вам перезапустить свое приложение, не влияя на JVM, на которой это работает. Как это было бы возможно, если существуют потоки из управления контейнера?

Это причина, которые от сервисов таймера J2EE 1.4 были представлены. См. этот статья для деталей.

13
ответ дан asgs 24 November 2019 в 01:59
поделиться

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

Следуют правилам. Вы будете радоваться однажды, что Вы сделали :)

2
ответ дан Thorbjørn Ravn Andersen 24 November 2019 в 01:59
поделиться

Нет никакой настоящей причины, чтобы не сделать так. Я использовал Quarz с Spring в веб-приложении без проблем. Также платформа параллелизма java.util.concurrent может использоваться. Если Вы реализуете свою собственную обработку потока, устанавливаете theads на deamon или используете собственную группу потока deamon для них так, контейнер может разгрузить Ваше веб-приложение любое время.

, Но быть осторожным, бобовые объемы сессия и запрос не работают в порожденных потоках! Также другой код, смещенный по телефону ThreadLocal , не работает из поля, необходимо передать значения порожденным потокам собой.

2
ответ дан Arne Burmeister 24 November 2019 в 01:59
поделиться

Я никогда не читал, что этому препятствуют, кроме от того, что не легко сделать правильно.

Это - довольно низкоуровневое программирование, и как другие методы низкого уровня у Вас должно быть серьезное основание. Большинство проблем параллелизма может быть разрешено намного эффективнее использующие встроенные конструкции как пулы потоков.

1
ответ дан levand 24 November 2019 в 01:59
поделиться

Одна причина, которую я нашел, порождаете ли Вы некоторые потоки в Вас EJB и затем Вы пытаетесь иметь контейнер, разгружают или обновляют Ваш EJB, Вы собираетесь столкнуться с проблемами. Существует почти всегда другой способ сделать что-то, где Вам не нужен Поток, поэтому просто говорят "нет".

1
ответ дан Javamann 24 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: