пʼятниця, 16 вересня 2011 р.

Avoid SSLException with all-trusting TrustManager

Anyone who stumbled upon SSL in their day-to-day Java joy, know that by default Java is very picky about certificates on the other end. Whether you want to submit a HTTP request to the site with expired certificate (yes, people change them, and they may forget to do that) or happen to work against an endpoint with self-signed certificate (not everyone are ready to blindly give hundreds of bucks for those expensive bits), you'll be kindly refused (if SSLException can be described as kind)

In such cases you should find some way around the issue to make things work.Whenever its about the remote service, I preferred to maintain a separate truststore for the project, but having a headache of keystores during development is a motivation killer.

Here is how you can avoid JVM to check peer certificates for validity. The below code will accept any SSL certificate presented, this means - no security unless you know what you're doing. Generally this property switch will be of great use at development time or debugging time.

import java.security.cert.X509Certificate;

// ...

if ("true".equalsIgnoreCase(System.getProperty("trust.ignore", "true"))) {
	TrustManager[] trustAllCerts = new TrustManager[]{
		new X509TrustManager() {
			public X509Certificate[] getAcceptedIssuers() {
				return null;
			}
			public void checkClientTrusted(
				X509Certificate[] certs, String authType) {
			}
			public void checkServerTrusted(
				X509Certificate[] certs, String authType) {
			}
			public boolean isClientTrusted( X509Certificate[] cert) {
				return true;
			}
			public boolean isServerTrusted( X509Certificate[] cert) {
				return true;
			}
		}
	};

	// Install the all-trusting trust manager
	try {
		SSLContext sc = SSLContext.getInstance("SSL");
		sc.init(null, trustAllCerts, new java.security.SecureRandom());
		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
	} catch (Exception e) {
	}
}

пʼятниця, 9 вересня 2011 р.

java.util.concurrent Tech Talk

Я тут подписался на Tech Talk о java.util.concurrent с целью нести свет в массы. Тема довольно интересна мне и довольно давно, но играть в КО не хочется и тратить время на то, что всем известно, когда можно с гораздо большим удовольствием есть пиво - тоже. Поэтому я добросовестно подготовил предварительный список тезисов для освещения. Комментарии и предложения - приветствуются.

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

Не буду сильно останавливаться базовых штуках - думаю все в курсе, а в деталях про мониторы вообще и что оно такое могу рассказать.

Про примеры - они еще в процессе, точно будет пример, который можно развивать по мере доклада, но лайв-кодить я не буду, постараюсь выложить код где-нибуть

Итак агенда:

0. Интро
Введение в многопоточность - зачем, почему, когда и как - в общем короткое вступление, без которого никак
Кратко о базовых конструкциях языка для поддержки многопоточности - о Thread, Runnable, мониторах, synchronized-блоках. Тут же пример кода. Пару слов о Vector, Hashtable и synchronized-коллекциях
Мотивация к старту JSR166, картинки с мордами Дага Ли, Брайана Гетца, Дийкстры, Хоара и Бринч-Хансена

1. Подходы
Блокирующая и неблокирующая многопоточность - в чем разница

1.1. Блокирующая многопоточность
ReentrantLock vs native Java locks
Lock & Condition, тут же упомянем TimeUnit и как в ХХI веке спят потоки
Semaphore

1.2. Неблокирующая многпоточность
Atomic типы и как они устроены, CAS, пример кода
Атомарные операции на сложных shared state, про разные AtomicReference, пример кода
Краткое сравнение подходов

2. Распределение работы

Executor, ExecutorService, Сallable, Thread-пулы
Fork/Join framework (привет семерочка)
пример кода

3. Конкуррентные типы данных в JSR166

Опять слегка вспомним про Atomic типы
CopyOnWriteArrayList, ConcurrentHashMap, ConcurrentSkipListMap, ConcurrentSkipListSet, CopyOnWriteArraySet
перформанс Vector, Hashtable vs sync collections vs CopyOnWriteArrayList, ConcurrentHashMap - где то в закладках были графики
Немного об итераторах
Генерация случайных чисел, ThreadLocalRandom

4. Очереди
blocking queues and deques

5. Синхронизация потоков
CountDownLatch, CyclicBarrier, Exchanger

6. Что еще есть в мире Java кроме JSR166 - вот это не обещаю что успею, но если очень будет интересно, постараюсь
Disruptor http://code.google.com/p/disruptor/
NonBlockingConcurrentHashMap, http://sourceforge.net/projects/high-scale-lib

7. Чего ждать в Java 8 - тоже по заявкам
jsr166e: http://dhruba.name/2011/08/28/jsr166e-upcoming-java-util-concurrent-apis-for-java-8/

8. Q&A не планирую - все вопросы по ходу дела, в заключение забросаю книгами и ссылками.