IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  XML | Технология Java  >

Связывание с данными с помощью Castor: Часть 1. Установка и настройка Castor

Настройка и конфигурирование проекта, использующего связывание с данными на основе Castor

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить

Исходные тексты примера


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: сложный

Бретт МакЛафлин, автор и редактор, O'Reilly Media, Inc.

17.10.2008

Проект Castor - это библиотека с открытым кодом, предоставляющая функции связывания с данными (data binding). Она работает аналогично Sun JAXB, обладая при этом расширенными возможностями для отображения и связывания с таблицами реляционных баз данных. В этой статье рассматриваются начальные вопросы использования Castor, такие как: загрузка, установка, конфигурирование, настройка пути к файлам классов (classpath) и т.д.

Популярность связывания с данными

Одним из наиболее широко обсуждаемых тем в новостных группах XML, списках рассылки и форумах нашего Web-сайта (ссылки можно найти в разделе Ресурсы) является связывание с данными. Разработчики Java и XML во весь голос заявляют о необходимости простого способа преобразования объектов Java в документы XML и обратно.

Лидерство в данной области принадлежит Sun и ее технологии JAXB - архитектуре Java для связывания с XML (Java Architecture for XML Binding). Впрочем, если вы видели другую расшифровку этой аббревиатуры, то не удивляйтесь, Sun меняет их практически ежегодно. К сожалению, JAXB API (или архитектура JAXB, как вам будет угодно) не лишена недостатков, к тому же обновления появляются не слишком часто. Ко всему прочему, она не позволяет отображать объекты на таблицы реляционных баз данных, что является общепризнанной необходимостью.

Появление Castor

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

Некоторые преимущества Castor

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

Другие статьи серии
  • Во-первых, Castor - это полноценная замена JAXB. Другими словами, вы можете полностью перевести ваш проект с JAXB на Castor с минимальными усилиями (хотя нельзя сказать, что функции Castor в точности дублируют JAXB, но они достаточно близки для того чтобы не вызывать проблем даже у новичков).
  • Во-вторых, у Castor шире возможности связывания, позволяющие трансформировать данные из Java в XML и обратно, не используя XML-схему. Его подход к связыванию проще, чем у JAXB. Наконец, поддерживается возможность сохранять и восстанавливать объекты из реляционной базы данных и документов XML.
  • У Castor также есть функции JDO. JDO (Java-объекты данных) - это технология, которая лежит в основе отображения между Java-объектами и реляционными СУБД. JDO уже прошла пик своей популярности, который пришелся на несколько лет назад, но она все еще остается полезной. В конце-концов, JDO - это спецификация Sun, так что вам не придется использовать никакие подозрительные API.


В начало


Загрузка Castor

Установка Castor не таит в себе ничего сложного. Для начала зайдите на Web-страницу Castor (ссылка находится в разделе Ресурсы) и нажмите на ссылку Download в меню слева. Далее выберите последний крупный релиз и перейдите вниз к разделу Download sets. Оттуда вы сможете скачать JAR-файлы Castor, DTD, документацию, зависимости и т.д. (все скачивается по отдельности). Проще всего загрузить один из уже сформированных пакетов (рисунок 1).


Рисунок 1. Пакеты для скачивания с Web-сайта Castor
Castor's download sets package their binaries and docs into an easy-to-use single archive

В этой статье мы будем использовать версию 1.1.2.1. Скачайте zip-архив под названием The Castor JARs, docs, DTDs, command line tools, and examples. В него включены файлы JAR, документация и примеры (рисунок 2).


Рисунок 2. Распакованный архив Castor
Castor comes with a number of JAR files, as well as documents and sample programs


В начало


Все должно быть на своем месте

Далее необходимо разместить файлы Castor таким образом, чтобы они были доступы среде Java.

Стандартный вариант размещения Java-библиотек

Очень советую вам определиться с местом на диске, в котором будут храниться все сторонние (third-party) Java-библиотеки. Конечно, они могут быть разбросаны по всей системе, но это будет похоже на страшный сон по ряду причин:

  1. Во-первых, нужную библиотеку будет сложно найти.
  2. Будет трудно понять, какая версия библиотеки используется. Вполне возможно, что разные версии одной библиотеки будут находиться в разных каталогах.
  3. Значение переменной classpath превратится в подлинный кошмар.

В моей системе все библиотеки находятся в /usr/local/java/, причем каждая в собственном под-каталоге, название которого обычно включает версию библиотеки. В общем, сохраните распакованное содержимое архива Castor там, где вы храните библиотеки. В моем случае это будет /usr/local/java/castor-1.1.2.1.

Создайте закладку для ссылки на документацию Castor

При установке любой Java-библиотеки важно найти ссылку на документацию, потому что к ней вам придется обращаться многократно. Большинство библиотек поставляются вместе с локальной копией документации, в том числе JavaDoc, в формате HTML. В случае Castor, ее можно найти в каталоге castor-1.1.2.1/doc/. Поэтому в моей системе можно создать закладку, указывающую на /usr/local/java/castor-1.1.2.1/doc/index.html. Загруженная с локального диска документация для Castor 1.1.2.1 выглядит следующим образом (рисунок 3).


Рисунок 3. Локально загруженная документация Castor
Most of the links in this documentation also refer to local pages

Есть две главные причины, по которым эти моменты заслуживают внимания (причем, как в моей статье, так и в вашей жизни):

  1. К документации теперь есть локальный доступ. Вам приходилось программировать на борту самолета? Или оказываться без доступа к интернету? Например, если WiFi в Starbucks не работает должным образом. В этих ситуациях жизненно важно, чтобы документация была доступна, не говоря уже о том, что доступ к ней будет быстрее.
  2. Есть гарантия, что документация будет соответствовать вашей версии библиотеки. Castor развивается, и не факт, что вы всегда будете использовать последнюю версию. При этом на сайте как правило, выкладывается документация к последней версии, которая не обязательно будет совпадать с вашей в отличие от ранее загруженной локальной копии документации. Поэтому, используя локальную копию, вы избежите путаницы и разочарования от некорректного использования той или иной возможности, которая, ко всему прочему, может вообще не поддерживаться вашей версией библиотеки.


В начало


Загрузка зависимостей Castor

Castor зависит от множества библиотек:

  • Apache Ant
  • Jakarta Commons
  • JDBC 2.0 Standard Extensions
  • Log4J утилиты для логгирования
  • Apache Xerces XML-парсер

В этот список вошли только библиотеки, необходимые для основных операций. Если же вы хотите скомпилировать Castor, запустить примеры и тесты или внести какие-то изменения, то вам понадобится гораздо больше. Все эти библиотеки должны находиться в classpath при работе с Castor.

Трудный путь

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

Легкий путь

К счастью, есть способ лучше. Вернитесь на страницу загрузки Castor, найдите стабильный релиз и выберите другой пакет для скачивания: Full SVN snapshot: All sources, docs, and 3rd party libraries (big). Он помечен как "big" (большой), но в нем всего 10 МБ (сущий пустяк в мире DSL и кабельного интернета). Скачайте и распакуйте этот архив, его содержимое должно выглядеть как на рисунке 4.


Рисунок 4. Полное содержимое последней версии Castor в SVN
This biggest download set has     everything that Castor offers -- including dependencies!

Если вы откроете папку lib/, то увидите множество JAR-файлов. Это и есть библиотеки, необходимые для работы Castor.

Место для новых библиотек

Создайте новую папку либо там, куда вы скачали дистрибутив Castor, либо где-то рядом, и переместите туда все JAR-файлы зависимостей. Например:

[bmclaugh:~] cd /usr/local/java
[bmclaugh:/usr/local/java] ls
castor-1.1.2.1  xalan-j_2_7_0
[bmclaugh:/usr/local/java] cd castor-1.1.2.1/
[bmclaugh:/usr/local/java/castor-1.1.2.1] ls
CHANGELOG                       castor-1.1.2.1.jar
castor-1.1.2.1-anttasks.jar     doc
castor-1.1.2.1-codegen.jar      jdbc-se2.0.jar
castor-1.1.2.1-ddlgen.jar       jta1.0.1.jar
castor-1.1.2.1-jdo.jar          schema
castor-1.1.2.1-xml.jar
[bmclaugh:/usr/local/java/castor-1.1.2.1] mkdir lib
[bmclaugh:/usr/local/java/castor-1.1.2.1] cd lib
[bmclaugh:/usr/local/java/castor-1.1.2.1/lib] cp ~/downloads/castor-1.1.2.1/lib/*.jar .
[bmclaugh:/usr/local/java/castor-1.1.2.1/lib]

Как видите, я создал папку lib/ внутри каталога Castor и переместил туда все файлы JAR. Теперь Castor готов к использованию.



В начало


Настройка пути к файлам классов

Только JAR-файлы для работы с XML

В данной статьей рассматриваются только вопросы запуска Castor, а также сохранение и восстановление объектов из XML. Поэтому упоминается только необходимый минимум JAR-файлов. В следующих статьях мы поговорим о других возможностях Castor, и тогда нам понадобятся дополнительные библиотеки.

Далее необходимо настроить путь к файлам классов (classpath). Для этого я использую файл .profile в своей системе Mac OS X. Вы можете поступить аналогично, или, если вы работаете в Windows, использовать системную переменную окружения. В любом случае в classpath необходимо добавить следующие JAR-файлы:

  • castor-1.1.2.1.jar (в главном каталоге Castor)
  • castor-1.1.2.1-xml.jar (в главном каталоге Castor)
  • xerces-J-1.4.0.jar (в каталоге, в котором вы разместили зависимости Castor)
  • commons-logging-1.1.jar (в каталоге, в котором вы разместили зависимости Castor)

В качестве примера ниже приведено содержимое моего файла .profile:

export JAVA_BASE=/usr/local/java
export JAVA_HOME=/Library/Java/Home
export XERCES_HOME=$JAVA_BASE/xerces-2_6_2
export XALAN_HOME=$JAVA_BASE/xalan-j_2_7_0
export CASTOR_HOME=$JAVA_BASE/castor-1.1.2.1
export EDITOR=vi

export CASTOR_CLASSES=$CASTOR_HOME/castor-1.1.2.1.jar:
                      $CASTOR_HOME/castor-1.1.2.1-xml.jar:
                      $CASTOR_HOME/lib/xerces-J_1.4.0.jar:
                      $CASTOR_HOME/lib/commons-logging-1.1.jar



export CVS_RSH=ssh

export PS1="[`whoami`:\w] "



export CLASSPATH=$XALAN_HOME/xalan.jar:$XALAN_HOME/xml-apis.jar:
                 $XALAN_HOME/xercesImpl.jar:

                 ~/lib/mclaughlin-xml.jar:$CASTOR_CLASSES:.

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



В начало


Поверка корректности установки

Для начала создадим очень простой класс и напишем утилиту, конвертирующую его в XML и обратно в Java. Это отнюдь не демонстрация всех возможностей Castor, а просто элементарный тест. Мы будем использовать класс CD, показанный в листинге 1. Можете создать файл с этим содержимым, сохранив его под именем CD.java, или загрузить по ссылке в разделе Ресурсы.


Листинг 1. Класс CD для проверки установки Castor
        
package ibm.xml.castor;

import java.util.ArrayList;
import java.util.List;

/** Класс, описывающий CD */
public class CD implements java.io.Serializable {

  /** Название CD */
  private String name = null;

  /** Исполнитель CD */
  private String artist = null;

  /** Список произведений */
  private List tracks = null;

  /** Обязательный конструктор без параметров */
  public CD() {
    super();
  }

  /** Создание нового CD */
  public CD(String name, String artist) {
    super();
    this.name = name;
    this.artist = artist;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public void setArtist(String artist) {
    this.artist = artist;
  }

  public String getArtist() {
    return artist;
  }

  public void setTracks(List tracks) {
    this.tracks = tracks;
  }

  public List getTracks() {
    return tracks;
  }

  public void addTrack(String trackName) {
    if (tracks == null) {
      tracks = new ArrayList();
    }
    tracks.add(trackName);
  }
}

Далее нам понадобится класс для маршаллинга (записи объектов в XML). Код приведен в листинге 2.


Листинг 2. Класс для тестирования маршаллинга
        
package ibm.xml.castor;

import java.io.FileWriter;

import org.exolab.castor.xml.Marshaller;

public class MarshalTester {

  public static void main(String[] args) {
    try {
      CD sessions = new CD("Sessions for Robert J", "Eric Clapton");
      sessions.addTrack("Little Queen of Spades");
      sessions.addTrack("Terraplane Blues");

      FileWriter writer = new FileWriter("cds.xml");
      Marshaller.marshal(sessions, writer);
    } catch (Exception e) {
      System.err.println(e.getMessage());
      e.printStackTrace(System.err);
    }
  }
}

И, наконец, в листинге 3 приведен класс для демаршаллинга (восстановления объектов из XML).


Листинг 3. Класс для тестирования демаршаллинга
        
package ibm.xml.castor;

import java.io.FileReader;
import java.util.Iterator;
import java.util.List;

import org.exolab.castor.xml.Unmarshaller;

public class UnmarshalTester {

  public static void main(String[] args) {
    try {
      FileReader reader = new FileReader("cds.xml");
      CD cd = (CD)Unmarshaller.unmarshal(CD.class, reader);
      System.out.println("CD title: " + cd.getName());
      System.out.println("CD artist: " + cd.getArtist());
      List tracks = cd.getTracks();
      if (tracks == null) {
        System.out.println("No tracks.");
      } else {
        for (Iterator i = tracks.iterator(); i.hasNext(); ) {
          System.out.println("Track: " + i.next());
        }
      }
    } catch (Exception e) {
      System.err.println(e.getMessage());
      e.printStackTrace(System.err);
    }
  }
}

Скомпилируйте эти классы следующим образом:

[bmclaugh:~/Documents/developerworks/castor] javac -d . *.java
Note: CD.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Это предупреждение выдается компилятором Java 5 и выше, сигнализируя о том, что вы не используете параметризованные типы в CD.java. Не волнуйтесь, это не страшно. Теперь можно запустить наш класс, тестирующий работу маршаллера:

[bmclaugh:~/Documents/developerworks/castor] java ibm.xml.castor.MarshalTester

Далее, если вы найдете и посмотрите внутрь файла cds.xml, то увидите следующее:

<?xml version="1.0" encoding="UTF-8"?>
<CD>
  <artist>Eric Clapton</artist>
  <name>Sessions for Robert J</name>
  <tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:type="java:java.lang.String">Little Queen of Spades</tracks>
  <tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:type="java:java.lang.String">Terraplane Blues</tracks>
</CD>

Формат файла не очень удобочитаемый, но, как видите, все данные объектов, созданные в MarshalTester, присутствуют в XML.

Осталось проверить, что этот документ XML можно преобразовать обратно в Java-объекты. Запустите проверку демаршаллинга:

[bmclaugh:~/Documents/developerworks/castor] java ibm.xml.castor.UnmarshalTester 
CD title: Sessions for Robert J
CD artist: Eric Clapton
Track: Little Queen of Spades
Track: Terraplane Blues

Вывод говорит сам за себя. Если Castor выводит эту информацию, это означает, что он успешно нашел и прочитал XML-файл и преобразовал его в Java-классы.

Если у вас все получилось, а именно: такой же файл cds.xml и вывод UnmarshalTester, то можно считать, что Castor установлен корректно. Несмотря на то, что мы не сделали ничего особенно сложного, этого достаточно, чтобы убедиться, что все JAR-файлы находятся на своих местах и Castor готов к работе.



В начало


Что дальше?

Итак, у нас есть рабочая среда Castor. Более того, из листингов 1, 2 и 3 вы уже должны были получить базовое представление о том, как работает Castor. Попробуйте поэкспериментировать с сохранением и восстановлением объектов самостоятельно. В следующей статье мы подробнее поговорим о возможностях Castor и о том, как использовать файлы отображения. А пока просто получайте удовольствие.




В начало


Загрузка

ОписаниеИмяРазмерМетод загрузки
Примеры исходного кода на Javax-xjavacastor1/castor1_source_code.zip2КБHTTP
Скомпилированные примеры кода на Javax-xjavacastor1/castor1_compiled_code.zip3KБHTTP
Информация о методах загрузки


Ресурсы

Научиться

Получить продукты и технологии
  • Книга "Java и XML, 3-е издание" (Бретт Маклафлин и Джастин Эдельсон (Justin Edelson), O'Reilly Media, Inc.) описывает все аспекты XML, с начала и до конца, включая вопросы связывания с данными и отображения. (EN)

  • В более ранней книге "Java и связывание с XML-данными" (Бретт Маклафлин, O'Reilly Media, Inc.) приводится информация о Castor и общих принципах связывания с данными. (EN)

  • Если вы хотите получить платную поддержку Castor, то ознакомьтесь со списком коммерческих услуг. (EN)

  • Сертификация по XML корпорации IBM: Узнайте, как стать сертифицированным разработчиком IBM в области XML и связанных с ним технологий. (EN)


Обсудить


Об авторе

Бретт МакЛафлин (Brett McLaughlin) работает с компьютерами со времен Logo (помните маленький треугольник?). За последние несколько лет он стал одним из наиболее известных авторов и программистов сообщества по технологиям Java и XML. Он работал в Nextel Communications над реализацией сложных корпоративных систем, в Lutris Technologies - фактически над созданием серверов приложений, - а с недавнего времени - в O'Reilly Media, Inc., где продолжает писать и редактировать важные и содержательные книги. Его готовящаяся книга "Head Rush Ajax" продолжает отмеченный наградами инновационный подход "Вперед головой" применительно к изучению Ajax. Его недавняя книга Java 1.5 Tiger: Заметки разработчика является первой доступной книгой по новейшей версии технологии Java, а его классическая книга Java и XML остается одной из наиболее авторитетных работ по применению технологий XML в языке Java.




Выскажите мнение об этой странице


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



 


 


 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.
    IBM в России Конфиденциальность Контакты