пятница, 21 января 2011 г.

Начало проекта с Scala, Vaadin и Circumflex ORM

Решил написать простенькое приложение на Scala с использованием Vaadin и Circumflex ORM.
Запустил Netbeans. Создал maven проект с Simple Vaadin Application archetype. Для теста запустил. Выключил. Полез в гугл за ответом на вопрос "как в приложение java внедрить scala". Нашел работающее решение на http://stuq.nl/weblog/2008-11-26/4-steps-to-add-scala-to-your-maven-java-projects. Взял конфиг, который умеет обрабатывать циклические ссылки со скалы на java и обратно.
Затем написал тестовый класс на scala.


import com.vaadin.Application
import com.vaadin.ui._
import ru.circumflex.orm._
import com.kitprof.soma.entity._


class MyVaadinApplication extends Application {

def init = {
val window = new Window("My Vaadin Application")
window.addComponent(new Button("Click Me"))
setMainWindow(window)
}
}


Все прекрасно работает.

Теперь мне нужна база данных. Для разработки, я думаю, подойдет и h2 (Легкая, быстрая СУБД). Открываю pom.xml и добавляю


        com.h2database
        h2
        1.3.149

В качестве ORM я решил попробовать Circumflex ORM. Для этого в pom.xml пишу


        ru.circumflex
        circumflex-orm
        2.0.RC3
    

Circumflex для работы требуется файл с настройками cx.properties. Его нужно создать вручную в папке src/main/resources. В моем случае он имеет следующее содержимое:
orm.connection.driver=org.h2.Driver
orm.connection.url=jdbc:h2:~/test
orm.connection.username=myuser
orm.connection.password=mypassword
Значения всех параметров, я думаю, интуитивно понятно.
В моем приложении будут пользователи. Они должны иметь возможность авторизоваться, поэтому мне нужно, как минимум, два поля: логин и пароль. Итак,


import ru.circumflex.orm._

class User extends Record[String, User]{
val login = "user_login".VARCHAR(50).NOT_NULL
val password = "user_password".VARCHAR(50).NOT_NULL

def PRIMARY_KEY = login
def relation = User
}

object User extends User with Table[String, User]

Теперь мне нужно создать в базе таблицу users с полями user_login и user_password. Как и любая серьезная ORM тулза, Circumflex умеет сам создавать схему базы данных. Для меня самым удобным представился вариант через написание кода, поэтому в методе init класса MyVaadinApplication я добавил следующие строки:

    val ddl = new DDLUnit(User)
    ddl.DROP_CREATE

Метод DROP_CREATE каждый раз удаляет и создает схему заново. При разработке приложения, когда поля и свойства полей (такие как длина) часто меняются это очень удобно. Однако при тестировании удобно, когда в базе уже есть некий набор тестовых данных. Например, в моем случае не плохо было бы иметь несколько пользователей и не создавать их каждый раз после регенерации схемы базы данных. Для меня самым удобным представляется вариант создания некоего класса Bootstrap (привет liftweb.net), где будет код вида
 if (usersCount == 0) createTestUsersPlease()
Да, кстати, нужно попробовать запустить приложение, нажимаю Run и вижу, что все работает. H2 при этом создает в пользовательской папке файл test.h2.db (помните параметр orm.connection.url).

2 комментария:

  1. Отличная вводная статья! С таким хорошим и актуальным набором технологий:)

    ОтветитьУдалить
  2. Спасибо! Надеюсь скоро напишу подробнее о дальнейшей работе над этим проектом.

    ОтветитьУдалить