null

BigBlueButton и MySQL

Продолжая серию заметок про дивный в яблоках BigBlueButton, хочу поделиться новыми новыми проблемами.

По гениальному замыслу разработчиков BigBlueButton, сервер баз данных необходим для сохранения информации о запланированных конференциях. Без каких-либо вариантов для этих нужд используется MySQL. Т.к. пытливый ум пионера всегда ищет альтернативы, я попытался подружить BigBlueButton c другими базами данных.

Конфигурация, описывающая используемую базу данных на стороне
BigBlueButton выглядит примерно так:

% cat tomcat/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties
#
# These are the default properites for BigBlueButton Web application

dataSource.url=jdbc:mysql://localhost/bigbluebutton
dataSource.username=bigbluebutton
dataSource.password=SH33hTRmlmZDbOuLWGIH0w
dataSource.driverClassName=com.mysql.jdbc.Driver


Откуда само собой напрашивается попробовать любую другую базу данных, для которой есть JDBC (правильнее сказать, с которыми работает Hibernate)

Сначала я попробовал PostgreSQL:

dataSource.url=jdbc:postgresql://localhost/bigbluebutton
dataSource.username=bigbluebutton
dataSource.password=SH33hTRmlmZDbOuLWGIH0w
dataSource.driverClassName=org.postgresql.Driver


и выяснил, что
BigBlueButton также использует Grails, который в свою очередь пытается создать таблицы, используя зарезервированные названия, например, user:

Nov  3 17:06:51 x4150b postgres[1665]: [2-1] ERROR:  syntax error at or near "user" at character 14
Nov  3 17:06:51 x4150b postgres[1665]: [2-2] STATEMENT:  create table user (id int8 not null, version int8 not null, date_created timestamp not null, full_name varchar(255) not null, last_updated timestamp not null, password_hash varchar(255) not null, username varchar(255) not null unique, primary key (id))


При этом он даже не пытается хоть как-то обрабатыват ошибки:

Nov  3 17:06:51 x4150b postgres[1665]: [3-1] ERROR:  syntax error at or near "user" at character 89
Nov  3 17:06:51 x4150b postgres[1665]: [3-2] STATEMENT:  alter table account add constraint FKB9D38A2D1CC2EEF6 foreign key (owner_id) references user
Nov  3 17:06:51 x4150b postgres[1665]: [4-1] ERROR:  syntax error at or near "user" at character 93
Nov  3 17:06:51 x4150b postgres[1665]: [4-2] STATEMENT:  alter table account_user add constraint FK410E6E9DB0DC3EDE foreign key (user_id) references user
Nov  3 17:06:51 x4150b postgres[1665]: [5-1] ERROR:  syntax error at or near "user" at character 91
Nov  3 17:06:51 x4150b postgres[1665]: [5-2] STATEMENT:  alter table conference add constraint FK2B5F451CB0DC3EDE foreign key (user_id) references user
Nov  3 17:06:51 x4150b postgres[1665]: [6-1] ERROR:  syntax error at or near "user" at character 100
Nov  3 17:06:51 x4150b postgres[1665]: [6-2] STATEMENT:  alter table user_permission_rel add constraint FK951A411DB0DC3EDE foreign key (user_id) references user
Nov  3 17:06:51 x4150b postgres[1665]: [7-1] ERROR:  syntax error at or near "user" at character 94
Nov  3 17:06:51 x4150b postgres[1665]: [7-2] STATEMENT:  alter table user_role_rel add constraint FKF3249744B0DC3EDE foreign key (user_id) references user


Пошарив по форумам
Grails я нашел, что разработчики рекомендуют переопределять имена таблиц непосредственно в приложении.

Потом я попробовал SQLite:

dataSource.url=jdbc:sqlite:/var/db/bigbluebutton.db
dataSource.driverClassName=org.sqlite.JDBC


и также потерпел фиаско, т.к. поставляемая с
BigBlueButton библиотека Grails не поддерживает работу с SQLite:

SEVERE: Exception sending context initialized event to listener instance of class org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.codehaus.groovy.grails.orm.hibernate.exceptions.CouldNotDetermineHibernateDialectException: Could not determine Hibernate dialect for database name [SQLite]!
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
        at org.apache.catalina.core.StandardService.start(StandardService.java:519)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)


Попытка обновить
Grails до актуальной версии привела к неработоспособости всего BigBlueButton.

Тут я попытался поискать по исходным текстам на тему необходимости базы данных для
BigBlueButton и загрустил окончательно. Оказывается, начиная с версии 0.64 BigBlueButton ВООБЩЕ никак не использует базу данных! В предыдущих версиях там сохранялась информация о запланированных конференциях, а в последних двух версиях (0.70 и 0.71), в связи со сменой API база данных стала не нужна. Но как ни странно, без нее BigBlueButton не запускается ;-)

Nov 15, 2010 2:02:48 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
        at org.apache.catalina.core.StandardService.start(StandardService.java:519)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure



Вот как комментируют это сами разработчики:

BigBlueButton does not use the database. Previously, it was used for
scheduling conferences. When the API was created, we discontinued the
scheduling app.

The database is still there because we haven't had the time to take it
out completely.


Соответственно, когда-нибудь необходимость в
MySQL отпадет как рудимент. Ну а пока придется таскать за собой этот хвост.

 

Не делайте из еды культа!

Очень люблю готовить и вкусно покушать. А чтобы времени на эти увлекательные занятия оставалось как можно больше, я стараюсь автоматизировать любые задачи, которые оказываются в поле моей профессиональной деятельности.
В своем скромном дневнике я буду делиться с Вами рецептами блюд, которые удаются мне особенно хорошо

Ничего не найдено. n is 0