Перегляд за місяцем: 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-сервере проблема решилась.

Автор: Родион Быков | Опубліковано: 21.09.2010 о 19:18 | Категорії: Bugs -

 

Тимчасовий обхід обмеження довжини 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#">

Автор: Сергій Галашин | Опубліковано: 14.09.2010 о 15:51 | Категорії: MySQL - Gotchas -

 

Нові розділи сайту: робота і компанії

Сьогодні ми трішки розширили можливості сайту, додавши два розділи:

  • Робота - тут можна буде знайти чи розмістити оголошення про роботу для CF-програмістів.
  • Компанії - тут можна буде знайти інформацію про українські компанії, що займаються розробкою з використанням ColdFusion.

Запрошуємо долучитися з наповненням, якщо вас щось зацікавило.

Ну й опис сайту англійською не завадить.

Також в нас накопичилося чимало цікавих матеріялів, чекайте багато оновлень цього місяця.

Автор: Сергій Галашин | Опубліковано: 12.09.2010 о 14:43 | Категорії: CFUG - Companies - Jobs -

 

Семантическая верстка

Не совсем про Coldfusion, но на смежную тему, хочу представить небольшой обзор семантической верстки. Так или иначе, но конечным продуктом обработки Coldfusion-шаблонов или PHP-скриптов становится щедро приправленный CSS-ом HTML-код. Полезно будет знать как сделать этот винегрет правильно.


Читати далі...
Автор: Родион Быков | Опубліковано: 08.09.2010 о 15:07 | Категорії: 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 все запрацювало!

 

Автор: Сергій Галашин | Опубліковано: 01.09.2010 о 22:21 | Категорії: Gotchas - Java - Railo - Security -