samsonych.com

Shine On You Crazy Diamond!

Archive for the 'Девелопинг' Category


Установка SVN (Subversion) Windows Service

16th March 2008

В срочном порядке необходимо было установить SVN (Subversion). Опишу вкратце парочку неочевидных моментов с которыми пришлось столкнуться при установке данной системы контроля версий.

Установка производилась на виндовом 2k3 серванте с первым сервиспаком, однако предположу что данное руководство применимо ко всем операционным системам семейства Win NT.

Итак, сходил на официальный сайт  и скачал на момент написания данной статьи последнюю версию Subversion.

Инсталляция сервера

Запусктил инсталяционный файл и в процессе инсталляции указал установочную директорию (D:\SVN\Subversion).

Итак файлики успешно распаковались и готовы к использованию.

Создание репозитория SVN

Далее выполнив эту команду:

>svnadmin create D:\svn\Repository

создал репозиторий, где будут располагаться файлы базы данных, конфигурации SVN.

Следующей и в общем-то основной задачей явилась регистрация SVN сервера в качестве служебного сервиса Windows. Для того чтобы прописать служебный сервис, я воспользовался следующей командой:

>sc create SVN binPath= "d:\SVN\Subversion\bin\svnserve.exe --service --root d:/SVN/Repository"
DisplayName= "Subversion Repository" depend= "Tcpip" start= auto

данной командой создается сервис с именем SVN, который будет автоматически при старте операционной системы запускать наш SVN-сервер.

Откровенно отмечу, что на этом шаге мне пришлось несколько повозиться:

Во-первых, обратите внимание, на пробелы в параметрах команды SC.exe. Оказываются они обязательны.

Во-вторых, будьте внимательнее с пробелами в пути к svnserve.exe и/или репозитария (параметр binPath). Если таковые имеются, то путь(и) необходимо помещать в дополнительные кавычки обрамляя слэшем, вот так

>sc create <name> binPath= "\"C:\Program Files\Subversion\bin\svnserve.exe\" ..."

Конфигурация прав доступа

Лезу в директорию репозитория D:\svn\Repository в каталог conf. Открываю файл svnserve.conf и в секции [general] разкомментировал следующие параметры:

anon-access = read
auth-access = write
password-db = passwd

Далее залез в файл passwd и добавил свой логин и пароль, с которым я буду коннектиться к серверу.

Запуск сервера

net start SVN

Жду когда сервис запустится и проверяю командой

svn info svn://localhost

успешный старт SVN-сервера. На консоль выведется примерно следующее:

Path: localhostURL: svn://localhost
Repository Root: svn://localhost
Repository UUID: c422f63f-1457-454e-a783-90e2cfd0cfb5
Revision: 0
Node Kind: directory
Last Changed Rev: 0
Last Changed Date: 2008-03-14 00:11:02 +0200 (Пт, 14 мар 2008)

По идее установка самого сервера закончена, и его уже можно использовать. Помещение, выгрузку исходников, коммит, апдэйт, контроль ревизий файлов, и т.д. можно осуществлять посредством того же консольного клинета svn, входящего в поставку вместе с самим сервером. Однако для более удобного пользования системой, можно посоветовать виндюшный SVN-клиент – черепашку TortoiseSVN. Программа встраивается в контектсные менюшки операционной системы и позволяет практически в любом месте и в любом файловом менеджере работать с SVN.

Posted in Девелопинг | 5 Comments »

Экспорт ddl схемы. Ant. Hibernate Annotations

22nd February 2008

Пытаюсь усиленно освоить Hibernate Annotations, столкнулся со проблемой экспорта ddl-скрипта, на основании объектной модели использующие аннотации. Раньше формировал непосредственно *.hbm.xml - маппинг-файлы сгенерированные через XDoclet. И используя в Ant класс net.sf.hibernate.tool.hbm2ddl.SchemaExportTask удачно производил экспорт в ddl-схемы в файл.

Пример экспорта ddl-схемы на основе *.hbm.xml - маппинг-файлов:

<target name="ddl.generate">
	<path id="hibernate.export.classpath">
		<fileset dir="lib/">
			<include name="*.jar" />
		</fileset>
	</path>
	<taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"
		classpathref="hibernate.export.classpath" mce_href="hibernate.export.classpath" />
	<schemaexport properties="../hibernate.properties" text="yes" drop="no" delimiter=";" output="ddl-schema.sql">
		<fileset dir="${hibernate.mapping.dir}">
			<include name="**/*.hbm.xml"/>
		</fileset>
	</schemaexport>
</target>

Взяв на вооружение Hibernate Annotations, задался целью добиться аналогичного результата. Решением явилось использование класса org.hibernate.tool.ant.HibernateToolTask из библиотеки hibernate-tools.jar.

Вот пример экспорта ddl-схемы на основе аннотированных классов, находящихся в папке ${targetdir}:

<target name="ddl.generate">
	<path id="hibernate.export.classpath">
		<fileset dir="lib/">
			<include name="*.jar" />
		</fileset>
	</path>
	<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask"
		classpathref="hibernate.export.classpath" mce_href="hibernate.export.classpath" />
	<hibernatetool destdir="${targetdir}">
		<classpath>
			<path location="${targetdir}" />
		</classpath>
		<annotationconfiguration configurationfile="bin/hibernate.cfg.xml" />
		<hbm2ddl export="true" create="true" delimiter=";" format="true" outputfilename="ddl-schema.sql" />
	</hibernatetool>
</target>

Для поиска данного решения помогли следующие ссылки:

Posted in Девелопинг | 1 Comment »

Основные термины проектировщика реляционной базы данных

21st February 2008

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

Объекты реляционной базы данных будут рассматриваться в контексте реляционной СУБД Oracle. Такой подход принят потому, что проектирование физической модели реляционной базы данных в основном выполняется для конкретной среды ее реализации.

В Oracle термин схема (Schema) используется для описания всех объектов базы данных, которые созданы некоторым пользователем. Для каждого нового пользователя автоматически создается новая схема.

Для создания таблиц и представлений наличие схемы не обязательно. Если у вас планируется инсталляция только одной логической базы данных, то ясно, что можно обойтись и без схемы. Но если планируется, что одна и та же СУБД будет использоваться для поддержки нескольких баз данных, то надлежащая организация объектов баз данных в схемы может значительно облегчить сопровождение этих баз данных. На практике схема часто ассоциируется с объектами определенного пользователя физической базы данных.

Помимо схемы, не обязательными элементами программной среды реляционных баз данных являются кластеры и каталоги.

Кластер (Cluster) - это объект, задающий способ совместного хранения данных в нескольких или одной таблице. Данный объект представляет собой группу каталогов, к которым можно обращаться через одно соединение с сервером базы данных (программная компонента СУБД). Одним из критериев использования кластера является наличие общих ключевых полей в нескольких таблицах, которые используются в одной и той же команде SQL. Обычно кластеризованные столбцы или таблицы хранятся в базе данных в виде таблиц хэширования (т.е. специальным образом).

На практике процедура создания каталога определяется реализацией СУБД на конкретной операционной платформе. Под каталогом понимается группа схем. На практике каталог часто ассоциируется с физической базой данных как набором физических файлов операционной системы, которые идентифицируются ее именем.

Для проектировщика схема базы данных - это общее логическое представление отношений законченной базы данных. С точки зрения SQL, схема - это контейнер для таблиц, представлений и других структурных элементов реляционной базы данных. Принцип размещения элементов базы данных в каждой схеме полностью определяется проектировщиком базы данных.

К числу основных объектов реляционных баз данных относятся таблица, представление и пользователь.

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

Представление (View) - это поименованная динамически поддерживаемая СУБД выборка из одной или нескольких таблиц базы данных. Оператор выборки ограничивает видимые пользователем данные. Обычно СУБД гарантирует актуальность представления - его формирование производится каждый раз, когда представление используется. Иногда представления называют виртуальными таблицами.

Пользователь (User) - это объект, обладающий возможностью создавать или использовать другие объекты базы данных и запрашивать выполнение функций СУБД, таких как организация сеанса работы, изменение состояние базы данных и т. д.

Для упрощения идентификации и именования объектов в базе данных поддерживается такие объекты, как синоним, последовательность и определенные пользователем типы данных.

Синоним (Synonym) - это альтернативное имя объекта (псевдоним) реляционной базы данных, которое позволяет иметь доступ к данному объекту. Синоним может быть общим и частным. Общий синоним позволяет всем пользователям базы данных обращаться к соответствующему объекту по его псевдониму. Синоним позволяет скрыть от конечных пользователей полную квалификацию объекта в базе данных.

Последовательность (Sequence) - это объект базы данных, который позволяет генерировать последовательность уникальных чисел (номеров) в условиях многопользовательского асинхронного доступа. Обычно элементы последовательности используются для уникальной нумерации элементов таблиц (строк) в операциях модификации данных.

Определенные пользователем типы данных (User-defined data types) представляют собой определенные пользователем типы атрибутов (домены), которые отличаются от поддерживаемых (встроенных) СУБД типов. Они определяются на основе встроенных типов. Определенные пользователем типы данных образуют ту часть среды СУБД, которая организована в соответствии с объектно-ориентированной парадигмой.

Для обеспечения эффективного доступа к данным в реляционных СУБД поддерживаются ряд других объектов: индекс, табличная область, секция.

Индекс (Index) - это объект базы данных, создаваемый для повышения производительности выборки данных и контроля уникальности первичного ключа (если он задан для таблицы). Полностью индексные таблицы (index-organized tables) исполняют роль таблицы и индекса одновременно.

Табличное пространство или область (Tablespace) - это именованная часть базы данных, используемая для распределения памяти для таблиц и индексов. В Oracle 9i - это логическое имя физических файлов операционной системы. Все объекты базы данных, в которых хранятся данные, соответствуют некоторым табличным пространствам. Большинство объектов базы данных, в которых данные не хранятся, находятся в словаре данных, расположенном в табличном пространстве SYSTEM.

Секция (Partition) - это объект базы данных, который позволяет представить объект с данными в виде совокупности подобъектов, отнесенных к различным табличным пространствам. Таким образом, секционирование позволяет распределять очень большие таблицы на нескольких жестких дисках.

Для обработки данных специальным образом или для реализации поддержки ссылочной целостности базы данных используются объекты: хранимая процедура, функция, команда, триггер, таймер и пакет (Oracle). С помощью этих объектов базы данных можно выполнять так называемую построчную обработку (record processing) данных. С точки зрения приложений баз данных построчная обработка - это последовательная выборка данных по одной строке, ее обработка и переход к обработке следующей строки.

Данные объекты реляционной базы данных представляют собой программы, т.е. исполняемый код. Этого код обычно называют серверным кодом (server-side code), поскольку он выполняется компьютером, на котором установлено ядро реляционной СУБД. Планирование и разработка такого кода является одной из задач проектировщика реляционной базы данных.

Хранимая процедура (Stored procedure) - это объект базы данных, представляющий поименованный набор команд SQL и/или операторов специализированных языков обработки программирования базы данных (например, SQLWindows или PL/SQL).

Функция (Function) - это объект базы данных, представляющий поименованный набор команд SQL и/или операторов специализированных языков обработки программирования базы данных, который при выполнении возвращает значение - результат вычислений.

Команда (Command) - это поименованный оператор SQL, который заранее откомпилирован и сохраняется в базе данных. Скорость обработки команды выше, чем у соответствующего ему оператора SQL, т.к. при этом не выполняются фазы синтаксического разбора и компиляции.

Триггер (Trigger) - это объект базы данных, который представляет собой специальную хранимую процедуру. Эта процедура запускается автоматически, когда происходит связанное с триггером событие (например, до вставки строки в таблицу).

Таймер (Timer) отличается от триггера тем, что запускающим событием для хранимой процедуры является событие таймера.

Пакет (Package) - это объект базы данных, который состоит из поименованного структурированного набора переменных, процедур и функций.

В распределенных реляционных СУБД имеются специальные объекты: снимок и связь базы данных.

Снимок (Snapshop) - локальная копия таблицы удаленной базы данных, которая используется для тиражирования (репликации) таблицы или результата запроса. Снимки могут быть модифицируемыми или предназначенными только для чтения.

Связь базы данных (Database Link) или связь с удаленной базой данных - это объект базы данных, который позволяет обратиться к объектам удаленной базы данных. Имя связи базы данных, грубо говоря, можно представить как ссылку на параметры доступа к удаленной базы данных.

Для эффективного управления разграничением доступа к данным в Oracle поддерживает объект роль.

Роль (Role) - объект базы данных, представляющий собой поименованную совокупность привилегий, которые могут назначаться пользователям, категориям пользователей или другим ролям.

Posted in Девелопинг | No Comments »