суббота, 29 января 2011 г.
Про установку Redmine
Compojure 0.6.0
пятница, 21 января 2011 г.
Начало проекта с 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).
вторник, 18 января 2011 г.
Создал банальный бин UserEjb.
@Stateless
public class UserEjb{
@PersistenceContext(unitName="EjbPU")
private EntityManager em;
public User findById(Long id) {
return em.find(User.class, id);
}
public User create (User user){
em.persist(user);
return user;
}
public User findByLogin(String login){
return (User) em.createQuery("select user from User as user where user.login = :login").setParameter("login", login).getSingleResult();
}
public User edit(User user){
em.merge(user);
return user;
}
}
В классе vaadin он никак не хотел создаваться с помощью аннотации EJB, хотя все сделал как указано в из примере На сайте ваадин
В итоге пришлось написать такой код:
UserEjb userEjb = (UserEjb) new InitialContext().lookup("java:module/UserEjb");
четверг, 6 января 2011 г.
Rails на Clojure
По адресу https://github.com/macourtney/Conjure проживает Rails подобная библиотека для разработки веб приложений на языке Clojure. Из ее особенностей хочется отметить:
1. В качестве слоя доступа к базе данных (ActiveRecord в Rails) используется библиотека clj-record. Это позволяет удобно писать зависимости между сущностями бд, почти как в ActiveRecord, в стиле has_many, belongs_to.
2. Может работать на Google AppEngine. Для этого при создании проекта достаточно набратьlein conjure new -database google-app-engine. А затем с помощью lein uberwar создается веб архив.
3. Удобная работа с Ajax.
Пока из того, что не понравилось – при генерировании модели можно из числовых типов можно указать только integer. Может быть я чего-то не понял, нужно копать дальше. По завершению всех копательств нужно будет написать пост с полным описанием фреймворка.