В данной статье я разберу каким образом можно реализовать тихую доменную авторизацию (Kerberos) на сервере приложений GlassFish.
Тест проводился на ПК с Windows 7 Pro SP1 (64bit), JDK 1.7.0_25(64bit) и GlassFish 4 (ver 89).
Пользоваться мы будем библиотекой SPNEGO. Данная статья собственно является переводом и адаптацией, того что вы можете найти на странице библиотеки на английском языке.
Читать полностью »
Рубрика «java» - 231
Тихая доменная авторизация в GlassFish
2013-12-24 в 5:40, admin, рубрики: glassfish, java, spnego, метки: glassfish, java, spnego«Разбор Полетов» — Episode 52 — Главный по IDEA
2013-12-22 в 23:08, admin, рубрики: intellij idea, java, подкасты, разбор-полетов, метки: intellij idea, java, подкасты, разбор-полетов
Гость выпуска — Андрей Чепцов из JetBrains
Читать полностью »
Java-программист в Петербурге. Обзор рынка труда с точки зрения соискателя. Часть 3/3. Какие бывают работодатели
2013-12-20 в 14:48, admin, рубрики: human resources, java, job, метки: human resources, java, job Часть 1/3. Какие бывают 'плюшки'.
Часть 2/3. Подводные камни для «новичка».
Какие бывают работодатели. Характерные особенности.
Вместо краткого вступления, одну закономерность можно назвать сразу: чем длиннее и крупнее проект, тем древнее технологии. Хотите на практике освоить новые технологии — участвуйте в стартующих проектах длиной 3-6 месяцев.
-
Фирмы, работающие на Министерство обороны и подобные структуры
Секретность, используется относительно узкий набор технологий — которые сертифицированы в ФСБ. Например, Java 1.6 и Tomcat сертифицированы, а EJB-контейнеры не сертифицированы, вместо них может использоваться самописная недо-пародия. Что хорошего в самописных недо-пародиях — разработчик, что называется, “под боком” и доступен для общения, что плохого — какая-то мелкая функция, которая есть, но её пока (почти год) не использовали, но которая внезапно понадобилась тебе, — может просто тупо не работать (но можно заставить разработчика быстро починить).
Читать полностью »
Java-программист в Петербурге. Обзор рынка труда с точки зрения соискателя. Часть 1/3
2013-12-20 в 14:48, admin, рубрики: human resources, java, job, метки: human resources, java, jobДавно зрела мысль описать что-нибудь из своего трудового опыта. Постепенно она развилась до идеи написать обзор рынка труда, как его видит работник и соискатель (точнее, автор в качестве работника и соискателя;-)). Изложение получилось несколько субъективное и не претендующее на полноту и “ортонормированность”, за что автор заранее просит его простить. Cделано оно на основе опыта, в основном опыта автора и его знакомых. Уклон как-то сам собой получился в сторону описания возможных неприятных неожиданностей. Статья состоит из трёх частей — “Какие бывают 'плюшки'”, “Подводные камни для новичка” и “Какие бывают работодатели”. Наиболее объёмна и подробна центральная часть — в ней, по мнению автора, собраны моменты, наиболее стоящие внимания. Первая и третья части тоже в значительной степени написаны с точки зрения “подводных камней”.
Под конец было решено разбить получившуюся статью в 35000+ знаков на три поста. В этом посте содержится первая часть.
Читать полностью »
Java-программист в Петербурге. Обзор рынка труда с точки зрения соискателя. Часть 2/3. Подводные камни для «новичка»
2013-12-20 в 14:47, admin, рубрики: human resources, java, job, метки: human resources, java, job Часть 1/3. Какие бывают 'плюшки'.
Часть 3/3. Какие бывают работодатели. Характерные особенности.
Подводные камни для новичка
Первые подводные камни, вообще-то, могут начаться ещё на собеседовании — например, проект новый, процесс интервьюирования ещё не налажен, первый вопрос может быть “Do you have a printed copy of your CV?” от иностранного представителя, в общем, на вас в качестве одного из подопытных кроликов этот процесс и будут отлаживать. Ещё вас могут внезапно поставить на “конвейер”: пропустить через три стадии собеседования по часу с лишним каждая сразу. Проблемы это может породить, если вы не подготовились к собеседованию или если у вас на это день назначены ещё другие собеседования. Но это так, к слову.
Общие соображения
Во-первых, есть некоторая естественная склонность при возникновении непоняток (что там было про управленческие и коммуникативные навыки?), трений и, тем более, конфликтов с участием новичка истолковывать их не в его пользу. Даже если новичок прав, то всё равно есть причины чтоб его уволить: ‘менеджер не может с ним сработаться’, чел ‘не вписывается в неформальный корпоративный формат’ или ещё что-то в этом роде. Если “не сработаются” и со следующим, то через пару-тройку кандидатов с кем-нибудь сработаются или задумаются, а может быть «что-то в консерватории поправить». В общем, если вы кому-то из начальства (или “старожилов” из тех, к мнению которым прислушиваются) внезапно (т.е. это не всплыло на собеседовании) чем-то “не понравились” (ну, например, чем-то ему напоминаете неприятную ему персону, что вызывает у него постоянное желание подколоть или уязвить вас или продемонстрировать своё остроумие вместо чёткого и ясного выражения того, что от вас требуется), то, как последний довод, кого проще уволить — новичка на испытательном сроке, которому надо заплатить за три дня, или полноправного работника, которому надо при прекращении трудового договора не по его инициативе заплатить за два-три месяца и с которым уже как-то сработались (хотя ещё и вопрос — захотите ли сами работать с таким человеком?)? И если они за пару-тройку итераций всё же найдут кого хотят, то спишут случай с вами на “мало ли что бывает”. “Вершить (социальную) справедливость — не наш профиль, нас дела ждут”.
Читать полностью »
Как считают звёзды?
2013-12-18 в 11:13, admin, рубрики: intersystems, intersystems cache, java, persistence, Блог компании InterSystems, высокая производительность, метки: cache, InterSystems, InterSystems cache, java, persistenceХочется поблагодарить 0leo, morisson и adaptun за помощь в подготовке статьи.
Инструменты звездочётов
Многие уже читали статью о миссии Gaia, до запуска которой осталось меньше суток, однако мало кто знает, какую технологию разработчики Европейского Космического Агентства выбрали для обработки и хранения данных Gaia. В 2011 году в качестве кандидатов рассматривались IBM DB2, PostgreSQL, Hadoop, Cassandra и Caché (точнее – технология Caché eXtreme Event Persistence; см., напр., "Astrostatistics and Data Mining" п/ред. Луиса Мануэля Сарро (Luis Manuel Sarro), Лорана Эйе (Laurent Eyer) и Уильяма О'Маллейна (William O'Mullane), c. 111-112).
Читать полностью »
Taskurotta или управление процессами в распределенной системе
2013-12-16 в 13:49, admin, рубрики: Amazon Web Services, Hazelcast, java, Программирование, метки: hazelcastДобрый день, читатель!
Есть у нас задача связывать различные сервисы и существующие системы в управляемые процессы. Скорость нужна не космическая (т.е. не по биржевым котировкам отклик создавать), но зато процессов много и компонент (систем) которые нужно использовать тоже порядочно вырисовывается. Не хочется делать p2p связывание. Хочется чего-то красивого и управляемого.
Просмотрев рынок, было принято решение сделать реплику по мотивам Amazon Simple Workflow, так как использовать его напрямую мы не можем. Свойства фреймворка которые нам подходят:
Читать полностью »
Майнинг и как он работает: матчасть
2013-12-12 в 7:53, admin, рубрики: bitcoin, howto, java, mining, Алгоритмы, криптография, метки: bitcoin, howto, java, mining
Привет, %username%!
Я расскажу и покажу как работает основа генерации денег в криптовалютах — майнинг. Как создается первый блок, новые блоки и как появляются деньги из ниоткуда.
Чтобы было проще понять, мы напишем свой импровизированный майнер для импровизированной криптовалюты HabraCoin.
Читать полностью »
Пишем плагин для Maven
2013-12-10 в 12:40, admin, рубрики: development, java, maven, maven 3, plugins, плагины, Программирование, метки: development, java, maven, maven 3, plugins, плагины, ПрограммированиеЕсть у меня на некоторых maven-проектах профиль, с помощью которого производится копирование shared-библиотек с последующим перезапуском сервера Tomcat.
<profile>
<id>deploy-deps</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<useSubDirectoryPerScope>true</useSubDirectoryPerScope>
<excludeGroupIds>исключаем некоторые группы, попадающие в war-архив</excludeGroupIds>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>05-stop-tomcat</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-ssh</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>${putty.key}</argument>
<argument>${ssh.user}@${ssh.host}</argument>
<argument>${tomcat.dir.root}/bin/shutdown.sh</argument>
</arguments>
<executable>plink</executable>
</configuration>
</execution>
<execution>
<id>10-clean-shared-jars</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-ssh</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>${putty.key}</argument>
<argument>${ssh.user}@${ssh.host}</argument>
<argument>rm</argument>
<argument>-Rf</argument>
<argument>${tomcat.dir.shared}/*.jar</argument>
</arguments>
<executable>plink</executable>
</configuration>
</execution>
<execution>
<id>15-upload-shared-jars</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-scp</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>${putty.key}</argument>
<argument>${project.build.directory}/dependency/compile/*.jar</argument>
<argument>${ssh.user}@${ssh.host}:${tomcat.lib.shared}/</argument>
</arguments>
<executable>pscp</executable>
</configuration>
</execution>
<execution>
<id>20-start-tomcat</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-ssh</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>"${putty.key}"</argument>
<argument>${ssh.user}@${ssh.host}</argument>
<argument>bin/startup.sh</argument>
</arguments>
<executable>plink</executable>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
- Для всего статичного контента используется некий каталог за пределами webapps. В этот каталог «смотрит» Nginx и отдаёт по web-пути "/static/*"
- Все shared java-библиотеки (редко изменяемые) грузятся в каталог ${catalina.home}/shared, и в Tomcat в файле conf/catalina.properties настроена для этого переменная «shared.loader»
- Для каждого инстанса Tomcat создан свой системный пользователь
- Для доступа по SSH используются ключи и у каждого разработчика он свой
Соответственно, загрузка статичного контента и shared-библиотек это отдельные профили. Всё остальное собирается в war-архив и устанавливается через стандартный web-manager Tomcat-а.
А чтобы не плодить конфигураций, используется PAgent, в который уже и добавленые нужные нам private keys. Они же используются для подключения через Putty
Лежит себе профиль в pom.xml, не кусается вроде бы, даже пашет потихоньку на благо программера, но вот только есть в нём пара «минусов» — занимает много места при развёрнутом pom.xml да ещё и в новые проекты приходится вставлять.
И если от второго минуса можно избавиться написав шаблон в любимая_IDE или свой архетип наваять, то от первого минуса не так-то просто избавить.
Точно ли не так просто? может «обернём» этот профиль в виде плагина для Maven? Сказано, сделано.
Читать полностью »
MacroGroovy — работа с AST на Groovy ещё никогда не была такой простой
2013-12-06 в 10:58, admin, рубрики: AST, dsl, groovy, java, macro, метки: AST, dsl, groovy, java, macro
Последнее время часто приходится работать с такой мощной возможностью Groovy как Compile-time AST Transformations.
Так как я не люблю излишнюю динамику, то бОльшая часть проверок DSL на валидность у нас происходит на этапе компиляции, а так же мы используем очень много генерации кода. Поэтому каждый день приходится сталкиваться с составлением ASTNode-ов вручную.
def someVariable = new ConstantExpression("someValue");
def returnStatement = new ReturnStatement(
new ConstructorCallExpression(
ClassHelper.make(SomeCoolClass),
new ArgumentListExpression(someVariable)
)
);
До боли знакомые конструкции, не правда ли? Хотите, чтобы было вот так?
def someVariable = macro { "someValue" }
def returnStatement = macro { return new SomeCoolClass($v{ someVariable }) }
Или даже так?
def constructorCall = macro { new SomeCoolClass($v{ macro { "someValue" } }) }
В данной статье речь пойдёт о моём решении этой проблемы, максимально близком к родному решению Groovy — github.com/bsideup/MacroGroovy