Перегляд за місяцем: September 2010
Странный Java баг в Coldfusion8 под Linux
Ситуация - сервер CentOS 5.5, Coldfusion 8.0.1 и MySQL 5. При записи в БД в некоторых местах проекта вылетала ошибка
java.lang.NumberFormatException
For input string: " 4000 "
При этом никакого числа 4000 в запросе и близко не было. На Windows-сервере ошибка не воспроизводится.
Гугление не привело ни к чему. Но решилось таким образом. Coldfusion 8.0.1 под Windows использует mysql-connector версии 5.0.5. При этом Linux-версия использует 5.0.3. После обновления коннектора на Linux-сервере проблема решилась.
Тимчасовий обхід обмеження довжини varchar
В одному з моїх поточних проектів у процесі розробки процесу імпорту великих об’ємів даних виникла задача ефективно (швидко) обійти обмеження довжини varchar полів у базі даних. Фактично, ми готові були пожертвувати частиною даних задля збереження швидкості роботи.
Річ у тім, що MySQL за умовчанням не дозволяє запхати в поле varchar рядок довший за наперед визначену розмірність.
Але це можна обійти скинувши налаштування @@sql_mode.
В якості демонстрації принципу наведу шмат коду, коментарі мають все пояснити.
<!---
CREATE TABLE IF NOT EXISTS contacts (
contactId int(10) unsigned NOT NULL AUTO_INCREMENT,
salutation varchar(5) DEFAULT NULL,
firstname varchar(255) DEFAULT NULL,
PRIMARY KEY (contactId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--->
<cfset local = {} />
<cfset local.value = "Doctor" />
<!--- save the current SQL mode --->
<cfquery datasource="my_test_dsn" name="local.getSqlMode">
select @@sql_mode as sqlmode
</cfquery>
<!--- reset the SQL mode --->
<cfquery datasource="my_test_dsn" result="local.resetSqlMode">
set sql_mode = ''
</cfquery>
<!--- this should work fine --->
<cfquery datasource="my_test_dsn" result="local.pushContact">
INSERT INTO contacts (salutation, firstname) VALUES ('#local.value#', '#local.value#')
</cfquery>
<!--- restore the SQL mode --->
<cfquery datasource="my_test_dsn" result="local.revertSqlMode">
set sql_mode = '#local.getSqlMode.sqlmode#'
</cfquery>
<!--- this should fail --->
<cfquery datasource="my_test_dsn" result="local.pushContact">
INSERT INTO contacts (salutation, firstname) VALUES ('#local.value#', '#local.value#')
</cfquery>
<cfdump var="#local#">
Нові розділи сайту: робота і компанії
Сьогодні ми трішки розширили можливості сайту, додавши два розділи:
- Робота - тут можна буде знайти чи розмістити оголошення про роботу для CF-програмістів.
- Компанії - тут можна буде знайти інформацію про українські компанії, що займаються розробкою з використанням ColdFusion.
Запрошуємо долучитися з наповненням, якщо вас щось зацікавило.
Ну й опис сайту англійською не завадить.
Також в нас накопичилося чимало цікавих матеріялів, чекайте багато оновлень цього місяця.
Семантическая верстка
Не совсем про Coldfusion, но на смежную тему, хочу представить небольшой обзор семантической верстки. Так или иначе, но конечным продуктом обработки Coldfusion-шаблонов или PHP-скриптов становится щедро приправленный CSS-ом HTML-код. Полезно будет знать как сделать этот винегрет правильно.
Читати далі...
Самопідписаний SSL сертифікат в Railo
Нещодавно зіткнувся з доволі відомою проблемою для CFML-розробників: CFHTTP відмовляється працювати з HTTPS-сайтом якщо сертифікат є само-підписаним, або не засвідченим авторизованим центром. Більше того, у мене сертифікат був у порядку, оглядачі чудово його сприймали, але не Railo.
Стандартним рішенням є додавання відкритої частини сертифікату до сховища ключів (keystore) JVM, котру використовує ColdFusion/Railo.
Але ця процедура може виявитися доволі хитрою, коли мова йде про Railo.
Спочатку я спробував піти "правильним" шляхом, та скористатися вбудованими функціями якраз для цього діла:
SSLCertificateList("hostname") чудово показала мені список сертифікатів (а він там був один) потрібного сайту.
SSLCertificateInstall("hostname") без жодних претензій його встановила.
Але ж дулі! Все одно продовжив бачити помилку sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Тоді я взявся за консоль. Спочатку я перевірив чи спрацювали функції:
$ cd ~/webapps/xxxxx/WEB-INF/railo/security/
$ keytool -list -keystore cacerts
Потрібний сертифікат був у списку. Підказка: за умовчанням пароль для keytool є "changeit" (без лапок, звісно).
Про всяк випадок я спробував перевстановити його вручну. Для цього експортував .crt файл сертифікату сайту за допомогою оглядача (Firefox, в моєму випадку) та замінив запис:
$ keytool -delete -alias myalias -keystore cacerts
$ keytool -import -alias myalias -keystore cacerts -file /home/zzz/xxxxx.crt
$ keytool -list -keystore cacerts
Після цього перезапустив Railo та... не отримав нічого.
Наступна спроба зареєструвати сертифікат аналогічним способом була пов’язана з JVM, для Ubuntu та JVM від Sun шлях до них виглядає десь так:
/usr/lib/jvm/java-6-sun/jre/lib/security/
Вона теж виявилася невдалою, хоча для Adobe ColdFusion цей спосіб зазвичай працює.
Насамкінець я згадав, що Railo має ще кореневий контекст, в моєму випадку це тека
/opt/railo/webapps/ROOT/WEB-INF/railo/security/
Повторивши імпорт ще тут та перезапустивши Railo все запрацювало!