Какая веб-Платформа Java подходит лучше всего с Google Guice? [закрытый]

После редактирования вопроса я вижу, что допустимо отмену логического уровня. Если это так, можно попробовать следующий алгоритм.

1) Создайте службу с помощью InstanceContextMode=InstanceContextMode.PerSession, чтобы гарантировать, что у вас есть тот же экземпляр службы для обслуживания последующих запросов.

2) для запуска новых сеансов используйте служебные операции, отмеченные OperationContract(IsInitiating = True)

3), создайте в качестве члена службы. не статично. это будет состояние обслуживания

CancellationTokenSource ct = new CancellationTokenSource();

4) внутри каждого метода обслуживания вам придется начинать новые вычисления внутри задач и помещать токен отмены в качестве параметра для этой задачи.

[ServiceContract(SessionMode = SessionMode.Allowed)]
public interface ICalculator
{
   [OperationContract(IsInitiating = True)]
   Bool Begin()

   [OperationContract(IsInitiating = false)]
   double Add(double n1, double n2)
}

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculator
{
    CancellationTokenSource cts = new CancellationTokenSource();

    public double Add(double n1, double n2)
    {
        var cancellationToken = cts.Token;

        var t = Task.Factory.StartNew(() => { 
           // here you can do something long
           while(true){
           // and periodically check if task should be cancelled or not
           if(cancellationToken.IsCancellationRequested)
             throw new OperationCanceledException();

           // or same in different words
           cancellationToken.ThrowIfCancellationRequested();
           }
           return n1 + n2;
        }, cancellationToken);

        return t.Result;
    }

    public Bool Begin(){}
}

Вот краткое описание сессий WCF .

Все примеры только с моей головы, не пробовали, если они действительно работают. Но вы можете попробовать.

20
задан Andreas Petersson 8 February 2009 в 02:35
поделиться

4 ответа

Я собрал некоторый опыт в этой теме, когда я начал программировать на новом проекте в ноябре. Проект находится в поздней стадии теперь.

Для меня, следующее руководство по проектированию было важно:

  • Использование современный технологический стек, который является и забавой использовать и будет во всеобщем употреблении в будущем.
  • Сокращают количество артефактов проекта - используют код аннотаций/Java, где это имеет смысл, опустите XML.
  • платформы Использования, которые являются открытым исходным кодом
  • , Имеют активное сообщество
  • , Не альфа-этап
  • , легок
  • , Избегают дублирования понятий
  • , я могу объяснить понятия в нем моим двум поддерживающим разработчикам, которые - несмотря на то, чтобы быть хорошими программистами - никогда не использовали внедрение зависимости (DI) или веб-платформы.
  • Может служить techological основанием для будущих проектов

Google Guice , поскольку контейнер DI был очевидным выбором - ясно наиболее хорошо думавший DI contianer с блестящими разработчиками и хорошим сообществом. Это выполняет все упомянутые выше пункты маркированного списка.

, Таким образом, я настроил свою основную стопку techology. Запущенный с Guice, добавил , в спящем режиме для персистентности (наряду с , деформация - сохраняется и сервлет деформации ). Затем я записал некоторым основным ДАО , который выбирает что-то.

Затем я пытался сделать следующее: добавленный другая веб-платформа вдобавок ко всему

я создал простую страницу с таблицей, заполненной ДАО, заголовками и текстовым полем со всеми четырьмя платформами.

Они были моими результатами при сравнении этих четырех платформ.

XSLT и XStream являются своего рода жестким подходом. Это не действительно платформа, но жизнеспособный techology абсолютно не сохраняющий состояние для высокоэффективных приложений. Это было безусловно самым быстрым способом служить тестовой странице. В режиме отладки, 3  мс на localhost по сравнению с приблизительно 30-50  мс с другим framworks.

интеграция Guice была относительно гладким и хорошим сервлетом деформации использования, который позволил мне ввести в сервлеты и вводит httprequest, httpresponse, сессию в других объектах, не раздавая их. Недостатки: никакое сообщество вообще, так как я - единственный человек, который рассмотрел бы этот стек. - никакие готовые к использованию компоненты.

Затем я смотрел на JSF и Guice: конечно, возможно поместить инжектор в контекст сервлета и облик использования как услуга локатор. С простым подходом невозможно ввести отступающие бобы где-то в другом месте. Используя пользовательский переменный сопоставитель решает это частично, но затем Вы теряете весь , интеграция IDE в Ваших файлах JSF плюс Вы должна будет использовать ужасный FQN для Ваших бобов поддержки или создать строку-> ключ Guice, отображающийся где-нибудь. Оба ужасны как:

  • Преимущества: хорошее сообщество, многие разработчики на рынке труда (никакие критерии меня). Вы не будете уволены за chosing JSF, если что-то пойдет не так, как надо.
  • Недостатки: приносит его собственное Инверсия управления (МОК) механизм, который сталкивается концептуально с обликом.

виджеты деформации: Я создал свой простой пример с помощью этого для забавы; это - ранний альфа-этап. Было хорошо использовать, и его компоненты легко реализовать и снова использовать один. Это имеет целью предоставлять безопасному с точки зрения типов HTML идеальную интеграцию Guice. Так как было похоже, что это имело только одного активного разработчика тогда, который теперь propably работает над Guice 2.0, я сказал бы, что сообщество почти не существует. Это работало как очарование, было довольно быстро, но я буду альфа-тестером. Это было просто слишком опасно, чтобы я рассмотрел это для коммерческого проекта.

Калитка Apache: этот проект сначала удивил меня МОК калитки и калиткой-guice, объединяющейся в базовой загрузке. Инжекция конструктора в веб-страницах не возможна, только setter+field. Инжекция в веб-страницах Калитки легка, просто добавьте @Inject к полям, которые Вы хотите заполнить - но Вы, как предполагается, не понимаете , как она работает в фоне . Хитрый случай материала. Инжекция веб-страниц теоретически возможна - но я не использовал ее однажды, так как это лишает возможности использовать смонтированные URL, плюс он смешает с, сохранился/сериализировал состояние. С введенными членами классов имеют дело прозрачно с сериализацией веб-страницы, которая необходима для включения спинки браузера. Использование калитки обнуляет внешние артефакты - просто немного конфигурации эти URL в классе приложений. Таким образом, вся конфигурация реализована в Java - который соответствует модели Guice хорошо. Четкое разделение HTML и Java. Это - открытый исходный код точно так же, как большинство компонентов, которые являются многочисленными и хорошего качества. Это вокруг с 2005(?) и является проектом Apache верхнего уровня. Хотя это - многофункциональная платформа, , API разумен компактный (все базовые классы помещаются в сингл JPEG на моем экране). В отличие от других, это не приносит собственный механизм МОК, а скорее думает о МОК как услуга, который может быть обеспечен [1 119], Платформа Spring , Guice, и т.д. и та философия делает это превосходящим w.r.t. Интеграция Guice. Я упоминал действительно умную и легкую поддержку Ajax?

Платформы, не глубоко оцененные: tapestry5 - приводит свой собственный МОК. Шов : не платформа самостоятельно, а meta-framwwork, который обычно comines Spring, JSF. Быть в спящем режиме. (Хотя Spring может теоретически быть заменен Guice.)

Сводка: из оцененного framworks Калитка Apache была явным победителем - относительно интеграции Guice + все другие упомянутые критерии.

Помимо нас два, у некоторых других людей была эта проблема прежде .

22
ответ дан 30 November 2019 в 00:09
поделиться

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

7
ответ дан 30 November 2019 в 00:09
поделиться
3
ответ дан 30 November 2019 в 00:09
поделиться

Хороший легкий веб-контейнер Прост . Это чрезвычайно производительно и может использоваться с платформами такой как Restlet и Джерси .

1
ответ дан 30 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

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