<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Техно-логи &#187; Development</title>
	<atom:link href="http://www.kurdyukov.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kurdyukov.com</link>
	<description>Заметки о разработке и прочей жизни</description>
	<lastBuildDate>Sat, 04 Feb 2012 01:34:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Автоматическая реализация INotifyPropertyChanged на Spring.NET</title>
		<link>http://www.kurdyukov.com/2012/02/04/spring-inotifypropertychanged/</link>
		<comments>http://www.kurdyukov.com/2012/02/04/spring-inotifypropertychanged/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 01:34:55 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Spring.NET]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=188</guid>
		<description><![CDATA[В статье ранее я писал как сделать автоматическую реализацию INotifyPropertyChanged на основе расширений библиотеки NInject. К сожалению, моя жизнь с этой библиотекой не сложилась, NInject был заменен на Spring.NET. При этом схему автореализации надо было как-то перенести без особенных изменений прикладного кода. Объясню, что именно я сделал. Для начала нам нужен интерфейс, который будет реализовываться [...]]]></description>
			<content:encoded><![CDATA[<p>В статье <a href="http://www.kurdyukov.com/2012/01/31/aop-inotifypropertychanged/" title="Простая реализация INotifyPropertyChanged" target="_blank">ранее</a> я писал как сделать автоматическую реализацию INotifyPropertyChanged на основе расширений библиотеки NInject. К сожалению, моя жизнь с этой библиотекой не сложилась, NInject был заменен на Spring.NET. При этом схему автореализации надо было как-то перенести без особенных изменений прикладного кода. Объясню, что именно я сделал.</p>
<p><span id="more-188"></span><br />
Для начала нам нужен интерфейс, который будет реализовываться всеми потенциальными автонотифицируемыми классами:</p>
<pre class="brush: csharp; title: ; notranslate">
    public interface IAutoNotifyPropertyChanged : INotifyPropertyChanged
    {
        void OnPropertyChanged(string propertyName);
    }
</pre>
<p>Удобства ради можно использовать базовый класс для всех авто-реализаций:</p>
<pre class="brush: csharp; title: ; notranslate">
    public class ViewModelBase : IAutoNotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
</pre>
<p>Кроме этого, нам понадобятся атрибуты, которыми мы будет включать/отключать авто-нотификацию:</p>
<pre class="brush: csharp; title: ; notranslate">
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public class NotifyOfChangesAttribute : Attribute
    {
    }
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class DoNotNotifyOfChangesAttribute : Attribute
    {
    }
</pre>
<p>Теперь пришла очередь Pointcut, которые будет определять setter-ы целевых свойств:</p>
<pre class="brush: csharp; title: ; notranslate">
    public class AutoNotifyPointcut : StaticMethodMatcherPointcut
    {
        public override bool Matches(MethodInfo method, Type targetType)
        {
            if (!typeof(IAutoNotifyPropertyChanged).IsAssignableFrom(targetType))
                return false;

            // non-setters ignored
            if (!method.Name.StartsWith(&quot;set_&quot;))
                return false;

            object[] attributes = targetType.GetCustomAttributes(typeof(NotifyOfChangesAttribute), true);
            if (attributes.Length &gt; 0)
            {
                object[] disables = method.GetCustomAttributes(typeof (DoNotNotifyOfChangesAttribute), true);
                if (disables.Length &gt; 0)
                    return false;

                return true;
            }

            attributes = method.GetCustomAttributes(typeof (NotifyOfChangesAttribute), true);
            return attributes.Length &gt; 0;
        }
    }
</pre>
<p>Затем нам нужен advice, в котором и будет происходить вся работа:</p>
<pre class="brush: csharp; title: ; notranslate">
    public class AfterPropertySetAdvice : IMethodInterceptor
    {
        private static readonly Logger logger = LogManager.GetCurrentClassLogger();

        public object Invoke(IMethodInvocation invocation)
        {
            object proxy = invocation.Proxy;
            string name = null;

            IAutoNotifyPropertyChanged model = proxy as IAutoNotifyPropertyChanged;
            if (model == null)
            {
                logger.Error(&quot;Advice is called on non-IAutoNotifyPropertyChanged class&quot;);
            }
            else
            {
                name = invocation.Method.Name;
                if (!name.StartsWith(&quot;set_&quot;))
                {
                    logger.Error(&quot;Cannot notify on non-setter&quot;);
                }
                name = name.Substring(4);
            }

            object rval = invocation.Proceed();

            if (name != null)
            {
                model.OnPropertyChanged(name);
            }

            return rval;
        }
    }
</pre>
<p>Тут для вящего удобсва отладки используется NLog. Его использование можно вовсе удалить.</p>
<p>Так, классы созданы, надо как-то их применить к объектам. Сразу скажу, что из-за особенностей Spring AOP для оборачивания класса в advice надо, чтобы экземпляр класса создавался Spring-ом. Код подключения выглядит примерно так:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;objects xmlns=&quot;http://www.springframework.net&quot;&gt;
  &lt;object id=&quot;notifyOnChangePointcut&quot; type=&quot;CommonControls.AutoNotify.AutoNotifyPointcut, CommonControls&quot;/&gt;
  &lt;object id=&quot;afterPropertySetAdvice&quot; type=&quot;CommonControls.AutoNotify.AfterPropertySetAdvice, CommonControls&quot;/&gt;

  &lt;object id=&quot;notifyInterceptor&quot; type=&quot;Spring.Aop.Support.DefaultPointcutAdvisor, Spring.Aop&quot;&gt;
    &lt;property name=&quot;Pointcut&quot; ref=&quot;notifyOnChangePointcut&quot;/&gt;
    &lt;property name=&quot;Advice&quot; ref=&quot;afterPropertySetAdvice&quot;/&gt;
  &lt;/object&gt;

  &lt;object type=&quot;Spring.Aop.Framework.AutoProxy.InheritanceBasedAopConfigurer, Spring.Aop&quot;&gt;
    &lt;property name=&quot;ProxyDeclaredMembersOnly&quot; value=&quot;false&quot;/&gt;
    &lt;property name=&quot;ObjectNames&quot;&gt;
      &lt;list&gt;
        &lt;value&gt;*Model&lt;/value&gt;
      &lt;/list&gt;
    &lt;/property&gt;
    &lt;property name=&quot;InterceptorNames&quot;&gt;
      &lt;list&gt;
        &lt;value&gt;notifyInterceptor&lt;/value&gt;
      &lt;/list&gt;
    &lt;/property&gt;
  &lt;/object&gt;
&lt;/objects&gt;
</pre>
<p>Можно заметить, что оборачиванию будут подвергнуты объекты, id которых заканчивается на &laquo;Model&raquo;. Анонимные объекты будет проигнорированы.</p>
<p>Кажется, что ограничение по имени какое-то странное. Также кажется, что использование InheritanceBasedAopConfigurer выглядит странно в контексте наличия тега aop:config в Spring.NET. Поясню, почему именно так.</p>
<p>В рамках Spring.NET существует 3 способо создания proxy объектов для вызова advice:</p>
<ol>
<li>Aggregation based &#8211; для объекта-обертки генерируется DynamicProxy со своим интерфейсом. Такой объект нельзя привести к оригинальному типу target объекта. Реальный объект в этом случае будет аггрегирован внутри proxy. Нам не подходит из-за несовместимого интерфейса.</li>
<li>Inheritance based &#8211; объект-прокси будет наследником класса target объекта, при этом обернуты будут только virtual методы и свойства оригинала. Оригинальный объект будет аггрегирован внутри proxy. В нашем случае это дает интересный спец-эффект: поскольку события тоже проксируются, то добавление обработчика события на объект-обертку не влияет на оригинальный объект. Значит, если внутри advice вызвать событие, то вызов будет превращен в вызов объекта-оригинала, а не обертки. А на внутреннем объекте обработчиков как небыло так и нет. Значит, тоже не подходит</li>
<li>InheritanceBasedAopConfigurer &#8211; новый способ генерации вызовов, добавленный в Spring 1.2. Идея состоит в изменении кода оригинального объекта. Вот это нам подходит, но дает указанные выше ограничения на создание объектов</li>
</ol>
<p>Пример создания объекта:</p>
<pre class="brush: xml; title: ; notranslate">
  &lt;object id=&quot;mainModel&quot; type=&quot;DataServer.ViewModel.RetranslatingDataServerManagerModel, DataServer&quot;/&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2012/02/04/spring-inotifypropertychanged/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Неопределенное будущее Titanium Desktop</title>
		<link>http://www.kurdyukov.com/2012/02/01/titanium-desktop-future/</link>
		<comments>http://www.kurdyukov.com/2012/02/01/titanium-desktop-future/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 01:42:39 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Titanium]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=180</guid>
		<description><![CDATA[Около полугода я следил на развитием проекта Titanium Desktop. Идея продукта состоит в том, что можно создавать полноценные desktop приложения на HTML+JS. Я подумывал использовать этот фреймворк в одном из своих проектов. Но сегодня, проверяя новости, обнаружил нерадостное &#8211; проект снимают с финансирования AppCelerator и передают сообществу разработчиков. Официальный пресс-релиз можно прочитать здесь. Все это [...]]]></description>
			<content:encoded><![CDATA[<p>Около полугода я следил на развитием проекта <a href="http://www.appcelerator.com/products/titanium-desktop-application-development/" title="http://www.appcelerator.com/products/titanium-desktop-application-development/" target="_blank">Titanium Desktop</a>. Идея продукта состоит в том, что можно создавать полноценные desktop приложения на HTML+JS. Я подумывал использовать этот фреймворк в одном из своих проектов. Но сегодня, проверяя новости, обнаружил нерадостное &#8211; проект снимают с финансирования AppCelerator и передают сообществу разработчиков. Официальный пресс-релиз можно прочитать <a href="http://developer.appcelerator.com/blog/2012/01/the-future-of-titanium-desktop.html" title="http://developer.appcelerator.com/blog/2012/01/the-future-of-titanium-desktop.html" target="_blank">здесь</a>.</p>
<p>Все это означает, что проект может приостановиться на неопределенный срок. А значит надо будет взвесить все &laquo;за&raquo; и &laquo;против&raquo; прежде чем использовать.</p>
<p>В качестве альтернативы предлагается <a href="http://code.google.com/p/chromiumembedded/" title="http://code.google.com/p/chromiumembedded/" target="_blank">chromiumembedded</a>, который тоже находится в непонятном состоянии. По этому проекту даже с документацией есть проблемы, вся поддержка &#8211; через полуживой форум.</p>
<p>Таким образом, многоплатформенных технологий для создания desktop приложений на HTML+JS в доступности не видно. Разве что Adobe AIR, но он пугает чем, что Adobe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2012/02/01/titanium-desktop-future/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Простая реализация INotifyPropertyChanged</title>
		<link>http://www.kurdyukov.com/2012/01/31/aop-inotifypropertychanged/</link>
		<comments>http://www.kurdyukov.com/2012/01/31/aop-inotifypropertychanged/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 01:10:34 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[INotifyPropertyChanged]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=168</guid>
		<description><![CDATA[При разработке для платформы .NET часто приходится делать так раздражающие всех реализации интерфейса INotifyPropertyChanged на классах-моделях. Типичный пример выглядит так: На мой взгляд, с этим кодом есть 2 проблемы: Очень много повторений и кода вызванного необходимостью вызвать NotifyPropertyChanged. Увеличивается количество &#171;тупой&#187; работы. Использование строковой константы Name в качестве аргумента. Рефакторинг может привести к разрушению биндинга [...]]]></description>
			<content:encoded><![CDATA[<p>При разработке для платформы .NET часто приходится делать так раздражающие всех реализации интерфейса <code>INotifyPropertyChanged</code> на классах-моделях. Типичный пример выглядит так:</p>
<pre class="brush: csharp; title: ; notranslate">
class StatisticsRecord: INotifyPropertyChanged
{
    private string name;
    public string Name { get { return name; } set { name = value; NotifyPropertyChanged(&quot;Name&quot;); } }	

    private void NotifyPropertyChanged(string name)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
</pre>
<p>На мой взгляд, с этим кодом есть 2 проблемы:</p>
<ol>
<li>Очень много повторений и кода вызванного необходимостью вызвать <code> NotifyPropertyChanged</code>. Увеличивается количество &laquo;тупой&raquo; работы.</li>
<li>Использование строковой константы Name в качестве аргумента. Рефакторинг может привести к разрушению биндинга к такому свойству.</li>
</ol>
<p><span id="more-168"></span><br />
По счастью разработчики симпатичного фреймворка <a href="http://http://ninject.org/" title="http://ninject.org/" target="_blank">NInject</a> сделали расширение <a href="https://github.com/ninject/ninject.extensions.interception" title="https://github.com/ninject/ninject.extensions.interception" target="_blank">Ninject.Extensions.Interception</a>, которое позволяет решить описанные выше проблемы за счет использования динамического AOP. Используется это так:</p>
<ol>
<li>Подключаем к проекту библиотеки NInject, Ninject.Extensions.Interception, Castle.Core, Ninject.Extensions.Interception.DynamicProxy</li>
<li>Создаем класс-реализацию интерфейса IAutoNotifyPropertyChanged, например так:
<pre class="brush: csharp; title: ; notranslate">
public class ViewModelBase : IAutoNotifyPropertyChanged
{
     public event PropertyChangedEventHandler PropertyChanged;

     public void OnPropertyChanged(string propertyName)
     {
         PropertyChangedEventHandler handler = PropertyChanged;
         if (handler != null)
         {
             handler(this, new PropertyChangedEventArgs(propertyName));
         }
     }
}
</pre>
</li>
<li>Используем этот класс в нашем классе модели. Например:
<pre class="brush: csharp; title: ; notranslate">
[NotifyOfChanges]
class StatisticsRecord: INotifyPropertyChanged
{
    public virtual string Name { get; set; }

    [DoNotNotifyOfChanges]
    public virtual string NonNotifyableProperty { get; set; }
}
</pre>
<blockquote><p><strong>NB!</strong> Важно, чтобы getter-ы и setter-ы были виртуальными, поскольку мы используем DynamicProxy для добавления нотификаций
</p></blockquote>
</li>
<li>Подключаем &laquo;перехватчик&raquo; при конфигурации ядра NInject:
<pre class="brush: csharp; title: ; notranslate">
...
kernel.Components.Add&lt;IPlanningStrategy, AutoNotifyInterceptorRegistrationStrategy&gt;();
...
</pre>
</li>
<p>Код стал короче и понятнее напорядок.</p>
<p>PS. Детали того, как именно это все устроено смотрите тут: <a href="http://innovatian.com/2010/01/ninject-extensions-interception-and-iautonotifypropertychanged-ianpc/" title="http://innovatian.com/2010/01/ninject-extensions-interception-and-iautonotifypropertychanged-ianpc/" target="_blank"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2012/01/31/aop-inotifypropertychanged/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>System.BadImageFormatException при загрузке тестов в ReSharper</title>
		<link>http://www.kurdyukov.com/2012/01/24/system-badimageformatexception-tests-resharper/</link>
		<comments>http://www.kurdyukov.com/2012/01/24/system-badimageformatexception-tests-resharper/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 22:31:01 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ReSharper]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=161</guid>
		<description><![CDATA[В начале создания авто-тестов в одном проекте на C# начал возникать System.BadImageFormatException при попытке запуска тестов из ReSharper. Выяснение показало, что проблема была в том, что сборка с тестами имела Any CPU. А тестируемые классы были в EXE, который был собран в x86. При этом Windows используется 64х битный, следовательно Any CPU = x64. Решение [...]]]></description>
			<content:encoded><![CDATA[<p>В начале создания авто-тестов в одном проекте на C# начал возникать System.BadImageFormatException при попытке запуска тестов из ReSharper. Выяснение показало, что проблема была в том, что сборка с тестами имела Any CPU. А тестируемые классы были в EXE, который был собран в x86. При этом Windows используется 64х битный, следовательно Any CPU = x64.</p>
<p>Решение просто &#8211; указать в тестовой сборке целевую платформу x86. Это делается в закладке Build свойств проекта тестовой сборки.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2012/01/24/system-badimageformatexception-tests-resharper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Названия обработчиков событий в VS2010</title>
		<link>http://www.kurdyukov.com/2012/01/09/vs2010-handy/</link>
		<comments>http://www.kurdyukov.com/2012/01/09/vs2010-handy/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 15:05:36 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=152</guid>
		<description><![CDATA[После установки ReSharper на Visual Studio 2010 (всем разработчикам на C# рекоммендую, кста) наиболее активно разражает подсвечивание названий методов, который автоматически генерируются Visual Designer для обработки событий, поскольку название типа &#171;Form1_Load&#187; никак не соответствует идеям начинать название с глагола и не использовать &#171;_&#187;. Но это можно исправить. Есть 2 способа исправления проблемы. 1. Изменить способ [...]]]></description>
			<content:encoded><![CDATA[<p>После установки ReSharper на Visual Studio 2010 (всем разработчикам на C# рекоммендую, кста) наиболее активно разражает подсвечивание названий методов, который автоматически генерируются Visual Designer для обработки событий, поскольку название типа &laquo;Form1_Load&raquo; никак не соответствует идеям начинать название с глагола и не использовать &laquo;_&raquo;. Но это можно исправить.<br />
<span id="more-152"></span><br />
Есть 2 способа исправления проблемы.</p>
<p><strong>1. Изменить способ генерации названий методов</strong><br />
<em>Предпочтительный</em><br />
<a href="http://www.kurdyukov.com/wp-content/uploads/2012/01/screenshot.png"><img src="http://www.kurdyukov.com/wp-content/uploads/2012/01/screenshot.png" alt="" title="Настройки" width="250" height="249" class="alignright size-full wp-image-155" /></a><br />
Установить плагин <a href="http://visualstudiogallery.msdn.microsoft.com/14f62cb9-b559-4bad-9388-37da2150e238/?SRC=Home" target="_blank">EventHandler Naming</a>, который позволяет менять политику именования методов-обработчиков. Устанавливать можно прямо из Extension manager. Даже настройки не требует, по умолчанию настроен как <code>On${SiteName}${EventName}</code>, например, <code>OnForm1Load</code>. Если надо, настраивается.</p>
<p><strong>2. Настроить ReSharper, чтобы он не ругался</strong></p>
<ol>
<li>Идем в меню ReSharper | Options | Languages | C# | C# Naming Style</li>
<li>Переключаем на &laquo;Advanced settings&#8230;&raquo;</li>
<li>Меняем значение &laquo;Event subscriptions on fields&raquo; с умолчального <code>$object$_On$event$</code> на <code>$object$_$event$</code></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2012/01/09/vs2010-handy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поучимся?</title>
		<link>http://www.kurdyukov.com/2011/09/26/learning/</link>
		<comments>http://www.kurdyukov.com/2011/09/26/learning/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 12:06:08 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[leaning]]></category>
		<category><![CDATA[stanford]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=142</guid>
		<description><![CDATA[Я считаю, без каких-то новых знаний жить не особо интересно. Поэтому стараюсь учиться. А тут Стэнфорд предлагает уникальную возможность бесплатно поучиться computer science. Предлагаемые курсы: Класс по машинному обучению Класс по искусственному интеллекту Класс введения в базы данных Все классы бесплатные, будут домашние задания. Стартуют примерно 10 октября. Язык преподавания &#8211; английский. Я сам записался [...]]]></description>
			<content:encoded><![CDATA[<p>Я считаю, без каких-то новых знаний жить не особо интересно. Поэтому стараюсь учиться. А тут Стэнфорд предлагает уникальную возможность бесплатно поучиться computer science.<br />
<span id="more-142"></span><br />
Предлагаемые курсы:</p>
<ul>
<li><a href="http://www.ml-class.org/course/auth/welcome">Класс по машинному обучению</a></li>
<li><a href="http://www.ai-class.com/">Класс по искусственному интеллекту</a></li>
<li><a href="http://www.db-class.org/course/auth/welcome">Класс введения в базы данных</a></li>
</ul>
<p>Все классы бесплатные, будут домашние задания. Стартуют примерно 10 октября. Язык преподавания &#8211; английский.</p>
<p>Я сам записался на машинное обучению и искусственному интеллекту.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2011/09/26/learning/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Наемная работа мечты</title>
		<link>http://www.kurdyukov.com/2011/03/08/dream-hired-work/</link>
		<comments>http://www.kurdyukov.com/2011/03/08/dream-hired-work/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 11:22:10 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[tailand]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=129</guid>
		<description><![CDATA[Кажется, я нашел идеальный вариант организации наемной работы. Вот текст объявления: Таиланд — море, солнце, счастливые лица вокруг. Теперь и у Вас есть возможность попасть туда, причем бесплатно и Вам еще за это доплатят Вакансия: разработчик Ruby on Rails Ну и так далее&#8230;. Ведь если задуматься, то представляется что огромное количество реальных проектов могут делаться [...]]]></description>
			<content:encoded><![CDATA[<p>Кажется, я нашел идеальный вариант организации наемной работы. Вот текст объявления:</p>
<blockquote><p>Таиланд — море, солнце, счастливые лица вокруг. Теперь и у Вас есть возможность попасть туда, причем бесплатно и Вам еще за это доплатят <img src='http://www.kurdyukov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Вакансия: разработчик Ruby on Rails</p></blockquote>
<p><span id="more-129"></span><br />
Ну и так далее&#8230;.<br />
Ведь если задуматься, то представляется что огромное количество реальных проектов могут делаться именно в таком режиме. Но есть несколько скрытых ограничений:</p>
<ul>
<li>Разработчики должны быть достаточно мобильны &#8211; т.е. никаких &laquo;привязок&raquo; на родине</li>
<li>Разработчики должны быть достаточно &laquo;рисковыми&raquo; и неконфликтными людьми &#8211; ведь непонятно как внивь прибывший будет уживаться в уже сложившемся коллективе.</li>
</ul>
<p>И все таки, перспектива работать в практически идеальных экологических условиях &#8211; это прекрасно, по-моему.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2011/03/08/dream-hired-work/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Пропустил Google Developer Day</title>
		<link>http://www.kurdyukov.com/2009/11/11/google-developer-day-missed/</link>
		<comments>http://www.kurdyukov.com/2009/11/11/google-developer-day-missed/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 07:54:44 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=116</guid>
		<description><![CDATA[Вчера в Москве проходил Google Developer Day. На который я не попал, поскольку не знал об этом мероприятии. Так и не нашел способа узнавать о таких событиях своевременно. А вы знаете такой способ?]]></description>
			<content:encoded><![CDATA[<p>Вчера в Москве проходил Google Developer Day. На который я не попал, поскольку не знал об этом мероприятии. Так и не нашел способа узнавать о таких событиях своевременно. А вы знаете такой способ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2009/11/11/google-developer-day-missed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Изящная идея передачи и хранения лицензий</title>
		<link>http://www.kurdyukov.com/2009/10/12/license-gui/</link>
		<comments>http://www.kurdyukov.com/2009/10/12/license-gui/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 18:52:29 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=109</guid>
		<description><![CDATA[Не секрет, что любой современный пользователь покупает массу программ. И каждая из них требует серийного номера. Обычно эти номера приходят по почте. Но с этими длинными последовательностями есть масса проблем &#8211; не все пользователи умеют пользоваться операциями copy и paste. Не все догадываются куда надо вводить номер и т.п. На прошлой неделе я увидел в [...]]]></description>
			<content:encoded><![CDATA[<p>Не секрет, что любой современный пользователь покупает массу программ. И каждая из них требует серийного номера. Обычно эти номера приходят по почте. Но с этими длинными последовательностями есть масса проблем &#8211; не все пользователи умеют пользоваться операциями copy и paste. Не все догадываются куда надо вводить номер и т.п. На прошлой неделе я увидел в программе <a href="http://www.springyarchiver.com/">Springy</a> изящнейнее решение этих проблем.<br />
<span id="more-109"></span><br />
Присылаемый по почте серийник представляет собой не обычную длинную и плохочитаемую последовательность, а симпатичную картинку примерно такого вида:</p>
<p><img src="http://www.kurdyukov.com/wp-content/uploads/2009/10/license.png" alt="license" title="license" width="466" height="287" class="aligncenter size-full wp-image-112" /><br />
Все, что нужно сделать &#8211; это &laquo;бросить&raquo; картинку на окно About Box в специальное место. Данное решение позволяет многократно увеличить объем информации, передаваемой неявным образом, поскольку при помощи стеганографии можно &laquo;подмешать&raquo; в картинку размером около 100кб порядка нескольких килобайт дополнительных данных (зависит от картинки и конкретного алгоритма). И защита от хакеров получается неплохая &#8211; код расшифровки таких стеганограмм может быть распределен по всей программе.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2009/10/12/license-gui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Опыт с Spring Roo</title>
		<link>http://www.kurdyukov.com/2009/10/10/spring-roo/</link>
		<comments>http://www.kurdyukov.com/2009/10/10/spring-roo/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 06:05:28 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=95</guid>
		<description><![CDATA[У меня возникла задача создать простенький веб-сайт с функциональностью доступа пользователей сайта к некоторой закрытой информации. При этом регистрация пользователей происходит третьим способом, но через сайт пользователи могут поменять свой пароль. Закрытая часть сайта содержит простенький интерактив по работе с закрытой информацией (создать, изменить, удалить), а также функционал по управлению пользователями &#8211; для админов. Для [...]]]></description>
			<content:encoded><![CDATA[<p>У меня возникла задача создать простенький веб-сайт с функциональностью доступа пользователей сайта к некоторой закрытой информации. При этом регистрация пользователей происходит третьим способом, но через сайт пользователи могут поменять свой пароль. Закрытая часть сайта содержит простенький интерактив по работе с закрытой информацией (создать, изменить, удалить), а также функционал по управлению пользователями &#8211; для админов.<br />
Для такого проекта я решил попробовать Spring Roo.<br />
<span id="more-95"></span><br />
Установка происходит просто, maven у меня уже был развернут. Далее я по инструкциями создал все необхомые вещи:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p95code2'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p952"><td class="code" id="p95code2"><pre class="bash" style="font-family:monospace;">alik-kurdyukovs-computer:testportal alik$ roo
    ____  ____  ____  
   <span style="color: #000000; font-weight: bold;">/</span> __ \<span style="color: #000000; font-weight: bold;">/</span> __ \<span style="color: #000000; font-weight: bold;">/</span> __ \ 
  <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>_<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> 
 <span style="color: #000000; font-weight: bold;">/</span> _, _<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>_<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>_<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>  
<span style="color: #000000; font-weight: bold;">/</span>_<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">|</span>_<span style="color: #000000; font-weight: bold;">|</span>\____<span style="color: #000000; font-weight: bold;">/</span>\____<span style="color: #000000; font-weight: bold;">/</span>    1.0.0.RC1 <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #c20cb9; font-weight: bold;">rev</span> <span style="color: #000000;">198</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
&nbsp;
Welcome to Spring Roo. For assistance press TAB or <span style="color: #7a0874; font-weight: bold;">type</span> <span style="color: #ff0000;">&quot;hint&quot;</span> <span style="color: #000000; font-weight: bold;">then</span> hit ENTER.
roo<span style="color: #000000; font-weight: bold;">&gt;</span> create project <span style="color: #660033;">-topLevelPackage</span> ru.test.testportal <span style="color: #660033;">-projectName</span> testportal
Created <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>alik<span style="color: #000000; font-weight: bold;">/</span>Development<span style="color: #000000; font-weight: bold;">/</span>projects<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>pom.xml
Created SRC_MAIN_JAVA
Created SRC_MAIN_RESOURCES
Created SRC_TEST_JAVA
Created SRC_TEST_RESOURCES
Created SRC_MAIN_WEBAPP
Created SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>spring
Managed ROOT<span style="color: #000000; font-weight: bold;">/</span>pom.xml
Created SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>spring<span style="color: #000000; font-weight: bold;">/</span>applicationContext.xml
roo<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">install</span> jpa <span style="color: #660033;">-provider</span> HIBERNATE <span style="color: #660033;">-database</span> POSTGRESQL
Created SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>persistence.xml
Created SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>spring<span style="color: #000000; font-weight: bold;">/</span>database.properties
please enter your database details <span style="color: #000000; font-weight: bold;">in</span> src<span style="color: #000000; font-weight: bold;">/</span>main<span style="color: #000000; font-weight: bold;">/</span>resources<span style="color: #000000; font-weight: bold;">/</span>database.properties
Managed SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>spring<span style="color: #000000; font-weight: bold;">/</span>applicationContext.xml
Managed ROOT<span style="color: #000000; font-weight: bold;">/</span>pom.xml
roo<span style="color: #000000; font-weight: bold;">&gt;</span> database properties
database.driverClassName = org.postgresql.Driver
database.password = 
database.url = jdbc:postgresql:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">5432</span>
database.username = 
roo<span style="color: #000000; font-weight: bold;">&gt;</span> database <span style="color: #000000; font-weight: bold;">set</span> <span style="color: #660033;">-key</span> database.url <span style="color: #660033;">-value</span> jdbc:postgresql:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">5432</span><span style="color: #000000; font-weight: bold;">/</span>testportaldb
Managed SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>spring<span style="color: #000000; font-weight: bold;">/</span>database.properties
roo<span style="color: #000000; font-weight: bold;">&gt;</span> database <span style="color: #000000; font-weight: bold;">set</span> <span style="color: #660033;">-key</span> database.username <span style="color: #660033;">-value</span> testportal
roo<span style="color: #000000; font-weight: bold;">&gt;</span> database <span style="color: #000000; font-weight: bold;">set</span> <span style="color: #660033;">-key</span> database.password <span style="color: #660033;">-value</span> testportalpass
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add dependency <span style="color: #660033;">-groupId</span> postgresql <span style="color: #660033;">-artifactId</span> postgresql <span style="color: #660033;">-version</span> <span style="color: #000000;">8.3</span>-<span style="color: #000000;">603</span>.jdbc3
Managed ROOT<span style="color: #000000; font-weight: bold;">/</span>pom.xml
roo<span style="color: #000000; font-weight: bold;">&gt;</span> new persistent class jpa <span style="color: #660033;">-name</span> ~.domain.PortalUser 
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_Entity.aj
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_ToString.aj
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_Configurable.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.PortalUser <span style="color: #660033;">-fieldName</span> phoneNumber <span style="color: #660033;">-notNull</span> <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">20</span>
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.PortalUser <span style="color: #660033;">-fieldName</span> password <span style="color: #660033;">-notNull</span> <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">50</span>
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field boolean <span style="color: #660033;">-class</span> ~.domain.PortalUser <span style="color: #660033;">-fieldName</span> needChangePassword <span style="color: #660033;">-notNull</span> 
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.PortalUser <span style="color: #660033;">-fieldName</span> lastName <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">200</span>           
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.PortalUser <span style="color: #660033;">-fieldName</span> firstName <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">200</span>
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.PortalUser <span style="color: #660033;">-fieldName</span> middleName <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">200</span>
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUser_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> new persistent class jpa <span style="color: #660033;">-name</span> ~.domain.Payment <span style="color: #660033;">-testAutomatically</span> 
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment.java
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PaymentDataOnDemand.java
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PaymentIntegrationTest.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_Entity.aj
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_ToString.aj
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_Configurable.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PaymentDataOnDemand_Roo_Configurable.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PaymentDataOnDemand_Roo_DataOnDemand.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PaymentIntegrationTest_Roo_IntegrationTest.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PaymentIntegrationTest_Roo_Configurable.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> new persistent class jpa <span style="color: #660033;">-name</span> ~.domain.Service <span style="color: #660033;">-testAutomatically</span> 
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service.java
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceDataOnDemand.java
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceIntegrationTest.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_Entity.aj
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_ToString.aj
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_Configurable.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceDataOnDemand_Roo_Configurable.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceDataOnDemand_Roo_DataOnDemand.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceIntegrationTest_Roo_IntegrationTest.aj
Created SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceIntegrationTest_Roo_Configurable.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.Service <span style="color: #660033;">-fieldName</span> name <span style="color: #660033;">-notNull</span> <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">50</span>
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_JavaBean.aj
Managed SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.Service <span style="color: #660033;">-fieldName</span> description <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">500</span>        
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field boolean <span style="color: #660033;">-class</span> ~.domain.Service <span style="color: #660033;">-fieldName</span> isEnabled <span style="color: #660033;">-notNull</span> 
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_JavaBean.aj
Managed SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field string <span style="color: #660033;">-class</span> ~.domain.Service <span style="color: #660033;">-fieldName</span> logoName <span style="color: #660033;">-notNull</span> <span style="color: #660033;">-sizeMax</span> <span style="color: #000000;">200</span> 
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_JavaBean.aj
Managed SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Service_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field reference jpa <span style="color: #660033;">-class</span> ~.domain.Payment <span style="color: #660033;">-fieldName</span> service <span style="color: #660033;">-type</span> ~.domain.Service
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field reference jpa <span style="color: #660033;">-class</span> ~.domain.Payment <span style="color: #660033;">-fieldName</span> portalUser <span style="color: #660033;">-type</span> ~.domain.PortalUser
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_JavaBean.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> add field number <span style="color: #660033;">-class</span> ~.domain.Payment <span style="color: #660033;">-fieldName</span> amount <span style="color: #660033;">-type</span> java.math.Decimal
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment.java
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_JavaBean.aj
Managed SRC_TEST_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PaymentDataOnDemand_Roo_DataOnDemand.aj
Managed SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>Payment_Roo_ToString.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> new controller automatic <span style="color: #660033;">-name</span> ~.web.PortalUserController <span style="color: #660033;">-formBackingObject</span> ~.domain.PortalUser
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>PortalUserController.java
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>testportal-servlet.xml
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>PortalUserController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>banner-graphic.png
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>springsource-logo.png
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>styles
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>styles<span style="color: #000000; font-weight: bold;">/</span>roo.css
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>header.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>footer.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>includes.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>dataAccessFailure.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>resourceNotFound.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>uncaughtException.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>list.png
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>show.png
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>create.png
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>update.png
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>images<span style="color: #000000; font-weight: bold;">/</span>delete.png
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>portaluser
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>portaluser<span style="color: #000000; font-weight: bold;">/</span>list.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>portaluser<span style="color: #000000; font-weight: bold;">/</span>show.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>portaluser<span style="color: #000000; font-weight: bold;">/</span>create.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>menu.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>menu.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>portaluser<span style="color: #000000; font-weight: bold;">/</span>update.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>menu.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>urlrewrite.xml
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>web.xml
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>index.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>web.xml
Managed ROOT<span style="color: #000000; font-weight: bold;">/</span>pom.xml
roo<span style="color: #000000; font-weight: bold;">&gt;</span> new controller automatic <span style="color: #660033;">-name</span> ~.web.crud.ServiceController <span style="color: #660033;">-formBackingObject</span> ~.domain.Service 
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>crud
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>crud<span style="color: #000000; font-weight: bold;">/</span>ServiceController.java
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>web.xml
Managed ROOT<span style="color: #000000; font-weight: bold;">/</span>pom.xml
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>crud<span style="color: #000000; font-weight: bold;">/</span>ServiceController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>service
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>service<span style="color: #000000; font-weight: bold;">/</span>list.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>service<span style="color: #000000; font-weight: bold;">/</span>show.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>service<span style="color: #000000; font-weight: bold;">/</span>create.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>menu.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>service<span style="color: #000000; font-weight: bold;">/</span>update.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>menu.jsp
roo<span style="color: #000000; font-weight: bold;">&gt;</span> new controller automatic <span style="color: #660033;">-name</span> ~.web.crud.PaymentController <span style="color: #660033;">-formBackingObject</span> ~.domain.Payment
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>crud<span style="color: #000000; font-weight: bold;">/</span>PaymentController.java
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>web.xml
Managed ROOT<span style="color: #000000; font-weight: bold;">/</span>pom.xml
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUserEditor.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceEditor.java
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>crud<span style="color: #000000; font-weight: bold;">/</span>PaymentController_Roo_Controller.aj
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>payment
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>payment<span style="color: #000000; font-weight: bold;">/</span>list.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>payment<span style="color: #000000; font-weight: bold;">/</span>show.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>payment<span style="color: #000000; font-weight: bold;">/</span>create.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>menu.jsp
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>payment<span style="color: #000000; font-weight: bold;">/</span>update.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>jsp<span style="color: #000000; font-weight: bold;">/</span>menu.jsp
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>PortalUserEditor_Roo_Editor.aj
Created SRC_MAIN_JAVA<span style="color: #000000; font-weight: bold;">/</span>ru<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>testportal<span style="color: #000000; font-weight: bold;">/</span>domain<span style="color: #000000; font-weight: bold;">/</span>ServiceEditor_Roo_Editor.aj
roo<span style="color: #000000; font-weight: bold;">&gt;</span> configure logging <span style="color: #660033;">-level</span> DEBUG <span style="color: #660033;">-package</span> PROJECT 
Created SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>spring<span style="color: #000000; font-weight: bold;">/</span>log4j.properties
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>web.xml
roo<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">install</span> security
Managed ROOT<span style="color: #000000; font-weight: bold;">/</span>pom.xml
Created SRC_MAIN_RESOURCES<span style="color: #000000; font-weight: bold;">/</span>META-INF<span style="color: #000000; font-weight: bold;">/</span>spring<span style="color: #000000; font-weight: bold;">/</span>applicationContext-security.xml
Created SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>login.jsp
Managed SRC_MAIN_WEBAPP<span style="color: #000000; font-weight: bold;">/</span>WEB-INF<span style="color: #000000; font-weight: bold;">/</span>web.xml</pre></td></tr></table></div>

<p>В результате получаем вполне работающее веб-приложение.</p>
<p>Следующий этап &#8211; загрузить приложение в мое любимое IDE, а именно IntelliJ IDEA. Тут меня ждал первый подвох &#8211; текущая релизная версия 8.1 не поддерживает файлы .aj, которые активно используются в полученном проекте. Единственныый вариант &#8211; сказать IDEA, что это просто текстовые файлы. Все возможности по рефакторингу и кросс-ссылочности сразу пропадают. Более того, все методы, определенные в .aj и использованые в других местах (например, в контроллерах) считаются неопределенными. Что сводит все возможности инспекции этого IDE просто бесполезными. Ладно, можно попробовать 9.0 M1 под кодовым названием Maia.</p>
<p>В Maia все несколько лучше &#8211; файлы .aj все считаются файлами с кодом. Но методы, определенные в .aj файлах, по прежнему не считаются &laquo;правильными&raquo; методами. И при их использование IDEA показывает ошибку. Таким образом, приходится признать, что использование Spring Roo совместно с IDEA пока не представляется возможным.</p>
<p>Использование &laquo;родного&raquo; инструментария <a href="http://www.springsource.com/products/sts">SpringSource Tool Suite</a> не наделено всеми описанными проблемами, но это Eclipse, а значит лично мне пользоваться очень неудобно.</p>
<p>Вывод: проект, однозначно, интересный, но не подходит для моих практических задач по причине отсутствия поддержки в IDEA.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2009/10/10/spring-roo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

