В этой главе рассматриваются использование NDB Cluster с MySQL NDB Cluster Connector for Java, также известном как ClusterJ.
ClusterJ это API высокого уровня, который подобен в стиле и понятиях структурам вроде Hibernate и JPA. Поскольку ClusterJ не использует MySQL Server, чтобы получить доступ к данным в кластере NDB, это может выполнить некоторые операции намного более быстро, чем можно сделать, используя JDBC. ClusterJ поддерживает первичный ключ и операции по уникальному ключу, это не поддерживает операции мультитаблиц, включая соединения.
Эта секция предоставляет концептуальный обзор архитектуры API для использования MySQL NDB Cluster Connector for Java.
MySQL NDB Cluster Connector for Java, он же ClusterJ, это Java API для написания приложений для NDB Cluster. Это один среди различных путей доступа и стилей доступа к данным в NDB Cluster. раздел 4.1.2 описывает каждый API более подробно.
MySQL NDB Cluster Connector for Java включен во все исходные тексты и двоичные пакеты NDB Cluster. Сборка MySQL NDB Cluster Connector for Java из исходных текстов может быть сделана как часть сборки NDB Cluster, однако, это может также быть построено с Maven.
NDB Cluster определяется как один или несколько MySQL
Server, обеспечивающих доступ к механизму хранения
NDBCLUSTER
то есть, к ряду узлов данных NDB Cluster (процесс
ndbd).
Есть три главных пути доступа из Java к
NDBCLUSTER
:
JDBC и mysqld. JDBC работает, посылая SQL-операторы в MySQL Server и возвращая наборы результатов. Используя JDBC, необходимо написать SQL, справиться со связью и скопировать любые данные из набора результатов, которые вы хотите использовать в вашей программе в качестве объектов. Внедрение JDBC, чаще всего используемое с MySQL Server, это MySQL Connector/J.
Java Persistence API (JPA) и JDBC. JPA использует JDBC, чтобы соединиться с MySQL Server. В отличие от JDBC, JPA обеспечивает представление объекта данных в базе данных.
ClusterJ.
ClusterJ использует мост
JNI NDB API для прямого доступа к
NDBCLUSTER
.
Это использует стиль доступа к данным, который основан на модели объекта
области, подобной во многих отношениях используемому JPA. ClusterJ не зависит
от MySQL Server для доступа к данным.
Эти пути показывают в следующей диаграмме стека API:
Рис. 4.1. Пути доступа Java к NDB
JDBC и mysqld. Connector/J обеспечивает стандартный доступ через драйвер MySQL JDBC. Используя Connector/J, приложения JDBC могут быть написаны, чтобы работать с сервером MySQL, действующим как узел SQL кластера NDB, почти таким же способом, как другие приложения Connector/J работают с любым другим случаем MySQL Server.
См. раздел 4.2.3.
ClusterJ.
ClusterJ это обычный Java Connector для
NDBCLUSTER
(или
NDB
), механизма хранения для
NDB Cluster, в стиле
Hibernate,
JPA и
JDO. Как другие структуры, ClusterJ использует
Data Mapper pattern, в котором данные представляются как
объекты области, отдельные от бизнес-логики, отображая классы Java
к таблицам базы данных, сохраненным в
NDBCLUSTER
.
NDBCLUSTER
часто упоминается
(в документации MySQL и в других местах) просто как
as NDB
. Термины
NDB
и NDBCLUSTER
синонимичны и можно использовать также
ENGINE=NDB
или
ENGINE=NDBCLUSTER
в запросе
CREATE TABLE
.
ClusterJ не должен соединяться с процессом
mysqld, имея прямой доступ
к NDBCLUSTER
с использованием
моста JNI, который включен в динамическую библиотеку
libnbdclient
. Однако в отличие от JDBC, ClusterJ
не поддерживает создание таблицы и другие операции по определению данных, они
должны быть выполнены некоторыми другими средствами, такими как JDBC или
клиент mysql.
Кроме того, ClusterJ ограничивается запросами на единственной таблице
и не поддерживает отношения или наследование, необходимо использовать другой
вид путей доступа, если вы нуждаетесь в поддержке для тех
особенностей в ваших запросах.
Эта секция обсуждает ClusterJ API и объектную модель представления данных, обработанных приложением.
Application Programming Interface.
ClusterJ API зависит от 4 главных интерфейсов:
Session
,
SessionFactory
,
Transaction
и
QueryBuilder
.
Иентрфейс Session. Весь доступ к данным в кластере NDB сделан в
контексте сессии. Иентрфейс
Session
представляет отдельную связь пользователя с NDB Cluster.
Это содержит методы для следующих операций:
Нахождение постоянных экземпляров первичным ключом.
Создание, обновление и удаление постоянных экземпляров.
Получение конструктора запросов (см. com.mysql.clusterj.query.QueryBuilder).
Получение текущей транзакции (см. com.mysql.clusterj.Transaction).
Интерфейс SessionFactory. Сессии получены из
SessionFactory
,
где, как правило, есть единственный экземпляр для каждого NDB Cluster,
где вы хотите получить доступ из Java VM.
SessionFactory
хранит конфигурационную
информацию о кластере, такую как имя хоста и номер порта сервера управления
кластером NDB. Это также хранит параметры относительно того, как соединиться
с кластером, включая задержки связи. Для получения дополнительной информации
о SessionFactory и его использовании в ClusterJ см.
здесь.
Интерфейс Transaction. Транзакциями не управляет интерфейс
Session
, как другие современные среды разработки
приложения, ClusterJ отделяет управление транзакциями от других методов.
Операционное установление границ могло бы быть сделано автоматически
контейнером или в фильтре сервлета веб-сервера. Удаление операционных методов
завершения из Session
облегчает это разделение проблем.
Интерфейс
Transaction
поддерживает стандартные начало,
передачу и отмену, требуемые транзакционной базой данных. Кроме того, это
позволяет пользователю отметить транзакцию, как "для обратной перемотки",
что позволяет компоненту, который не ответственен за завершение транзакции,
указать, что из-за приложения или ошибки базы данных транзакцию нельзя
заканчивать как обычно.
Интерфейс QueryBuilder. Интерфейс
QueryBuilder
позволяет построить запросы критериев динамично, используя свойства модели
объекта области в качестве элементов моделирования запроса.
Сравнения между параметрами и значениями столбцов базы данных могут быть
определены в операциях и отношениях. Эти сравнения могут быть объединены,
используя методы, соответствующие булевым операторам AND, OR и NOT.
Сравнение с NULL
также поддерживается.
Модель данных. ClusterJ обеспечивает доступ к данным в кластере NDB, используя объекты области, подобные во многих отношениях модели данных JPA.
В ClusterJ у отображения объекта области есть следующие особенности:
Все таблицы отображают к постоянным интерфейсам. Для каждой
таблицы NDB
в кластере ClusterJ
использует один или несколько интерфейсов. Во многих случаях единственный
интерфейс используется, но для случаев, где различные колонки необходимы
различным частям приложения, многократные интерфейсы могут быть отображены
к той же самой таблице.
Однако сами классы не постоянные.
Пользователи отображают подмножество колонок к постоянным свойствам в интерфейсах. Таким образом все свойства отображаются к колонкам, однако, не все колонки обязательно отображают к свойствам.
Все имена свойств ClusterJ по умолчанию имена столбцов. Интерфейс обеспечивает методы получателя и методы установщика для каждого значения с предсказуемыми соответствующими именами методов.
Аннотации на интерфейсы определяют отображения.
Пользовательская точка зрения на среду приложения и объекты области иллюстрирована в следующей диаграмме, которая показывает логические отношения среди элементов моделирования интерфейсов ClusterJ:
Рис. 4.2. Пользовательская точка зрения ClusterJ на приложение и окружающую среду
SessionFactory
формируется объектом,
который, возможно, был загружен из файла или построен динамично приложением,
используя некоторые другие средства (см.
раздел 4.2.2.1).
Приложение получает экземпляры Session
из SessionFactory
с самое большее одним
потоком, работающим с Session
за один раз.
Поток может управлять многими экземплярами
Session
, если есть требование многократных
связей с базой данных.
У каждой сессии есть своя собственная коллекция объектов области, каждый из которых представляет данные из одной строки в базе данных. Объекты области могут представлять данные в любом из следующих статусов:
Новая, еще не сохранена в базе данных.
Получена из от базы данных, доступна приложению.
Обновлена, сохранена назад в базу данных.
Удалена из базы данных.
Эта секция предоставляет основную информацию о сборке и управлении JAVA-приложениями, используя MySQL NDB Cluster Connector for Java (ClusterJ).
Эта секция обсуждает, как получить ClusterJ.
Получение и установка MySQL NDB Cluster Connector for Java. Можно получить новый выпуск NDB Cluster, который включает ClusterJ, с downloads.mysql.com. Инструкции по установке, данные в NDB Cluster Installation также устанавливают ClusterJ.
Сборка и установка MySQL
NDB Cluster Connector for Java. Можно собрать и установить ClusterJ как
часть сборки NDB Cluster, которая всегда требует, чтобы вы
настроили сборку, используя опции CMake
WITH_NDBCLUSTER_STORAGE_ENGINE
(или псевдоним
WITH_NDBCLUSTER
).
Типичная команда CMake для формирования NDB Cluster с поддержкой ClusterJ:
cmake .. -DWITH_BOOST=/usr/local/boost_1_59_0 -DWITH_NDBCLUSTER=ON
Опция WITH_NDB_JAVA
позволена по умолчанию, что означает, что ClusterJ будет построен вместе с
кластером NDB вышеупомянутой командой. Однако, если CMake не может найти
местоположение Java на вашей системе, процесс конфигурации собирается
потерпеть неудачу, используйте опцию
WITH_CLASSPATH
, чтобы
обеспечить путь к классу Java в случае необходимости. Кроме того, потому что
ClusterJ использует набор символов ucs2
для внутренней памяти и ClusterJ не может быть построен без него, если вы
когда-нибудь используете опцию CMake
WITH_EXTRA_CHARSETS
и измените значение от настройки по умолчанию
all
, необходимо удостовериться, что
ucs2
определяется в списке наборов символов,
переданном опции. Для получения информации о других опциях CMake, которые
могут использоваться, см.
option_cmake_with_ndbcluster.
После формирования сборки с CMake выполните make и make install как вы обычно сделали бы, чтобы собрать и установить программное обеспечение NDB Cluster.
Файлы jar MySQL NDB Cluster Connector for Java.
После установки эти файлы jar ClusterJ могут быть найдены в папке
share/java
в каталоге установки
MySQL (/usr/local/mysql
по
умолчанию для Linux):
clusterj-api-
: Это файл времени компиляции, требуемый
для компилирования кода приложения ClusterJ.version
.jar
clusterj-
: Это библиотека времени выполнения,
требуемая для выполнения приложений ClusterJ.version
.jar
clusterj-test-
: Это набор тестов ClusterJ, требуемый для
тестирования вашей установки ClusterJ.
version
.jar
Исходные файлы для ClusterJ формируются как проекты Maven, позволяя легкую компиляцию и установку, используя Maven. Предположим, что вы уже собрали и поставили NDB Cluster и ClusterJ, согласно инструкциям выше. Тогда надо:
Добавьте путь к файлу для папки, которая содержит
библиотеку клиента NDB (libndbclient.so
)
как свойство ndbclient.lib
к вашему местному
файлу Maven settings.xml
(находится в местном
хранилище Maven, которое обычно является
/home/
в Linux). Библиотека клиента должна быть найдена в каталоге
username
/.m2lib
каталога установки NDB Cluster.
Если файла settings.xml
не существует в вашем
местном хранилище Maven, создайте его. Это простой файл
settings.xml
, содержащий свойство
ndbclient.lib
:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>jni-library</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<ndbclient.lib>/NDB_Cluster_installation_directory
/lib/</ndbclient.lib>
</properties>
</profile>
</profiles>
</settings>
Пойдите в каталог сборки, который вы создали, собирая кластер NDB
(bld
в образце
здесь) и затем в подкаталог
storage/ndb/clusterj
в нем. Выполните скрипт
mvn_install_ndbjtie.sh
:
./mvn_install_ndbjtie.sh
Это устанавливает ndbjtie.jar
,
который предоставляет слой JNI ClusterJ и требуется для сборки CluterJ.
Установите ClusterJ с Maven выполнением
mvn install в каталоге
storage/ndb/clusterj
:
mvn install
Это заставляет ClusterJ быть построенным с файлами
.jar
, установленными в местном хранилище Maven.
Можно пропустить тесты, которые происходят в конце процесса установки,
добавляя опцию skipTests
:
mvn install -DskipTests
Это препятствует тому, чтобы ваша установка терпела неудачу, потому что вы еще не настроили тестовую среду.
Поскольку исходные файлы для ClusterJ формируются как проекты Maven, можно легко импортировать их в любимые позволенные Maven IDE, настроить их и восстановить их по мере необходимости, выполнив эти шаги:
Удостоверьтесь, что ваша поддержка IDE для Maven включена. Вы, возможно, должны были бы установить плагин Maven для цели.
Следуйте за шагами 1 и 2 здесь, которые делают источник ClusterJ готовым использоваться с Maven.
Импортируйте ClusterJ как проект Maven.
В NetBeans:
В главном меню выберите Open Project появляется.
> . Диалоговое окноВ окне Open Project перейдите к папке
storage/ndb
под каталогом сборки (см. шаг 2
здесь), выберите каталог
clusterj
, который имеет символ Maven
() и нажмите
.
Проект
ClusterJ Aggregate
импортируется с
ClusterJ API
, ClusterJ
Core
, ClusterJ Test Suite
,
ClusterJ Tie
и
ClusterJ Unit Test Framework
как подпроекты
в Modules.
Работайте с проектами ClusterJ как с любыми другими проектами Maven в NetBeans. Любые изменения исходного кода входят в исходное дерево, из которого вы собрали кластер NDB, чтобы создать каталог сборки.
В Eclipse:
В главном меню выберите Import.
> . Откроется окноВ окне Import выберите > для импорта и нажмите . Появится окно Import Maven Projects.
В окне Import Maven Projects перейдите
в каталог storage/ndb
под каталогом сборки
(шаг 2 здесь), выберите каталог
clusterj
и нажмите
. Проект
clusterj-aggregate
, а также его подпроекты
its subprojects clusterj-api
,
clusterj-core
,
clusterj-test
,
clusterj-tie
и
clusterj-unit
появятся в диалоговом окне
Maven Projects. Нажмите
и
.
Все проекты ClusterJ импортируются.
Работайте с проектами ClusterJ как с любыми другими проектами Maven в Eclipse.
Эта секция предоставляет основную информацию для написания, компилирования и выполнения приложений с ClusterJ. Для документации API ClusterJ см. раздел 4.3.
Требования. ClusterJ требует Java 1.7 или 1.8. NDB Cluster должен быть собран с поддержкой ClusterJ ; модули NDB Cluster, поставляемые Oracle, включают поддержку ClusterJ. Если вы строите кластер NDB сами, см. здесь для получения информации о настройке, чтобы позволить поддержку ClusterJ.
Чтобы собрать приложения, которые используют ClusterJ, вы должны иметь
файл clusterj-api
jar в вашем classpath или
использовать менеджер по зависимости Maven, чтобы установить и формировать
библиотеку ClusterJ в вашем проекте.
Чтобы запустить приложения, которые используют ClusterJ, вам нужен файл
jar clusterj
, кроме того,
libndbclient
должен быть в каталоге,
определенном by java.library.path
.
Раздел 4.2.2.1
предоставляет больше информации об этих требованиях.
В этой секции мы обсуждаем, как запустить приложения ClusterJ и среду приложения ClusterJ.
Выполнение приложения ClusterJ. Все файлы ClusterJ jar
обычно находятся в share/mysql/java/
в каталоге
установки MySQL. Выполняя приложение ClusterJ, необходимо установить
classpath на эти файлы. Кроме того, необходимо установить переменную
java.library.path
, чтобы указать на каталог,
содержащий библиотеку ndbclient
, обычно это
lib/mysql
в каталоге установки MySQL.
Таким образом вы могли бы выполнить программу ClusterJ
MyClusterJApp
способом, подобным тому,
что показан здесь:
shell> java -classpath /usr/local/mysql/share/mysql/java/clusterj.jar \
-Djava.library.path=/usr/local/mysql/lib MyClusterJApp
Точные местоположения файлов ClusterJ jar и
libndbclient
зависят от того, как программное
обеспечение NDB Cluster было установлено. Посмотрите
Installation Layouts.
ClusterJ поощряет вас использовать различные файлы jar
во время компиляции и во время выполнения. Это должно удалить способность
запросов получить доступ к экспонатам внедрения экземплярно.
ClusterJ предназначается, чтобы быть независимым от версии программного
обеспечения NDB Cluster, тогда как слой ndbclient
определен для версии. Это позволяет поддержать стабильный API, так,
чтобы запросы, написанные для него, используя данную версию NDB, продолжили
работать после модернизации кластера к новой версии.
Получение SessionFactory и Session.
SessionFactory
это источник всех сессий
ClusterJ, которые используют данный NDB Cluster. Обычно есть только одна
SessionFactory
на NDB Cluster на
Java Virtual Machine.
SessionFactory
может формироваться, устанавливая одно или более свойств.
Предпочтительный способ сделать это, поместить их в файл:
com.mysql.clusterj.connectstring=localhost:1186 com.mysql.clusterj.database=mydb
Название файла произвольно, однако, в соответствии с соглашением, такие
файлы называют с расширением .properties
.
Для приложений ClusterJ обычно файл называют
clusterj.properties
.
После редактирования и сохранения файл, можно загрузить его содержание в
экземпляр Properties
:
File propsFile = new File("clusterj.properties"); InputStream inStream = new FileInputStream(propsFile); Properties props = new Properties(); props.load(inStream);
Также возможно установить эти свойства непосредственно без использования файла:
Properties props = new Properties(); props.put("com.mysql.clusterj.connectstring", "localhost:1186"); props.put("com.mysql.clusterj.database", "mydb");
Как только свойства были установлены и загружены (используя
любой из методов), можно получить
SessionFactory
и затем от этого экземпляр
Session
. Для этого вы используете метод
SessionFactory
getSession()
:
SessionFactory factory = ClusterJHelper.getSessionFactory(props); Session session = factory.getSession();
Обычно достаточно установить и загрузить свойства
com.mysql.clusterj.connectstring
и
com.mysql.clusterj.database
(и эти свойства, наряду с
com.mysql.clusterj.max.transactions
,
не могут быть изменены после старта
SessionFactory
).
Для полного списка доступных свойств
SessionFactory
и значений см.
com.mysql.clusterj.Constants.
Экземпляры
Session
не должны быть разделены среди потоков. Каждый поток в
вашем запросе должен использовать свой собственный экземпляр
Session
.
Для
com.mysql.clusterj.connectstring
мы используем по умолчанию строку подключения NDB Cluster
localhost:1186
(см.
NDB Cluster Connection Strings). Для значения
com.mysql.clusterj.database
мы используем
mydb
в этом примере, но это значение
может быть названием любой базы данных, содержащей таблицы
NDB
. Для листинга всех
свойств
SessionFactory
, которые могут быть
установлены этим способом, см.
com.mysql.clusterj.Constants.
Обработка ошибок и повторное соединение. Ошибки, которые происходят, используя ClusterJ, должны быть обработаны приложением с обработчиком ошибки. Он должен быть в состоянии обнаружить и различать три типа ошибок и обращаться с ними соответственно:
Normal errors: Это ошибки на уровне приложения (например, двойной ключ, ограничение внешнего ключа или тайм-аут). Они должны быть обработаны специализированными способами, и, если решено, приложение может продолжить транзакцию.
Unexpected errors: Это отказы работать с кластером, которые не могут составляться условиями приложения, но неокончательны. Приложение должно закрыть сессию ClusterJ и вновь открыть новую.
Connectivity errors: Это такие ошибки как 4009 и 4010, которые указывают на сетевой сбой. Есть два возможных сценария, в зависимости от того, была ли автоматическая опция повторного соединения (доступно для NDB Cluster 7.5.7, 7.6.3 и для более поздних выпусков в сериях 7.5 и 7.6) включена:
Automatic reconnection is enabled:
опция активирована, когда свойство связи
com.mysql.clusterj.connection.reconnect.timeout
было установлено в положительное число, которое определяет тайм-аут
повторного соединения в секундах.
Когда ClusterJ обнаруживает разъединение с кластером NDB, он изменяет
State
в
SessionFactory
с OPEN
на
RECONNECTING
,
SessionFactory
тогда ждет от приложения закрытия всех сессий, а затем пытается повторно
подключить приложение к кластеру NDB, закрывая все связи в пуле связи и
воссоздавая пул, используя его оригинальные свойства.
После восстановления всех связей, State
в
SessionFactory
снова
OPEN
и приложение может теперь получить сессии.
Метод SessionFactory.getState()
вернет
State
из
SessionFactory
,
который OPEN
,
RECONNECTING
или
CLOSED
. Попытка получить сессию, когда
State
не
OPEN
приведет к
ClusterJUserException
с сообщением
Session factory is not open.
Если приложение не закрывает все сессии к концу периода тайм-аута,
определенного
com.mysql.clusterj.connection.reconnect.timeout
,
SessionFactory
завершает любые открытые
сессии насильственно (что могло бы привести к потере ресурсов), затем делает
попытку повторного соединения.
Автоматическое повторное соединение не
позволено: Это когда свойство связи
com.mysql.clusterj.connection.reconnect.timeout
не было установлено или установлено в ноль (это также имеет место для более
старых выпусков NDB Cluster, которые не поддерживают автоматическую
функцию повторного соединения).
ClusterJ не пытается снова соединиться с кластером NDB, как только связь
потеряна. Приложение должно закрыть все сессии и затем перезапустить
SessionFactory
. Рестарт
SessionFactory
может быть автоматической функцией или ручным вмешательством.
В любом случае код должен ждать, пока все сессии не были закрыты (то есть,
метод
getConnectionPoolSessionCounts() в интерфейсе
SessionFactory
вернет нули для всех объединенных связей). Тогда
SessionFactory
может быть закрыт и вновь открыт, и приложение
сможет получить сессии снова.
Вместо того, чтобы активировать опцию и ждать ClusterJ, чтобы обнаружить
разъединение и делать попытку повторного соединения, у вас это может также
сделать само приложение, начиная процесс повторного соединения после
обнаружения ошибки связи, вызывая метод
SessionFactory.reconnect(int timeout)
,
это вызывает процесс повторного соединения, описанный выше, но использует
параметр timeout
метода
reconnect()
как ограничение по времени для того,
чтобы закрыть все открытые сессии.
Журналирование. ClusterJ использует
Java logging. Вот некоторые настройки по умолчанию для
регистрации ClusterJ, которые определяются в файле
logging.properties
и могут быть изменены там:
Регистрация уровня установлена в
INFO
для всех классов.
Используется обработчик
java.util.logging.FileHandler
.
Уровень по умолчанию для
java.util.logging.FileHandler
=
FINEST
Используется java.util.logging.SimpleFormatter
для обработчика.
Файлы журнала хранятся в каталоге
target
в соответствии с текущим рабочим
каталогом и имена файлов находятся, обычно, в образце
log
,
где Num
Num
это уникальное число для
решения конфликтов имени файла (см. документацию Java на
java.util.logging.FileHandler
).
Файл logging.properties
расположен по умолчанию в текущем рабочем каталоге, но местоположение может
быть изменено, определив системное свойство
java.util.logging.config.file
,
когда вы запускаете Java.
Главная цель ClusterJ состоит в том, чтобы читать, писать и обновлять
данные о строке в существующей базе данных, вместо того, чтобы выполнять
DDL. Можно создать таблицу employee
, которая
соответствует этому интерфейсу, используя следующий
CREATE TABLE
, в клиентском
приложении MySQL, таком как
mysql.
CREATE TABLE employee (id INT NOT NULL PRIMARY KEY, first VARCHAR(64) DEFAULT NULL, last VARCHAR(64) DEFAULT NULL, municipality VARCHAR(64) DEFAULT NULL, started DATE DEFAULT NULL, ended DATE DEFAULT NULL, department INT NOT NULL DEFAULT 1, UNIQUE KEY idx_u_hash (last,first USING HASH), KEY idx_municipality (municipality)) ENGINE=NDBCLUSTER;
Теперь, когда таблица была составлена в кластере NDB, можно отобразить интерфейс ClusterJ к ней, используя аннотации. Мы показываем вам, как сделать это в следующей секции.
В ClusterJ (как в JPA) аннотации используются, чтобы описать, как интерфейс отображен к таблицам в базе данных. Аннотируемый интерфейс похож на это:
@PersistenceCapable(table="employee") @Index(name="idx_uhash") public interface Employee { @PrimaryKey int getId(); void setId(int id); String getFirst(); void setFirst(String first); String getLast(); void setLast(String last); @Column(name="municipality") @Index(name="idx_municipality") String getCity(); void setCity(String city); Date getStarted(); void setStarted(Date date); Date getEnded(); void setEnded(Date date); Integer getDepartment(); void setDepartment(Integer department); }
Этот интерфейс отображает семь столбцов: id
,
first
, last
,
municipality
,
started
, ended
и
department
. Аннотация
@PersistenceCapable(table="employee")
используется, чтобы позволить ClusterJ знать, которую таблицу базы данных
Employee
отобразить (в этом случае таблицу
employee
). Аннотация
@Column
используется потому, что имя свойства
city
, подразумеваемое методами
getCity()
и
setCity()
, отличается от отображенного имени
столбца municipality
. Аннотации
@PrimaryKey
и
@Index
сообщают ClusterJ об индексах в
таблице базы данных.
Внедрение этого интерфейса создается динамично ClusterJ во время
выполнения. Когда вызван метод
newInstance()
, ClusterJ создает класс реализации для
интерфейса Employee
,
этот класс хранит значения во внутреннем множестве объекта.
ClusterJ не требует аннотации для каждого признака. ClusterJ автоматически обнаруживает первичные ключи таблиц, в то время как есть аннотация в ClusterJ, чтобы разрешить пользователю описывать первичные ключи таблицы (см. предыдущий пример), когда определено, это в настоящее время игнорируется. Надлежащее использование этой аннотации для генерации схем от интерфейсов модели объекта области, но это еще не поддерживается.
Сами аннотации должны быть импортированы из ClusterJ API. Они могут быть
найдены в пакете
com.mysql.clusterj.annotation
и
импортированы примерно так:
import com.mysql.clusterj.annotation.Column; import com.mysql.clusterj.annotation.Index; import com.mysql.clusterj.annotation.PersistenceCapable; import com.mysql.clusterj.annotation.PrimaryKey;
В этой секции мы описываем, как выполнить операции, основные для приложений ClusterJ, включая следующие:
Создание новых экземпляров, урегулирование их свойств и сохранение их в базе данных.
Выполнение поисков первичного ключа.
Обновление существующих строк и сохранение изменений базы данных.
Удаление строк из базы данных.
Построение и выполнение запросов, чтобы принести набор строк, соответствующих определенным критериям от базы данных.
Создание новых строк. Чтобы вставить новую строку в таблицу, сначала
создайте новый экземпляр Employee
.
Это может быть достигнуто, вызывая метод Session
newInstance()
:
Employee newEmployee = session.newInstance(Employee.class);
Установите свойства экземпляра Employee
соответствующие желаемым столбцам таблицы
employee
. Например, следующее задаст свойства
id
, firstName
,
lastName
и started
.
emp.setId(988); newEmployee.setFirstName("John"); newEmployee.setLastName("Jones"); newEmployee.setStarted(new Date());
Как только вы удовлетворены изменениями, можно сохрангить экземпляр
Employee
, вставляя новую строку, содержащую
требуемые значения, которые будут вставлены в таблицу
employee
:
session.persist(newEmployee);
Если autocommit=on и строка с тем же самым
id
уже есть в базе данных, метод
persist()
терпит неудачу. Если autocommit=off
и строка с тем же самым id
уже есть в базе
данных, метод persist()
достигает цели, но
последующий commit()
терпит неудачу.
Если вы хотите, чтобы данные были сохранены
даже при том, что строка уже существует, используйте метод
savePersistent()
вместо
persist()
. Метод
savePersistent()
обновляет существующий экземпляр или создает новый экземпляр по мере
необходимости, не бросая исключение.
Сначения, которые вы не определили, снабжены их значениями по умолчанию
(0
для целочисленных типов,
0.0
для числовых типов и
null
для ссылочных типов).
Поиски первичного ключа. Можно найти существующую строку в таблице
NDB
, используя метод
Session
find()
:
Employee theEmployee = session.find(Employee.class, 988);
Это эквивалентно запросу на поиск первичного ключа
SELECT * FROM employee WHERE id = 988
.
ClusterJ также поддерживает составные первичные ключи. Метод
find()
может взять объектный массив в
качестве ключа, где компоненты массива используются, чтобы представлять
столбцы первичного ключа в том порядке, в каком они были объявлены.
Кроме того, запросы оптимизированы, чтобы обнаружить, определяются ли столбцы
первичного ключа как часть условий запроса, и если это так, поиск первичного
ключа или просмотр выполняются как стратегия осуществления запроса.
ClusterJ также поддерживает btree и уникальные hash-индексы. Как с первичными ключами, если запрос определяет значения для областей упорядоченного или уникального индекса, ClusterJ оптимизирует запрос, чтобы использовать индекс для просмотра таблицы.
NDB Cluster автоматически размазывает данные таблицы на многократные узлы данных. Для некоторых операций более эффективно сказать кластеру, на котором узле данных физически расположены данные и выполнять транзакцию на том узле данных. ClusterJ автоматически обнаруживает ключ разделения, если операция может быть оптимизирована для определенного узла данных, ClusterJ автоматически начинает транзакцию на том узле.
Обновите и сохраните строку. Чтобы обновить значение данного столбца
в строке, которую мы просто получили как
theEmployee
, используйте метод
set*()
, имя которого соответствует названию того
столбца. Например, чтобы обновить дату
started
для
Employee
, используйте метод
Employee
setStarted()
:
theEmployee.setStarted(new Date(getMillisFor(2010, 01, 04)));
Для удобства мы используем в этом примере метод
getMillisFor()
, который определяется как
показано здесь в файле
AbstractClusterJModelTest.java
(лежит в
каталоге
storage/ndb/clusterj/clusterj-test/src/main/java/testsuite/clusterj
исходного дерева NDB Cluster):
/** Convert year, month, day into milliseconds after the Epoch, UTC. * Set hours, minutes, seconds, and milliseconds to zero. * @param year the year * @param month the month (0 for January) * @param day the day of the month * @return */ protected static long getMillisFor(int year, int month, int day) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.DATE, day); calendar.set(Calendar.HOUR, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); long result = calendar.getTimeInMillis(); return result; }
Посмотрите обозначенный файл для получения дополнительной информации.
Можно обновить дополнительные столбцы, призвав другие методы установщики
Employee
:
theEmployee.setDepartment(3);
Чтобы сохранить измененную строку назад в базу данных NDB Cluster,
используйте метод Session
updatePersistent()
:
session.updatePersistent(theEmployee);
Удаление строк.
Можно удалить единственную строку, используя метод
deletePersistent()
из Session
. В этом примере мы находим
сотрудника, ID которого равняется 13, затем удаляем эту строку из таблицы
employee
:
Employee exEmployee = session.find(Employee.class, 13); session.deletePersistent(exEmployee);' System.out.println("Deleted employee named " + exEmployee.getFirst() + " " + exEmployee.getLast() + ".");
Там также существует метод для удаления многократных строк, который предоставляет две возможности:
Удалите все строки из таблицы.
Удалите произвольную коллекцию строк.
Оба вида многострочных удалений могут быть выполнены, используя метод
deletePersistentAll()
.
Первый вариант
этого метода действует на Class
.
Например, следующий запрос удаляет все строки из таблицы
employee
и вернет количество удаленных строк,
как показано здесь:
int numberDeleted = session.deletePersistentAll(Employee); System.out.println("There used to be "+ numberDeleted + " employees, but now there are none.");
Вызов deletePersistentAll()
эквивалентно
SQL-оператору DELETE FROM employee
в клиенте
mysql.
deletePersistentAll()
может также
использоваться, чтобы удалить коллекцию строк, как показано в этом примере:
// Assemble the collection of rows to be deleted... List<Employee> redundancies = new ArrayList<Employee> (); for (int i = 1000; i < 2000; i += 100) { Employee redundant = session.newInstance(Employee.class); redundant.setId(i); redundancies.add(redundant); } numberDeleted = session.deletePersistentAll(redundancies); System.out.println("Deleted " + numberDeleted + " rows.");
Нет необходимости найти экземпляры в базе данных прежде, чем удалить их.
Написание запросов.
Интерфейс ClusterJ
QueryBuilder
используется, чтобы создавать запросы. Процесс начинается с получения
экземпляра
QueryBuilder
, который поставляется
текущим
Session
, мы можем тогда получить
QueryDefinition
:
QueryBuilder builder = session.getQueryBuilder(); QueryDomainType<Employee> domain = builder.createQueryDefinition(Employee.class);
Это используется, чтобы установить столбец для сравнения запросом.
Здесь мы показываем, как подготовить запрос, который сравнивает значение
столбца department
с постоянной величиной
8
.
domain.where(domain.get("department").equal(domain.param("department")); Query<Employee> query = session.createQuery(domain); query.setParameter("department", 8);
Чтобы получить следствия запроса, вызовите метод
Query
getResultList()
;
List<Employee> results = query.getResultList();
Возвращаемое значение это
List
, который
можно повторить, чтобы восстановить и обработать строки обычным способом.
Транзакции. Интерфейс
Transaction
может произвольно использоваться
для связанных транзакций с помощью следующих методов:
begin()
: Начните транзакцию.
commit()
: Передайте транзакцию.
rollback()
: Отмените транзакцию.
Также возможно использование
Transaction
чтобы проверять, активна ли транзакция (через
метод
isActive()
), работа с флагом
rollback-only (через методы
getRollbackOnly()
и
setRollbackOnly()
).
Если вы не используете интерфейс Transaction
,
методы в Session
, влияющие на базу данных
(например, persist()
,
deletePersistent()
,
updatePersistent()
),
автоматически приложены в транзакции базы данных.
ClusterJ обеспечивает отображения для всех общих типов БД MySQL к типам Java. Объекты типов Java-примитивов должны быть отображены к nullable столбцам базы данных.
Так как у Явы нет родных unsigned типов данных, столбцов
UNSIGNED
нужно избежать в схемах таблицы,
если это возможно.
Совместимость с отображениями JDBC. ClusterJ осуществляется, чтобы быть совместимым с драйвером JDBC с точки зрения отображения от типов Java до базы данных. Таким образом, если вы используете ClusterJ, чтобы сохранить или восстановить данные, вы получаете то же самую значение, как будто вы использовали драйвер JDBC непосредственно или через JPA.
Следующие таблицы показывают отображения, используемые ClusterJ между общими типами данных Java и типами столбца MySQL. Отдельные таблицы предусмотрены для числовых типов и для типов переменной ширины с плавающей запятой.
Числовые типы. Эта таблица показывает отображения типов в ClusterJ между Java и MySQL:
Таблица 4.1.
Тип данных Java | Тип данных MySQL |
---|---|
boolean ,
Boolean |
BIT(1) |
byte ,
Byte |
BIT(1) to
BIT(8) ,
TINYINT |
short ,
Short |
BIT(1) to
BIT(16) ,
SMALLINT ,
YEAR |
int ,
Integer |
BIT(1) to
BIT(32) ,
INT |
long ,
Long |
BIT(1) to
BIT(64) ,
BIGINT ,
BIGINT UNSIGNED |
float ,
Float |
FLOAT |
double ,
Double |
DOUBLE |
java.math.BigDecimal |
NUMERIC ,
DECIMAL |
java.math.BigInteger |
NUMERIC (precision = 0),
DECIMAL (precision = 0) |
Типы даты и времени. Следующая таблица показывает отображения типов данных даты и времени между Java и MySQL:
Таблица 4.2.
Тип данных Java | Тип данных MySQL |
---|---|
Java.util.Date |
DATETIME ,
TIMESTAMP ,
TIME ,
DATE |
Java.sql.Date |
DATE |
Java.sql.Time |
TIME |
Java.sql.Timestamp |
DATETIME ,
TIMESTAMP |
ClusterJ отображает MySQL
YEAR
в Java-тип
short
(или
java.lang.Short
)
как показано в первой таблице в этой секции.
java.util.Date
представляет дату и время, подобно пути, которым Unix делает это, но с
большей точностью и большим диапазоном. Где Unix представляет момент времени
как 32-битное число со знаком секунд, начиная с Unix Epoch (01 January 1970),
Java использует 64-битное число со знаком миллисекунд, начиная с Epoch.
Типы переменной ширины. Следующая таблица показывает отображения ClusterJ между типами Java и MySQL:
Таблица 4.3.
Тип данных Java | Тип данных MySQL |
---|---|
String |
CHAR ,
VARCHAR ,
TEXT |
byte[] |
BINARY ,
VARBINARY ,
BLOB |
Никакие двоичные данные не отображаются при переходе от MySQL
BINARY
,
VARBINARY
или
BLOB
к байтовым массивам Java.
Данные представлены приложению точно как это сохранено.
Клиенты JDBC источника данных NDB Cluster, использующие Connector/J
5.0.6 (и выше), понимают
jdbc:mysql:loadbalance://
URL (см.
Configuration Properties for Connector/J),
с которым можно использовать в своих интересах способность соедиениться с
многократными серверами MySQL, чтобы достигнуть
выравнивания нагрузки и отказоустойчивости.
Однако, в то время как Connector/J не зависит от библиотек клиента MySQL, он действительно требует связи с сервером MySQL, что не делает ClusterJ. JDBC также не обеспечивает отображений объекта для объектов базы данных, свойств, операций или любого способа сохранить объекты.
См. MySQL Connector/J 5.1 Developer Guide.
Следующие разделы содержат технические требования для пакетов ClusterJ, интерфейсов, классов и методов.
Обеспечивает классы и интерфейсы для использования NDB Cluster непосредственно из Java.
Класс для самонастройки.
Интерфейсы для использования в прикладных программах.
Классы, чтобы определить исключения.
Этот пакет содержит три главных группы классов и интерфейсов.
ClusterJ обеспечивает эти главные интерфейсы для
использования прикладными программами:
com.mysql.clusterj.SessionFactory
,
com.mysql.clusterj.Session
,
com.mysql.clusterj.Transaction
,
com.mysql.clusterj.query.QueryBuilder
и
com.mysql.clusterj.Query
.
Bootstrapping класс-помощник
com.mysql.clusterj.ClusterJHelper
содержит методы для создания
com.mysql.clusterj.SessionFactory
.
Bootstrapping это процесс
идентификации NDB Cluster и получения SessionFactory для использования с
кластером. Есть один SessionFactory на кластер на Java VM.
com.mysql.clusterj.SessionFactory
формируется через свойства,
которые определяют кластер NDB, с которым соединяется приложение:
com.mysql.clusterj.connectstring определяет имя хоста и порт ndb_mgmd.
com.mysql.clusterj.connect.retries количество повторений соединений.
com.mysql.clusterj.connect.delay задержка в секундах между повторениями связи.
com.mysql.clusterj.connect.verbose показать ли сообщение в System.out, соединяясь.
com.mysql.clusterj.connect.timeout.before число секунд, чтобы ждать, пока первый узел не отвечает на запрос связи.
com.mysql.clusterj.connect.timeout.after число секунд, чтобы ждать, пока последний узел не отвечает на запрос связи.
com.mysql.clusterj.connect.database название базы данных, чтобы использовать.
File propsFile = new File("clusterj.properties"); InputStream inStream = new FileInputStream(propsFile); Properties props = new Properties(); props.load(inStream); SessionFactory sessionFactory = ClusterJHelper.getSessionFactory(props);
Session
com.mysql.clusterj.Session
представляет отдельную связь
пользователя с кластером. Это содержит методы для:
Нахождение постоянных экземпляров первичным ключом.
Постоянная фабрика экземпляров (newInstance).
Постоянное управление жизненным циклом экземпляра (сохранение, удаление).
Получение QueryBuilder.
Получение Transaction (currentTransaction).
Session session = sessionFactory.getSession(); Employee existing = session.find(Employee.class, 1); if (existing != null) { session.remove(existing); } Employee newemp = session.newInstance(Employee.class); newemp.initialize(2, "Craig", 15, 146000.00); session.persist(newemp);
Transaction
com.mysql.clusterj.Transaction
позволяет пользователям объединять
многократные операции в единую транзакцию базы данных. Это содержит методы:
Начать блок действий.
Передайте изменения от блока действий.
Отменить все изменения от блока действий.
Отметить блок действий как rollback only.
Получить статус обратной перемотки текущего блока действий.
Transaction tx = session.currentTransaction(); tx.begin(); Employee existing = session.find(Employee.class, 1); Employee newemp = session.newInstance(Employee.class); newemp.initialize(2, "Craig", 146000.00); session.persist(newemp); tx.commit();
QueryBuilder
com.mysql.clusterj.query.QueryBuilder
позволяет пользователям строить запросы. Это содержит методы:
Определите модель объекта области, чтобы запросить.
Сравните свойства с использованием параметров:
equal
lessThan
greaterThan
lessEqual
greaterEqual
between
in
Объедините использование сравнений "and", "or" и "not".
QueryBuilder builder = session.getQueryBuilder(); QueryDomainType<Employee> qemp = builder.createQueryDefinition(Employee.class); Predicate service = qemp.get("yearsOfService").greaterThan(qemp.param("service")); Predicate salary = qemp.get("salary").lessEqual(qemp.param("salaryCap")); qemp.where(service.and(salary)); Query<Employee> query = session.createQuery(qemp); query.setParameter("service", 10); query.setParameter("salaryCap", 180000.00); List<Employee> results = query.getResultList();
ClusterJUserException представляет ошибку базы данных. Первопричина исключения содержится в "cause".
public class ClusterJDatastoreException extends, ClusterJException {
// Public Constructorspublic ClusterJDatastoreException(String message);
public ClusterJDatastoreException(String msg ,
int code,
int mysqlCode,
int status,
int classification);
public ClusterJDatastoreException(String message ,
Throwable t);
public ClusterJDatastoreException(Throwable t );
// Public Methodspublic int getClassification();
public int getCode();
public int getMysqlCode();
public int getStatus ();
}
Унаследовано от
com.mysql.clusterj.ClusterJException:
printStackTrace
Унаследовано от
java.lang.Throwable:
addSuppressed
, fillInStackTrace
, getCause
, getLocalizedMessage
, getMessage
, getStackTrace
, getSuppressed
, initCause
, setStackTrace
, toString
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, wait
public int getClassification();
Получите классификацию.
public int getCode();
Получите код.
7.3.15, 7.4.13, 7.5.4
public int getMysqlCode();
Получите код mysql.
7.3.15, 7.4.13, 7.5.4
public int getStatus();
Получите статус.
Вспомогательный класс для getClassification(). import com.mysql.clusterj.ClusterJDatastoreException.Classification; Classification c = Classification.lookup(datastoreException.getClassification()); System.out.println("exceptionClassification " + c + " with value " + c.value);
public static final class ClusterJDatastoreException.Classification extends, Enum<Classification> {
// Public Static Fieldspublic static final Classification ApplicationError ;
public static final Classification ConstraintViolation ;
public static final Classification FunctionNotImplemented ;
public static final Classification InsufficientSpace ;
public static final Classification InternalError ;
public static final Classification InternalTemporary ;
public static final Classification NoDataFound ;
public static final Classification NoError ;
public static final Classification NodeRecoveryError ;
public static final Classification NodeShutdown ;
public static final Classification OverloadError ;
public static final Classification SchemaError ;
public static final Classification SchemaObjectExists ;
public static final Classification TemporaryResourceError ;
public static final Classification TimeoutExpired ;
public static final Classification UnknownErrorCode ;
public static final Classification UnknownResultError ;
public static final Classification UserDefinedError ;
// Public Static Methodspublic static Classification lookup(int value );
public static Classification valueOf(String name);
public static Classification[] values();
}
Унаследовано от
java.lang.Enum:
compareTo
, equals
, getDeclaringClass
, hashCode
, Имя
, ordinal
, toString
, valueOf
Унаследовано от
java.lang.Object:
getClass
, notify
, notifyAll
, wait
7.3.15, 7.4.13, 7.5.4
public static Classification
lookup(int value);
Получите классификацию для значения, возвращенного ClusterJDatastoreException.getClassification().
Таблица 4.4. lookup(int)
Параметр | Описание |
---|---|
value | Классификация возвращена getClassification(). |
return | Классификация для ошибки. |
ClusterJException основа для всех исключений ClusterJ. Приложения могут поймать ClusterJException, который будет зарегистрирован относительно всего ClusterJ.
Пользовательские исключения вызываются пользовательской ошибкой, например обеспечивая строку соединения, которая относится к недоступному хосту или порту.
Если пользовательское исключение обнаружено во время самонастройки
(приобретая SessionFactory), это брошено как критическое исключение
com.mysql.clusterj.ClusterJFatalUserException
.
Если исключение обнаружено во время инициализации постоянного
интерфейса, например аннотировав столбец, который не существует в
таблице, об этом сообщают как пользовательское исключение
com.mysql.clusterj.ClusterJUserException
.
Исключения хранилища данных сообщают об условиях, которые следуют из
операций по хранилищу данных после самонастройки. Например, дубликаты ключа
на вставке или несуществующая запись при удалении выдадут
com.mysql.clusterj.ClusterJDatastoreException
.
Внутренние исключительные ситуации сообщают об условиях, которые
вызываются ошибками во внедрении. Об этих исключениях нужно сообщить как об
ошибках исключением
com.mysql.clusterj.ClusterJFatalInternalException
.
Исключения находятся в трех общих категориях: User exceptions, Datastore exceptions и Internal exceptions.
public class ClusterJException extends, RuntimeException {
// Public Constructorspublic ClusterJException(String message );
public ClusterJException (String message,
Throwable t);
public ClusterJException(Throwable t);
// Public Methodspublic synchronized void printStackTrace( PrintStream s);
}
Прямые известные подклассы:
com.mysql.clusterj.ClusterJDatastoreException
,
com.mysql.clusterj.ClusterJFatalException
,
com.mysql.clusterj.ClusterJUserException
.
Унаследовано от
java.lang.Throwable:
addSuppressed
, fillInStackTrace
, getCause
, getLocalizedMessage
, getMessage
, getStackTrace
, getSuppressed
, initCause
, printStackTrace
, setStackTrace
, toString
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, wait
ClusterJFatalException представляет исключение, которое не восстанавливаемо.
public class ClusterJFatalException extends, ClusterJException {
// Public Constructorspublic ClusterJFatalException(String string );
public ClusterJFatalException(String string,
Throwable t);
public ClusterJFatalException(Throwable t );
}
Известные прямые подклассы:
com.mysql.clusterj.ClusterJFatalInternalException
,
com.mysql.clusterj.ClusterJFatalUserException
Унаследовано от
com.mysql.clusterj.ClusterJException:
printStackTrace
Унаследовано от
java.lang.Throwable:
addSuppressed
, fillInStackTrace
, getCause
, getLocalizedMessage
, getMessage
, getStackTrace
, getSuppressed
, initCause
, setStackTrace
, toString
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, wait
ClusterJFatalInternalException представляет ошибку внедрения, после которой не может восстановиться пользователь.
public class ClusterJFatalInternalException extends, ClusterJFatalException {
// Public Constructorspublic ClusterJFatalInternalException( String string );
public ClusterJFatalInternalException( String string,
Throwable t);
public ClusterJFatalInternalException(Throwable t);
}
Унаследовано от
com.mysql.clusterj.ClusterJException:
printStackTrace
Унаследовано от
java.lang.Throwable:
addSuppressed
, fillInStackTrace
, getCause
, getLocalizedMessage
, getMessage
, getStackTrace
, getSuppressed
, initCause
, setStackTrace
, toString
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, wait
/p>
ClusterJFatalUserException представляет пользовательскую ошибку, которая является невосстанавливаемой, такой как программные ошибки в постоянных классах или недостающие ресурсы в среде выполнения.
public class ClusterJFatalUserException extends, ClusterJFatalException {
// Public Constructorspublic ClusterJFatalUserException( String string );
public ClusterJFatalUserException( String string,
Throwable t);
public ClusterJFatalUserException( Throwable t);
}
Унаследовано от
com.mysql.clusterj.ClusterJException:
printStackTrace
Унаследовано от
java.lang.Throwable:
addSuppressed
, fillInStackTrace
, getCause
, getLocalizedMessage
, getMessage
, getStackTrace
, getSuppressed
, initCause
, setStackTrace
, toString
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, wait
ClusterJHelper предоставляет вспомогательные методы взаимодействия между API и внедрением.
public class ClusterJHelper {
// Public Constructorspublic ClusterJHelper();
// Public Static Methodspublic static boolean getBooleanProperty(String propertyName,
String def);
public static T getServiceInstance(Class<T> cls );
public static T getServiceInstance(Class<T> cls ,
ClassLoader loader);
public static T getServiceInstance(Class<T> cls ,
String implementationClassName );
public static T getServiceInstance(Class<T> cls ,
String implementationClassName,
ClassLoader loader);
public static List<T> getServiceInstances(Class<T> cls,
ClassLoader loader,
StringBuffer errorMessages);
public static SessionFactory getSessionFactory(Map props );
public static SessionFactory getSessionFactory(Map props ,
ClassLoader loader);
public static String getStringProperty(String propertyName ,
String def);
public static Dbug newDbug ();
}
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, toString
, wait
public static boolean
getBooleanProperty(String propertyName
,
String def);
Получите названное булевого свойства от окружающей среды или от системных свойств. Если свойство не 'true', тогда возвращаются false.
Таблица 4.5. getBooleanProperty(String, String)
Параметр | Описание |
---|---|
propertyName | Название значения |
def | По умолчанию, если свойство не установлено |
return | Системное свойство, если это установлено через -D или системную окружающую среду |
public static T
getServiceInstance(Class<T> cls
);
Определите местонахождение реализации услуги сервисным поиском загрузчика класса контекста.
Таблица 4.6. getServiceInstance(Class<T>)
Параметр | Описание |
---|---|
cls | Класс фабрики |
return | Сервисный экземпляр |
public static T
getServiceInstance(Class<T> cls
,
ClassLoader loader);
Определите местонахождение реализации услуги для обслуживания сервисным поиском определенного загрузчика класса. Первый найденный сервисный экземпляр возвращен.
Таблица 4.7. getServiceInstance(Class<T>, ClassLoader)
Параметр | Описание |
---|---|
cls | Класс фабрики |
loader | Загрузчик класса для фабричного внедрения |
return | Сервисный экземпляр |
public static T
getServiceInstance(Class<T> cls
,
String implementationClassName);
Определите местонахождение реализации услуги для обслуживания. Если имя внедрения не пустое, используйте его вместо поиска. Если класс реализации не загружаемый или не осуществляет интерфейс, бросает исключение. Используйте загрузчик класса ClusterJHelper, чтобы найти обслуживание.
Таблица 4.8. getServiceInstance(Class<T>, String)
Параметр | Описание |
---|---|
cls | |
implementationClassName | |
return | Экземпляр внедрения для обслуживания |
public static T
getServiceInstance(Class<T> cls
,
String implementationClassName,
ClassLoader loader);
Определите местонахождение реализации услуги для обслуживания. Если имя внедрения не пустое, используйте его вместо поиска. Если класс реализации не загружаемый или не осуществляет интерфейс, бросает исключение.
Таблица 4.9. getServiceInstance(Class<T>, String, ClassLoader)
Параметр | Описание |
---|---|
cls | |
implementationClassName | Название класса реализации, чтобы загрузить |
loader | ClassLoader, чтобы найти обслуживание |
return | Экземпляр внедрения для обслуживания |
public static List<T>
getServiceInstances(Class<T> cls
,
ClassLoader loader,
StringBuffer errorMessages);
Определите местонахождение всех реализаций услуги сервисным поиском определенного загрузчика класса. Внедрения в сервисном файле возвращаются. Неудавшиеся экземпляры остаются в буфере errorMessages.
Таблица 4.10. getServiceInstances(Class<T>, ClassLoader, StringBuffer)
Параметр | Описание |
---|---|
cls | Класс фабрики |
loader | Загрузчик класса для фабричного внедрения |
errorMessages | Буфер для сообщений об ошибках |
return | Сервисный экземпляр |
public static SessionFactory
getSessionFactory(Map props
);
Определите местонахождение внедрения SessionFactory сервисным поиском. Используемый загрузчик класса является загрузчиком класса контекста потока.
Таблица 4.11. getSessionFactory(Map)
Параметр | Описание |
---|---|
props | Свойства фабрики сессии |
return | Фабрика сессии |
Исключения
ClusterFatalUserException
Если связь с кластером не может быть установлена
public static SessionFactory
getSessionFactory(Map props
,
ClassLoader loader);
Определите местонахождение внедрения SessionFactory сервисным поиском определенного загрузчика класса. Свойства это карта, которая может содержать определенные для внедрения свойства плюс стандартные свойства.
Таблица 4.12. getSessionFactory(Map, ClassLoader)
Параметр | Описание |
---|---|
props | свойства для фабрики |
loader | загрузчик класса для фабричного внедрения |
return | фабрика сессии |
Исключения
ClusterFatalUserException
Если связь с кластером не может быть установлена
public static String
getStringProperty(String propertyName
,
String def);
Получите названное строкой свойство от окружающей среды или от системных свойств.
Таблица 4.13. getStringProperty(String, String)
Параметр | Описание |
---|---|
propertyName | название значения |
def | по умолчанию, если свойство не установлено |
return | системное свойство, если это установлено через -D или системную окружающую среду |
public static Dbug
newDbug();
Возвратите новый экземпляр Dbug.
Таблица 4.14. newDbug()
Параметр | Описание |
---|---|
return | новый экземпляр Dbug |
ClusterJUserException представляет пользовательскую программную ошибку.
public class ClusterJUserException extends, ClusterJException {
// Public Constructorspublic ClusterJUserException( String message);
public ClusterJUserException(String message ,
Throwable t);
public ClusterJUserException(Throwable t);
}
Унаследовано от
com.mysql.clusterj.ClusterJException:
printStackTrace
Унаследовано от
java.lang.Throwable:
addSuppressed
, fillInStackTrace
, getCause
, getLocalizedMessage
, getMessage
, getStackTrace
, getSuppressed
, initCause
, setStackTrace
, toString
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, wait
public interface ColumnMetadata {
// Public Methodspublic abstract String charsetName();
public abstract ColumnType columnType();
public abstract boolean isPartitionKey();
public abstract boolean isPrimaryKey();
public abstract Class<?> javaType();
public abstract int maximumLength();
public abstract String name();
public abstract boolean nullable();
public abstract int number ();
public abstract int precision();
public abstract int scale();
}
public abstract String
charsetName();
Возвратите имя набора символов.
Таблица 4.15. charsetName()
Параметр | Описание |
---|---|
return | имя набора символов |
public abstract ColumnType
columnType();
Возвратите тип столбца.
Таблица 4.16. columnType()
Параметр | Описание |
---|---|
return | тип столбца |
public abstract boolean
isPartitionKey();
Возвратит, является ли этот столбец столбцом ключа разделения.
Таблица 4.17. isPartitionKey()
Параметр | Описание |
---|---|
return | true, если это столбец ключа разделения |
public abstract boolean
isPrimaryKey();
Возвратит, является ли этот столбец столбцом первичного ключа.
Таблица 4.18. isPrimaryKey()
Параметр | Описание |
---|---|
return | true, если это столбец первичного ключа |
public abstract Class<?>
javaType();
Возвратите java-тип столбца.
Таблица 4.19. javaType()
Параметр | Описание |
---|---|
return | java-тип столбца. |
public abstract int
maximumLength();
Возвратите максимальное количество байтов, которые могут быть сохранены в колонке после трансляции знаков, используя набор символов.
Таблица 4.20. maximumLength()
Параметр | Описание |
---|---|
return | максимальное количество байтов, которые могут быть сохранены в столбце |
public abstract String
name();
Возвратите название столбца.
Таблица 4.21. name()
Параметр | Описание |
---|---|
return | название столбца. |
public abstract boolean
nullable();
Возвратит nullable ли столбец.
Таблица 4.22. nullable()
Параметр | Описание |
---|---|
return | nullable ли этот столбец |
public abstract int
number();
Возвратите номер столбца. Это число используется в качестве первого параметра в методах get и set DynamicColumn.
Таблица 4.23. number()
Параметр | Описание |
---|---|
return | номер столбца. |
public abstract int
precision();
Возвратите точность столбца.
Таблица 4.24. precision()
Параметр | Описание |
---|---|
return | точность столбца. |
public
abstract int scale();
Возвратите масштаб столбца.
Таблица 4.25. scale()
Параметр | Описание |
---|---|
return | масштаб столбца |
Этот класс перечисляет типы столбца для столбцов в ndb.
public final class ColumnType extends, Enum<ColumnType> {
// Public Static Fieldspublic static final ColumnType Bigint ;
public static final ColumnType Bigunsigned ;
public static final ColumnType Binary ;
public static final ColumnType Bit ;
public static final ColumnType Blob ;
public static final ColumnType Char ;
public static final ColumnType Date ;
public static final ColumnType Datetime ;
public static final ColumnType Datetime2 ;
public static final ColumnType Decimal ;
public static final ColumnType Decimalunsigned ;
public static final ColumnType Double ;
public static final ColumnType Float ;
public static final ColumnType Int ;
public static final ColumnType Longvarbinary ;
public static final ColumnType Longvarchar ;
public static final ColumnType Mediumint ;
public static final ColumnType Mediumunsigned ;
public static final ColumnType Olddecimal ;
public static final ColumnType Olddecimalunsigned ;
public static final ColumnType Smallint ;
public static final ColumnType Smallunsigned ;
public static final ColumnType Text ;
public static final ColumnType Time ;
public static final ColumnType Time2 ;
public static final ColumnType Timestamp ;
public static final ColumnType Timestamp2 ;
public static final ColumnType Tinyint ;
public static final ColumnType Tinyunsigned ;
public static final ColumnType Undefined ;
public static final ColumnType Unsigned ;
public static final ColumnType Varbinary ;
public static final ColumnType Varchar ;
public static final ColumnType Year ;
// Public Static Methodspublic static ColumnType valueOf( String name);
public static ColumnType[] values();
}
Унаследовано от
java.lang.Enum:
compareTo
, equals
, getDeclaringClass
, hashCode
, Имя
, ordinal
, toString
, valueOf
Унаследовано от
java.lang.Object:
getClass
, notify
, notifyAll
, wait
Константы используются в ClusterJ.
public interface Constants {
// Public Static Fieldspublic static final String DEFAULT_PROPERTY_CLUSTER_BYTE_BUFFER_POOL_SIZES = "256, 10240, 102400, 1048576";
public static final int DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_BATCH_SIZE = 10;
public static final long DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_START = 1L;
public static final long DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_STEP = 1L;
public static final int DEFAULT_PROPERTY_CLUSTER_CONNECT_DELAY = 5;
public static final int DEFAULT_PROPERTY_CLUSTER_CONNECT_RETRIES = 4;
public static final int DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_AFTER = 20;
public static final < span>int DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_BEFORE = 30;
public static final int DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_MGM = 30000;
public static final int DEFAULT_PROPERTY_CLUSTER_CONNECT_VERBOSE = 0;
public static final String DEFAULT_PROPERTY_CLUSTER_DATABASE = "test";
public static final int DEFAULT_PROPERTY_CLUSTER_MAX_TRANSACTIONS = 4;
public static final int DEFAULT_PROPERTY_CONNECTION_POOL_RECV_THREAD_ACTIVATION_THRESHOLD = 8;
public static final int DEFAULT_PROPERTY_CONNECTION_POOL_SIZE = 1 ;
public static final int DEFAULT_PROPERTY_CONNECTION_RECONNECT_TIMEOUT = 0;
public static final String ENV_CLUSTERJ_LOGGER_FACTORY_NAME = "CLUSTERJ_LOGGER_FACTORY";
public static final String PROPERTY_CLUSTER_BYTE_BUFFER_POOL_SIZES = "com.mysql.clusterj.byte.buffer.pool.sizes" ;
public static final String PROPERTY_CLUSTER_CONNECTION_SERVICE = "com.mysql.clusterj.connection.service";
public static final String PROPERTY_CLUSTER_CONNECTSTRING = "com.mysql.clusterj.connectstring";
public static final String PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_BATCH_SIZE = "com.mysql.clusterj.connect.autoincrement.batchsize";
public static final String PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_START = "com.mysql.clusterj.connect.autoincrement.offset" ;
public static final String PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_STEP = "com.mysql.clusterj.connect.autoincrement.increment";
public static final String PROPERTY_CLUSTER_CONNECT_DELAY = "com.mysql.clusterj.connect.delay";
public static final String PROPERTY_CLUSTER_CONNECT_RETRIES = "com.mysql.clusterj.connect.retries";
public static final String PROPERTY_CLUSTER_CONNECT_TIMEOUT_AFTER = "com.mysql.clusterj.connect.timeout.after" ;
public static final String PROPERTY_CLUSTER_CONNECT_TIMEOUT_BEFORE = "com.mysql.clusterj.connect.timeout.before";
public static final String PROPERTY_CLUSTER_CONNECT_TIMEOUT_MGM = "com.mysql.clusterj.connect.timeout.mgm";
public static final String PROPERTY_CLUSTER_CONNECT_VERBOSE = "com.mysql.clusterj.connect.verbose";
public static final String PROPERTY_CLUSTER_DATABASE = "com.mysql.clusterj.database";
public static final String PROPERTY_CLUSTER_MAX_TRANSACTIONS = "com.mysql.clusterj.max.transactions";
public static final String PROPERTY_CONNECTION_POOL_NODEIDS = "com.mysql.clusterj.connection.pool.nodeids";
public static final String PROPERTY_CONNECTION_POOL_RECV_THREAD_ACTIVATION_THRESHOLD = "com.mysql.clusterj.connection.pool.recv.thread.activation.threshold" ;
public static final String PROPERTY_CONNECTION_POOL_RECV_THREAD_CPUIDS = "com.mysql.clusterj.connection.pool.recv.thread.cpuids";
public static final String PROPERTY_CONNECTION_POOL_SIZE = "com.mysql.clusterj.connection.pool.size";
public static final String PROPERTY_CONNECTION_RECONNECT_TIMEOUT = "com.mysql.clusterj.connection.reconnect.timeout";
public static final String PROPERTY_DEFER_CHANGES = "com.mysql.clusterj.defer.changes";
public static final String PROPERTY_JDBC_DRIVER_NAME = "com.mysql.clusterj.jdbc.driver";
public static final String PROPERTY_JDBC_PASSWORD = "com.mysql.clusterj.jdbc.password";
public static final String PROPERTY_JDBC_URL = "com.mysql.clusterj.jdbc.url";
public static final String PROPERTY_JDBC_USERNAME = "com.mysql.clusterj.jdbc.username";
public static final String SESSION_FACTORY_SERVICE_CLASS_NAME = "com.mysql.clusterj.SessionFactoryService";
public static final String SESSION_FACTORY_SERVICE_FILE_NAME = "META-INF/services/com.mysql.clusterj.SessionFactoryService" ;
}
public static
final String
DEFAULT_PROPERTY_CLUSTER_BYTE_BUFFER_POOL_SIZES
= "256, 10240, 102400, 1048576";
Значение по умолчанию размеров пула буферов в байтах: 256, 10K, 100K, 1M.
public static
final int
DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_BATCH_SIZE
= 10;
Значение по умолчанию автоувеличения пакетного размера связи.
public static
final long
DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_START
= 1L;
Значение по умолчанию начального автоувеличения связи.
public static
final long
DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_STEP
= 1L;
начение по умолчанию связи шага автоувеличения связи.
public static
final int
DEFAULT_PROPERTY_CLUSTER_CONNECT_DELAY
= 5;
Значение по умолчанию задержки связи.
public static
final int
DEFAULT_PROPERTY_CLUSTER_CONNECT_RETRIES = 4
;
Значение по умолчанию повторов связи.
public static
final int
DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_AFTER
= 20;
Значение по умолчанию тайм-аута после связи.
public static
final int
DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_BEFORE
= 30;
Значение по умолчанию тайм-аута перед связью.
public static
final int
DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_MGM
= 30000;
Значение по умолчанию тайм-аута связи mgm.
public static
final int
DEFAULT_PROPERTY_CLUSTER_CONNECT_VERBOSE
= 0;
Значение по умолчанию подробности связи.
public static
final String
DEFAULT_PROPERTY_CLUSTER_DATABASE
= "test";
Значение по умолчанию базы данных.
public static
final int
DEFAULT_PROPERTY_CLUSTER_MAX_TRANSACTIONS
= 4;
Значение по умолчанию максимального количества транзакций.
public static
final int
DEFAULT_PROPERTY_CONNECTION_POOL_RECV_THREAD_ACTIVATION_THRESHOLD
= 8;
Значение по умолчанию порога активации потока.
public static
final int
DEFAULT_PROPERTY_CONNECTION_POOL_SIZE
= 1;
Значение по умолчанию размера пула связи.
public static
final int
DEFAULT_PROPERTY_CONNECTION_RECONNECT_TIMEOUT
= 0;
7.5.7
Значение по умолчанию тайм-аута повторного соединения связи. Автоматическое повторное соединение из-за отказов сети отключено.
public static
final String
ENV_CLUSTERJ_LOGGER_FACTORY_NAME
= "CLUSTERJ_LOGGER_FACTORY";
Название переменной окружения, чтобы установить обработчик журналов.
public static
final String
PROPERTY_CLUSTER_BYTE_BUFFER_POOL_SIZES
= "com.mysql.clusterj.byte.buffer.pool.sizes";
Название свойства размера пула байтового буфера. Чтобы отключить буферный пул для объектов blob, установите значение этого свойства в "1". С этим значением буфера будут выделены, освобождены и убраны, если возможно, немедленно после использования для передачи данных blob.
public static
final String
PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_BATCH_SIZE
= "com.mysql.clusterj.connect.autoincrement.batchsize";
Имя свойства автоувеличения пакетного размера связи.
public static
final String
PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_START
= "com.mysql.clusterj.connect.autoincrement.offset";
Название свойства начального автоувеличения связи.
public static
final String
PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_STEP
= "com.mysql.clusterj.connect.autoincrement.increment";
Название свойства шага автоувеличения связи.
public static
final String
PROPERTY_CLUSTER_CONNECT_DELAY
= "com.mysql.clusterj.connect.delay";
Название свойства тайм-аута связи. Для получения дополнительной информации см. Ndb_cluster_connection::connect().
public static
final String
PROPERTY_CLUSTER_CONNECT_RETRIES
= "com.mysql.clusterj.connect.retries";
Название свойства повторов связи. Для получения дополнительной информации см. Ndb_cluster_connection::connect().
public static
final String
PROPERTY_CLUSTER_CONNECT_TIMEOUT_AFTER
= "com.mysql.clusterj.connect.timeout.after";
Название свойства тайм-аута после связи. Для получения дополнительной информации см. Ndb_cluster_connection::wait_until_ready().
public static
final String
PROPERTY_CLUSTER_CONNECT_TIMEOUT_BEFORE
= "com.mysql.clusterj.connect.timeout.before";
Название свойства тайм-аута перед связью. Для получения дополнительной информации см. Ndb_cluster_connection::wait_until_ready().
public static
final String
PROPERTY_CLUSTER_CONNECT_TIMEOUT_MGM
= "com.mysql.clusterj.connect.timeout.mgm";
Название начального тайм-аута для связи кластера, чтобы соединиться с MGM прежде, чем соединить с узлами данных Ndb_cluster_connection::set_timeout().
public static
final String
PROPERTY_CLUSTER_CONNECT_VERBOSE
= "com.mysql.clusterj.connect.verbose";
Название свойства подробности связи. Для получения дополнительной информации см. Ndb_cluster_connection::connect().
public static
final String
PROPERTY_CLUSTER_CONNECTION_SERVICE
= "com.mysql.clusterj.connection.service";
Название свойства сервиса связи.
public static
final String
PROPERTY_CLUSTER_CONNECTSTRING
= "com.mysql.clusterj.connectstring";
Название значения строки подключения. Для получения дополнительной информации см. Ndb_cluster_connection constructor.
public static
final String
PROPERTY_CLUSTER_DATABASE
= "com.mysql.clusterj.database";
Название значения базы данных. Для получения дополнительной информации посмотрите параметр catalogName конструктора Ndb Ndb constructor.
public static
final String
PROPERTY_CLUSTER_MAX_TRANSACTIONS
= "com.mysql.clusterj.max.transactions";
Название максимального количества транзакций. Для получения дополнительной информации посмотрите Ndb::init().
public static
final String
PROPERTY_CONNECTION_POOL_NODEIDS
= "com.mysql.clusterj.connection.pool.nodeids";
Название пула связи id узлов. Нет никакого значения по умолчанию. Это список id узлов, чтобы вынудить связи быть назначенными на определенные id узла. Если это свойство определяется и размер пула связи не по умолчанию, количество id узлов списка должно соответствовать размеру пула связи или количество id узлов должно быть 1, и id узла будут назначены на связи, начинающиеся с указанного id узла.
public static
final String
PROPERTY_CONNECTION_POOL_RECV_THREAD_ACTIVATION_THRESHOLD
= "com.mysql.clusterj.connection.pool.recv.thread.activation.threshold";
Порог активации потока для всех связей в пуле связи. По умолчанию нет порога активации.
public static
final String
PROPERTY_CONNECTION_POOL_RECV_THREAD_CPUIDS
= "com.mysql.clusterj.connection.pool.recv.thread.cpuids";
Закрепление CPU получения потоков для связей в пуле связи. По умолчанию нет закрепления CPU. Если это свойство определяется и размер пула связи не по умолчанию (1), количество cpuids в списке должно соответствовать размеру пула связи.
public static
final String
PROPERTY_CONNECTION_POOL_SIZE
= "com.mysql.clusterj.connection.pool.size";
Название свойства размера пула связи. Это количество связей, чтобы создать в пуле связи. По умолчанию равняется 1 (все сессии разделяют ту же самую связь, все запросы SessionFactory с той же строкой подключения и базой данных разделят единственную SessionFactory). Установка 0 отключает объединение, каждый запрос SessionFactory получит свой собственный уникальный SessionFactory.
public static
final String
PROPERTY_CONNECTION_RECONNECT_TIMEOUT
= "com.mysql.clusterj.connection.reconnect.timeout";
7.5.7
Число секунд, чтобы ждать всех сессий, которые будут закрыты, повторно подключая SessionFactory из-за отказов сети. По умолчанию 0 указывает, что автоматическое повторное соединение к кластеру из-за отказов сети отключено. Повторное соединение может быть позволено при помощи метода SessionFactory.reconnect(int timeout) и определением нового тайм-аута.
public static
final String PROPERTY_DEFER_CHANGES
= "com.mysql.clusterj.defer.changes";
Флаг для отсроченных вставок, удалений и обновлений.
public static
final String
PROPERTY_JDBC_DRIVER_NAME
= "com.mysql.clusterj.jdbc.driver";
Имя драйвера jdbc.
public static
final String PROPERTY_JDBC_PASSWORD
= "com.mysql.clusterj.jdbc.password";
Пароль для jdbc.
public static
final String PROPERTY_JDBC_URL
= "com.mysql.clusterj.jdbc.url";
url для jdbc.
public static
final String PROPERTY_JDBC_USERNAME
= "com.mysql.clusterj.jdbc.username";
Имя пользователя jdbc.
public static
final String
SESSION_FACTORY_SERVICE_CLASS_NAME
= "com.mysql.clusterj.SessionFactoryService";
Название сервисного интерфейса сессии.
public static
final String
SESSION_FACTORY_SERVICE_FILE_NAME
= "META-INF/services/com.mysql.clusterj.SessionFactoryService";
Названия файлов с именами классов реализации для сервиса сессии.
Dbug позволяет приложениям clusterj включить функциональность DBUG в библиотеке кластера ndbapi. Статус dbug это управляющая строка, которая состоит из флагов, отделенных двоеточиями. Флаги:
d устанавливают флаг отладки.
a[,filename] добавляет вывод отладки к файлу.
A[,filename] аналогично a[,filename], сбрасывает вывод после каждой операции.
d[,keyword[,keyword...]] позволяет вывод из макроса с указанными ключевыми словами.
D[,tenths] ждет в течение указанных десятых частей секунды после каждой операции.
f[,function[,function...]] ограничивает вывод указанным списком функций.
F отмечает каждый вывод именем исходного файла.
i отмечает каждый вывод process id текущего процесса.
g[,function[,function...]] профиль определенного списка функций.
L отмечает каждый вывод номером строки исходного файла.
n отмечает каждый вывод текущей глубиной вложения функции.
N отмечает каждый вывод порядковаым номером.
o[,filename] переписывает вывод оталдки в файле.
O[,filename] аналогично o[,filename], но сбрасывает вывод после каждой операции.
p[,pid[,pid...]] ограничивает вывод указанным списком process ids.
P отмечает каждый вывод именем процесса.
r перезагружает уровень отступа к нолю.
t[,depth] ограничивает вложение функции указанной глубиной.
T отмечает каждый вывод текущей меткой времени.
Например, чтобы проследить вызовы и выводимую отладочную информацию только для "jointx" и переписать содержание файла "/tmp/dbug/jointx", используйте "t:d,jointx:o,/tmp/dbug/jointx". Вышеупомянутое может быть написано как ClusterJHelper.newDbug().trace().debug("jointx").output("/tmp/dbug/jointx").set();
public interface Dbug {
// Public Methodspublic abstract Dbug append(String fileName);
public abstract Dbug debug(String string );
public abstract Dbug debug( String[] strings );
public abstract Dbug flush();
public abstract String get();
public abstract Dbug output(String fileName );
public abstract void pop();
public abstract void print(String keyword ,
String message);
public abstract void push();
public abstract void push(String state );
public abstract void set();
public abstract void set(String state );
public abstract Dbug trace();
}
public abstract Dbug
append(String fileName);
Определите имя файла для вывода отладки (добавление).
Таблица 4.26. append(String)
Параметр | Описание |
---|---|
fileName | название файла |
return | this |
public abstract Dbug debug
(String string);
Установите список ключевых слов отладки.
Таблица 4.27. debug(String)
Параметр | Описание |
---|---|
string | Разделенные запятой ключевые слова отладки |
return | this |
public abstract Dbug debug
(String[] strings);
Установите список ключевых слов отладки.
Таблица 4.28. debug(String[])
Параметр | Описание |
---|---|
strings | ключевые слова отладки |
return | this |
public abstract Dbug
flush();
Принудительный сброс после каждой операции по выводу.
Таблица 4.29. flush()
Параметр | Описание |
---|---|
return | this |
public abstract String
get();
Возвратите текущее состояние.
Таблица 4.30. get()
Параметр | Описание |
---|---|
return | текущее состояние |
public abstract Dbug
output(String fileName);
Определите имя файла для вывода отладки (перезапись).
Таблица 4.31. output(String)
Параметр | Описание |
---|---|
fileName | название файла |
return | this |
public abstract void
pop();
Вернуть текущее состояние. Новый статус будет ранее сохраненным статусом.
public abstract void print
(String keyword,
String message);
Напечатайте сообщение отладки.
public abstract void
push();
Сохраните текущее состояние, как определено методами.
public abstract void push
(String state);
Сохраните текущее состояние и установите параметр как новый статус.
Таблица 4.32. push(String)
Параметр | Описание |
---|---|
state | новый статус |
public abstract void
set();
Установите текущее состояние, как определено методами.
public abstract void
set(String state);
Установите текущее состояние от параметра.
Таблица 4.33. set(String)
Параметр | Описание |
---|---|
state | новый статус |
public abstract Dbug
trace();
Установите флаг трассировки.
Таблица 4.34. trace()
Параметр | Описание |
---|---|
return | this |
public abstract class DynamicObject {
// Public Constructorspublic DynamicObject();
// Public Methodspublic final ColumnMetadata[] columnMetadata();
public final DynamicObjectDelegate delegate();
public final void delegate(DynamicObjectDelegate delegate );
public Boolean found();
public final Object get (int columnNumber);
public final void set (int columnNumber,
Object value);
public String table();
}
Унаследовано от
java.lang.Object:
equals
, getClass
, hashCode
, notify
, notifyAll
, toString
, wait
public interface DynamicObjectDelegate {
// Public Methodspublic abstract ColumnMetadata[] columnMetadata();
public abstract Boolean found();
public abstract void found (Boolean found);
public abstract Object get(int columnNumber);
public abstract void release();
public abstract void set (int columnNumber,
Object value);
public abstract boolean wasReleased();
}
Способы блокировки для операций чтения.
SHARED: Установите коллективную блокировку на строках.
EXCLUSIVE: Установите монопольную блокировку на строках.
READ_COMMITTED: Не устанавливайте блокировку, но прочитайте новые переданные значения.
public final class LockMode extends, Enum<LockMode> {
// Public Static Fieldspublic static final LockMode EXCLUSIVE ;
public static final LockMode READ_COMMITTED ;
public static final LockMode SHARED ;
// Public Static Methodspublic static LockMode valueOf(String name );
public static LockMode[] values();
}
Унаследовано от
java.lang.Enum:
compareTo
, equals
, getDeclaringClass
, hashCode
, Имя
, ordinal
, toString
, valueOf
Унаследовано от
java.lang.Object:
getClass
, notify
, notifyAll
, wait
Экземпляр запроса представляет определенный запрос со связанными
параметрами. Экземпляр создается методом
com.mysql.clusterj.Session.<T>createQuery(com.mysql.clusterj.query.QueryDefinition<T>)
.
public interface Query<E> {
// Public Static Fieldspublic static final String INDEX_USED = "IndexUsed";
public static final String SCAN_TYPE = "ScanType";
public static final String SCAN_TYPE_INDEX_SCAN = "INDEX_SCAN";
public static final String SCAN_TYPE_PRIMARY_KEY = "PRIMARY_KEY";
public static final String SCAN_TYPE_TABLE_SCAN = "TABLE_SCAN";
public static final String SCAN_TYPE_UNIQUE_KEY = "UNIQUE_KEY";
// Public Methodspublic abstract int deletePersistentAll();
public abstract Results<E> execute(Object parameter );
public abstract Results<E> execute(Object[] parameters );
public abstract Results<E> execute(Map<String, ?> parameters);
public abstract Map<String, Object> explain();
public abstract List<E> getResultList();
public abstract void setLimits(long skip,
long limit);
public abstract void setOrdering(Ordering ordering,
String[] orderingFields);
public abstract void setParameter(String parameterName ,
Object value);
}
public static
final String INDEX_USED
= "IndexUsed";
Запрос объясняет использование ключа индекс.
public static
final String SCAN_TYPE
= "ScanType";
Запрос объясняет ключ типа просмотра.
public static
final String SCAN_TYPE_INDEX_SCAN
= "INDEX_SCAN";
Запрос объясняет значение типа просмотра для просмотра индекса.
public static
final String SCAN_TYPE_PRIMARY_KEY
= "PRIMARY_KEY";
Запрос объясняет значение типа просмотра для первичного ключа.
public static
final String SCAN_TYPE_TABLE_SCAN
= "TABLE_SCAN";
Запрос объясняет значение типа просмотра для сканирования таблицы.
public static
final String SCAN_TYPE_UNIQUE_KEY
= "UNIQUE_KEY";
Запрос объясняет значение типа просмотра для уникального ключа.
public abstract int
deletePersistentAll();
Удалите экземпляры, которые удовлетворяют условиям запроса.
Таблица 4.35. deletePersistentAll()
Параметр | Описание |
---|---|
return | количество удаленных экземпляров |
public abstract Results<E>
execute(Map<String, ?>
parameters);
Выполните запрос с одним или несколькими названными параметрами. Параметры найдены по имени.
Таблица 4.36. execute(Map<String, ?>)
Параметр | Описание |
---|---|
parameters | Параметры для запроса |
return | результат запроса |
public abstract
Results<E> execute(Object[]
parameters);
Выполните запрос с одним или несколькими названными параметрами. Параметры найдены по порядку, в котором они были объявлены в запросе.
Таблица 4.37. execute(Object...)
Параметр | Описание |
---|---|
parameters | Параметр для запроса |
return | Результат запроса |
public abstract Results<E>
execute(Object parameter
);
Выполните запрос точно с одним параметром.
Таблица 4.38. execute(Object)
Параметр | Описание |
---|---|
parameter | Параметр для запроса |
return | Результат запроса |
public abstract Map<String,
Object> explain();
Объясните, как этот запрос будет или был выполнен. Если вызван прежде, чем все параметры связаны, бросит ClusterJUserException. Возвратит карту пар key:value, которые объясняют, как запрос будет или был выполнен. Детали могут быть получены, вызывая toString на значении. Следующие ключи возвращены:
ScanType: тип просмотра:
PRIMARY_KEY: запрос использует ключевой поиск с первичным ключом.
UNIQUE_KEY: запрос используемый ключевой поиск с уникальным ключом.
INDEX_SCAN: запрос использовал просмотр диапазона с неуникальным ключом.
TABLE_SCAN: запрос использовал сканирование таблицы.
IndexUsed: название используемого индекса, если есть.
Таблица 4.39. explain()
Параметр | Описание |
---|---|
return | данные о выполнении этого запроса |
Исключения
ClusterJUserException
если не все параметры связаны
public abstract List<E>
getResultList();
Получите результаты как список.
Таблица 4.40. getResultList()
Параметр | Описание |
---|---|
return | Результат |
Исключения
ClusterJUserException
если не все параметры связаны
ClusterJDatastoreException
если об исключении сообщает хранилище данных
public abstract void
setLimits(long skip,
long limit);
Установите пределы для результатов возврата. Выполнение запроса изменяется, чтобы возвратить только подмножество результатов. Если фильтр обычно возвращал бы 100 случаев, skip установлен в 50, а limit в 40, то первые 50 результатов, которые были бы возвращены, пропускаются, следующие 40 результатов возвращены, а остальные 10 проигнорированы.
Skip должен быть больше или равным 0. Limit должен быть больше или равным 0. Пределы не могут использоваться с deletePersistentAll.
Таблица 4.41. setLimits(long, long)
Параметр | Описание |
---|---|
skip | сколько результатов пропустить |
limit | сколько результатов возвратить после пропуска, используйте Long.MAX_VALUE, если нет ограничения. |
public abstract void
setOrdering(Ordering ordering,
String[] orderingFields);
Установить порядок для результатов этого запроса. Выполнение запроса изменяется, чтобы использовать индекс, ранее определенный.
Должен быть индекс, определенный на столбцах, отображенных к указанным полям в нужном порядке.
Не должно быть никаких промежутков в полях относительно индекса.
Все области должны быть в индексе, но не все области в индексе должны быть в порядке полей.
Если применен предикат "in" в фильтре на области в порядке, это может использоваться только с первой областью.
Если какое-либо из этих условий нарушено, ClusterJUserException брошен, когда запрос выполняется.
Если применен предикат "in", каждый элемент в параметре определяет отдельный диапазон, и упорядочивание выполняется в том диапазоне. Может быть лучший (более эффективный) индекс на основе фильтра, но определение порядка вынудит запрос использовать индекс, который содержит заданные области.
Таблица 4.42. setOrdering(Query.Ordering, String...)
Параметр | Описание |
---|---|
ordering | Ordering.ASCENDING или Ordering.DESCENDING |
orderingFields | поля для сортировки |
public abstract void
setParameter(String parameterName
,
Object value);
Установите значение параметра. Если вызвано многократно для того же самого параметра, тихо заменит значение.
Таблица 4.43. setParameter(String, Object)
Параметр | Описание |
---|---|
parameterName | название параметра |
value | значение для параметра |
Упорядочивание
public static final class Query.Ordering extends, Enum<Ordering> {
// Public Static Fieldspublic static final Ordering ASCENDING ;
public static final Ordering DESCENDING ;
// Public Static Methodspublic static Ordering valueOf(String name );
public static Ordering[] values();
}
Унаследовано от
java.lang.Enum:
compareTo
, equals
, getDeclaringClass
, hashCode
, Имя
, ordinal
, toString
, valueOf
Унаследовано от
java.lang.Object:
getClass
, notify
, notifyAll
, wait
Результаты запроса.
public interface Results<E> extends, Iterable<E> {
// Public Methodspublic abstract Iterator<E> iterator();
}
public abstract Iterator<E>
iterator();
Определен: метод
iterator
в интерфейсе
Iterable
.
Получите итератор по результатам запроса.
Таблица 4.44. iterator()
Параметр | Описание |
---|---|
return | итератор |
Сессия это основной пользовательский интерфейс к кластеру. Сессия расширяет AutoCloseable, таким образом, это может использоваться в шаблоне try-with-resources. Этот шаблон позволяет приложению создать сессию в декларации try и независимо от результата блока try/catch/finally clusterj очистит и закроет сессию. Если блок try выходит с открытой транзакцией, транзакция будет отменена, прежде чем сессия закрывается.
public interface Session extends, AutoCloseable {
// Public Methodspublic abstract void close();
public abstract Query<T> createQuery(QueryDefinition<T> qd);
public abstract Transaction currentTransaction();
public abstract void deletePersistent( Class<T> cls ,
Object key);
public abstract void deletePersistent(Object instance );
public abstract int deletePersistentAll(Class<T> cls);
public abstract void deletePersistentAll(Iterable<?> instances);
public abstract T find(Class<T> cls ,
Object key);
public abstract void flush();
public abstract Boolean found(Object instance );
public abstract QueryBuilder getQueryBuilder();
public abstract boolean isClosed();
public abstract T load(T instance );
public abstract T makePersistent(T instance);
public abstract Iterable<?> makePersistentAll( Iterable<?> instances);
public abstract void markModified(Object instance ,
String fieldName);
public abstract T newInstance(Class<T> cls );
public abstract T newInstance(Class<T> cls,
Object key);public abstract void persist(Object instance );
public abstract T release(T obj);
public abstract void remove(Object instance );
public abstract T savePersistent(T instance);
public abstract Iterable<?> savePersistentAll( Iterable<?> instances);
public abstract void setLockMode(LockMode lockmode );
public abstract void setPartitionKey(Class<?> cls,
Object key);public abstract String unloadSchema(Class<?> cls );
public abstract void updatePersistent(Object instance);
public abstract void updatePersistentAll(Iterable<?> instances);
}
public abstract void
close();
Определен: метод
close
в интерфейсе
AutoCloseable
.
Закройте эту сессию.
public abstract Query<T>
createQuery(QueryDefinition<T>
qd);
Создайте запрос из QueryDefinition.
Таблица 4.45. createQuery(QueryDefinition<T>)
Параметр | Описание |
---|---|
qd | определение запроса |
return | экземпляр запроса |
public abstract Transaction
currentTransaction();
Получите текущий
com.mysql.clusterj.Transaction
.
Таблица 4.46. currentTransaction()
Параметр | Описание |
---|---|
return | транзакция |
public abstract void
deletePersistent(Class<T> cls
,
Object key);
Удалите экземпляр класса из базы данных, данной ее первичным ключом. Для ключей отдельного столбца основной параметр это обертка (например, Integer). Для многостолбцовых ключей основной параметр Object[], в котором элементы соответствуют первичным ключам в порядке их определения в схеме.
Таблица 4.47. deletePersistent(Class<T>, Object)
Параметр | Описание |
---|---|
cls | интерфейс или динамический класс |
key | primary key |
public abstract void
deletePersistent(Object instance
);
Удалите экземпляр из базы данных. Только идентификационная область используется, чтобы определить, какой экземпляр должен быть удален. Если экземпляр не существует в базе данных, исключение брошено.
Таблица 4.48. deletePersistent(Object)
Параметр | Описание |
---|---|
instance | экземпляр, чтобы удалить |
public abstract int
deletePersistentAll(Class<T> cls
);
Удалите все экземпляры этого класса из базы данных. Никакое исключение не брошено, даже при отсутствии экземпляров в базе данных.
Таблица 4.49. deletePersistentAll(Class<T>)
Параметр | Описание |
---|---|
cls | интерфейс или динамический класс |
return | сколько удалено экземпляров |
public abstract void
deletePersistentAll(Iterable<?>
instances);
Удалите все экземпляры параметра из базы данных.
Таблица 4.50. deletePersistentAll(Iterable<?>)
Параметр | Описание |
---|---|
instances | экземпляры, чтобы удалить |
public abstract T find
(Class<T> cls,
Object key);
Найдите определенный экземпляр его первичным ключом. Ключ должен иметь тот же самый тип как первичный ключ, определенный соответствующим параметром cls. Основной параметр это обернутая версия типа примитива ключа, например, Integer для типов ключа INT, Long для BIGINT или String для типов char и varchar. Для многостолбцовых первичных ключей основной параметр Object[], каждый элемент которого является компонентом первичного ключа. Элементы должны быть в порядке декларации столбцов (не обязательно порядок, определенный в CONSTRAINT ... PRIMARY KEY) в CREATE TABLE.
Таблица 4.51. find(Class<T>, Object)
Параметр | Описание |
---|---|
cls | интерфейс или динамический класс, чтобы найти экземпляр |
key | ключ экземпляра, чтобы найти |
return | экземпляр интерфейса или динамического класса с указанным ключом |
public abstract void
flush();
Сбросить отсроченные изменения. Вставки, удаления, загрузки и обновления посылают в бэкэнд.
public abstract Boolean
found(Object instance);
Строка соответствовала этому экземпляру, найденному в базе данных?
Таблица 4.52. found(Object)
Параметр | Описание |
---|---|
instance | экземпляр, соответствующий строке в базе данных |
return |
|
public abstract QueryBuilder
getQueryBuilder();
Получите QueryBuilder.
Таблица 4.53. getQueryBuilder()
Параметр | Описание |
---|---|
return | конструктор запросов |
public abstract boolean
isClosed();
Эта сессия закрывается?
Таблица 4.54. isClosed()
Параметр | Описание |
---|---|
return | true, если сессия закрывается |
public abstract T load
(T instance);
Загрузите экземпляр из базы данных в память. Загрузка асинхронная и будет выполнена, когда операционный доступ к базе данных требования выполняется: find, flush или query. Экземпляр должен быть возвращен из поиска или запроса или создан через session.newInstance, и его первичный ключ инициализируется.
Таблица 4.55. load(T)
Параметр | Описание |
---|---|
instance | экземпляр, чтобы загрузить |
return | экземпляр |
public abstract T
makePersistent(T instance
);
Вставьте экземпляр в базу данных. Если экземпляр уже существует в базе данных, исключение брошено.
Таблица 4.56. makePersistent(T)
Параметр | Описание |
---|---|
instance | экземпляр, чтобы вставить |
return | экземпляр |
public abstract Iterable<?>
makePersistentAll(Iterable<?>
instances);
Вставьте экземпляры в базу данных.
Таблица 4.57. makePersistentAll(Iterable<?>)
Параметр | Описание |
---|---|
instances | экземпляры, чтобы вставить. |
return | экземпляры |
public abstract void
markModified(Object instance,
String fieldName);
Отметьте область в объекте, как измененную, таким образом, это сбрасывается.
Таблица 4.58. markModified(Object, String)
Параметр | Описание |
---|---|
instance | постоянный экземпляр |
fieldName | область, чтобы отметить, как измененную |
public abstract T
newInstance(Class<T> cls
);
Создайте экземпляр интерфейса или динамического класса, который отображается к таблице.
Таблица 4.59. newInstance(Class<T>)
Параметр | Описание |
---|---|
cls | интерфейс, для которого можно создать экземпляр |
return | экземпляр, который осуществляет интерфейс |
public abstract T
newInstance(Class<T> cls,
Object key);
Создайте экземпляр интерфейса или динамического класса, который отображается к таблице и устанавливает первичный ключ нового экземпляра. Новый экземпляр может использоваться, чтобы создать, удалить или обновить запись в базе данных.
Таблица 4.60. newInstance(Class<T>, Object)
Параметр | Описание |
---|---|
cls | интерфейс, для которого можно создать экземпляр |
return | экземпляр, который осуществляет интерфейс |
public abstract void
persist(Object instance
);
Вставьте экземпляр в базу данных. У этого метода есть идентичная семантика с makePersistent.
Таблица 4.61. persist(Object)
Параметр | Описание |
---|---|
instance | экземпляр, чтобы вставить |
public abstract T release
(T obj);
Высвободите ресурсы, связанные с экземпляром. Экземпляр должен быть запросом или объектом области, полученным через session.newInstance(T.class), find(T.class), множеством T[] или итератором. Высвобожденные ресурсы могут включать прямые буфера, используемые, чтобы содержать данные экземпляра. Высвобожденные ресурсы могут быть возвращены в пул.
Таблица 4.62. release(T)
Параметр | Описание |
---|---|
obj | объект области типа T, итератор или множество T[] |
return | входной параметр |
Исключения
ClusterJUserException
если экземпляр не объект области T, итератор или множество T[], или если объект используется после вызова этого метода.
public abstract void
remove(Object instance);
Удалите экземпляр из базы данных. У этого метода есть идентичная семантика с deletePersistent.
Таблица 4.63. remove(Object)
Параметр | Описание |
---|---|
instance | экземпляр, чтобы удалить |
public abstract T
savePersistent(T instance
);
Сохраните экземпляр в базе данных, не проверяя на существование. Идентификационная область используется, чтобы определить, какой экземпляр должен быть сохранен. Если экземпляр будет существовать в базе данных, то это будет обновлено. Если экземпляр не будет существовать, он будет создан.
Таблица 4.64. savePersistent(T)
Параметр | Описание |
---|---|
instance | экземпляр, чтобы обновить |
public abstract Iterable<?>
savePersistentAll(Iterable<?>
instances);
Обновите все экземпляры параметра в базе данных.
Таблица 4.65. savePersistentAll(Iterable<?>)
Параметр | Описание |
---|---|
instances | экземпляры, чтобы обновить |
public abstract void
setLockMode(LockMode lockmode
);
Установите режим блокировки для операций чтения. Это немедленно вступит в силу и останется в силе, пока эта сессия не закрывается, или этот метод не вызовут снова.
Таблица 4.66. setLockMode(LockMode)
Параметр | Описание |
---|---|
lockmode | Режим LockMode |
public abstract void
setPartitionKey(Class<?> cls
,
Object key);
Установите ключ разделения для следующей транзакции. Ключ должен иметь тот же самый тип как первичный ключ, определенный таблицей, соответствующей параметру cls. Основной параметр это обернутая версия типа примитива ключа, например, Integer для типов ключа INT, Long для BIGINT или String для char и varchar. Для многостолбцовых первичных ключей основной параметр это Object[], каждый элемент которого является компонентом первичного ключа. Элементы должны быть в порядке декларации столбцов (не обязательно это порядок, определенный в CONSTRAINT ... PRIMARY KEY) в CREATE TABLE.
Таблица 4.67. setPartitionKey(Class<?>, Object)
Параметр | Описание |
---|---|
key | первичный ключ отображенной таблицы |
Исключения
ClusterJUserException
если транзакция включается в список
ClusterJUserException
если ключ разделения пустой
ClusterJUserException
если вызвано дважды в той же самой транзакции
ClusterJUserException
если ключ разделения имеет неправильный тип
public abstract String
unloadSchema(Class<?> cls
);
Выгрузите определение схемы для класса. Это должно быть сделано после того, как определение схемы изменилось в базе данных из-за изменения таблицы командой alter. В следующий раз, когда класс используется, схема будет перезагружена.
Таблица 4.68. unloadSchema(Class<?>)
Параметр | Описание |
---|---|
cls | класс, для которого выгружена схема |
return | название схемы, которая была выгружена |
public abstract void
updatePersistent(Object instance
);
Обновите экземпляр в базе данных, не обязательно получая его. Идентификационная область используется, чтобы определить, какой экземпляр должен быть обновлен. Если экземпляр не существует в базе данных, исключение брошено. Этот метод не может использоваться, чтобы изменить первичный ключ.
Таблица 4.69. updatePersistent(Object)
Параметр | Описание |
---|---|
instance | экземпляр, чтобы обновить |
public abstract void
updatePersistentAll(Iterable<?>
instances);
Обновите все экземпляры параметра в базе данных.
Таблица 4.70. updatePersistentAll(Iterable<?>)
Параметр | Описание |
---|---|
instances | экземпляры, чтобы обновить |
SessionFactory представляет кластер.
public interface SessionFactory {
// Public Methodspublic abstract void close();
public abstract State currentState();
public abstract List<Integer> getConnectionPoolSessionCounts();
public abstract int getRecvThreadActivationThreshold();
public abstract short[] getRecvThreadCPUids();
public abstract Session getSession();
public abstract Session getSession(Map properties );
public abstract void reconnect();
public abstract void reconnect(int timeout);
public abstract void setRecvThreadActivationThreshold(int threshold);
public abstract void setRecvThreadCPUids(short[] cpuids );
}
public abstract void
close();
Закройте эту фабрику сессии. Высвободите все ресурсы. Установите текущее состояние в Closed. Когда закрыто, вызовы getSession бросят ClusterJUserException.
public abstract State
currentState();
Получите текущее состояние этой фабрики сессии.
7.5.7
public abstract List<Integer>
getConnectionPoolSessionCounts();
Получите список, содержащий количество открытых сессий для каждой связи в пуле связи.
7.3.14, 7.4.12, 7.5.2
public abstract int
getRecvThreadActivationThreshold();
Получите порог активации потока для всех связей в пуле связи. 16 или более значит, что потоки никогда не используются в качестве приемников. 0 значит, что поток всегда активен, и это сохраняет пул для его собственного исключительного использования, эффективно блокируя все пользовательские потоки от становления приемниками. В таких экземплярах нужно соблюдать осторожность, чтобы гарантировать, что поток получения не конкурирует с пользовательской потоком за ресурсы CPU, предпочтительно для него быть привязанным к CPU для его собственного исключительного использования. По умолчанию равняется 8.
7.5.7
public abstract short[]
getRecvThreadCPUids();
Получить привязку потока к cpu для всех связей в пуле связи. Если поток получения не будет связан с CPU, соответствующее значение будет -1.
7.5.7
public abstract Session
getSession();
Создайте Session, чтобы использовать с кластером, используя все свойства SessionFactory.
Таблица 4.71. getSession()
Параметр | Описание |
---|---|
return | session |
public abstract Session
getSession(Map properties
);
Создайте сессию, чтобы использовать с кластером, отвергнув некоторые свойства. Свойства PROPERTY_CLUSTER_CONNECTSTRING, PROPERTY_CLUSTER_DATABASE и PROPERTY_CLUSTER_MAX_TRANSACTIONS не могут быть перекрыты.
Таблица 4.72. getSession(Map)
Параметр | Описание |
---|---|
properties | перекрытие некоторых свойств для этой сессии |
return | session |
public abstract void
reconnect();
Повторно подключите эту фабрику сессии, используя новое определенное значение тайм-аута. Оно, возможно, было определено в оригинальных свойствах сессии или, возможно, было изменено прикладным вызовом reconnect(int timeout).
7.5.7
public abstract void
reconnect(int timeout);
Разъедините и снова соедините эту фабрику сессии, используя указанный тайм-аут и измените сохраненное значение тайм-аута. Это тяжелый метод и должен редко использоваться. Это предназначается для случаев, где процесс, в котором работает clusterj, потерял возможность соединения с кластером и обычно не в состоянии функционировать. Повторное соединение сделано в нескольких фазах. Во-первых, фабрика сессии устанавливает статус в Reconnecting и начинает повторно подключать поток, чтобы управлять процедурой повторного соединения. В статусе Reconnecting методы getSession бросают ClusterJUserException и пул связи недоступен, пока все сессии не закрылись. Если сессии не закрываются обычно после тайм-аута, сессии будут вынуждены закрыться. Затем все связи в пуле связи закрываются, что освобождает их слоты связи в кластере. Наконец, пул связи воссоздается, используя оригинальные свойства пула связи, и статус устанавливается в Open. Процедура повторного соединения асинхронная. Чтобы наблюдать прогресс процедуры, используйте методы currentState и getConnectionPoolSessionCounts. Если значение тайм-аута отлично от нуля, автоматическое повторное соединение будет сделано clusterj после нахождения сбоя сети. Если значение тайм-аута 0, автоматическое повторное соединение отключено. Если текущее состояние этой фабрики сессии Reconnecting, этот метод тихо ничего не делает.
Таблица 4.73. reconnect(int)
Параметр | Описание |
---|---|
timeout | Значение тайм-аута в секундах, 0, чтобы отключить автоматическое повторное соединение |
7.5.7
public abstract void
setRecvThreadActivationThreshold(int
threshold);
Установите порог активации потока получения для всех связей в пуле связи. 16 или выше значит, что поток никогда не используется в качестве приемника. 0 значит, что поток всегда активен и это сохраняет пул для его собственного исключительного использования, эффективно блокируя все пользовательские потоки от становления приемниками. В таких экземплярах нужно соблюдать осторожность, чтобы гарантировать, что поток получения не конкурирует с пользовательским потоком за ресурсы CPU, предпочтительно для него быть привязанным к CPU для его собственного исключительного использования. По умолчанию равняется 8.
Исключения
ClusterJUserException
если значение отрицательно
ClusterJFatalInternalException
если метод терпит неудачу из-за некоторой внутренней причины
7.5.7
public abstract void
setRecvThreadCPUids(short[] cpuids
);
Свяжите потоки получения с cpuid для всех связей в пуле связи. Определите -1, чтобы сбросить привязку. cpuid должен быть между 0 и количеством CPU в машине.
Исключения
ClusterJUserException
если cpuid неправильный или если число элементов в cpuids не равно количеству связей в пуле связи.
ClusterJFatalInternalException
если привязка терпит неудачу из-за некоторой внутренней причины
7.5.7
Статус этой фабрики сессии.
public static final class SessionFactory.State extends, Enum<State> {
// Public Static Fieldspublic static final State Closed ;
public static final State Open ;
public static final State Reconnecting ;
// Public Static Methodspublic static State valueOf(String name );
public static State[] values();
}
Унаследовано от
java.lang.Enum:
compareTo
, equals
, getDeclaringClass
, hashCode
, Имя
, ordinal
, toString
, valueOf
Унаследовано от
java.lang.Object:
getClass
, notify
, notifyAll
, wait
7.5.7
Этот интерфейс определяет сервис для создлания SessionFactory из свойств Map<String, String>.
public interface SessionFactoryService {
// Public Methodspublic abstract SessionFactory getSessionFactory( Map<String, String> props);
}
public abstract SessionFactory
getSessionFactory(Map<String, String>
props);
Создайте или получите фабрику сессии. Если фабрика сессии с тем же самым значением PROPERTY_CLUSTER_CONNECTSTRING уже создана в VM, существующая фабрика возвращена, независимо от того, совпадают ли другие свойства фабрики с определенными в Map.
Таблица 4.74. getSessionFactory(Map<String, String>)
Параметр | Описание |
---|---|
props | свойства для фабрики сессии, в которых ключи определяются в Constants и значения описывают окружающую среду |
return | session factory |
Транзакция представляет пользовательскую транзакцию, активную в кластере.
public interface Transaction {
// Public Methodspublic abstract void begin();
public abstract void commit();
public abstract boolean getRollbackOnly();
public abstract boolean isActive();
public abstract void rollback();
public abstract void setRollbackOnly();
}
public abstract void begin
();
Начать транзакцию.
public abstract void
commit();
Передать транзакцию.
public abstract boolean
getRollbackOnly();
Эта транзакция была отмечена как rollback only?
Таблица 4.75. getRollbackOnly()
Параметр | Описание |
---|---|
return | true, если транзакция была отмечена как rollback only |
public abstract boolean
isActive();
Есть ли в настоящее время активная транзакция?
Таблица 4.76. isActive()
Параметр | Описание |
---|---|
return | true, если транзакция активна |
public abstract void
rollback();
Отменить транзакцию.
public abstract void
setRollbackOnly();
Отметьте эту транзакцию как rollback only. После того, как этот метод вызывают, commit() отменит транзакцию и бросит исключение, rollback() отменит транзакцию и не бросит исключение.
Этот пакет предоставляет аннотации для интерфейсов модели объекта области, отображенных к таблицам базы данных.
Аннотация для столбца в базе данных.
@Target(value={java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Column {
public String Имя ;
public String allowsNull ;
public String defaultValue ;
}
Позволяет ли столбец нулевым значениям быть вставленными. Это отвергает определение базы данных и требует, чтобы приложение обеспечило ненулевые значения для столбцы базы данных.
Таблица 4.77. allowsNull
Параметр | Описание |
---|---|
return | позволяет ли столбец нулевым значениям быть вставленными |
Значение по умолчанию для этой столбца.
Таблица 4.78. defaultValue
Параметр | Описание |
---|---|
return | значение по умолчанию для этой столбца |
Название столбца.
Таблица 4.79. name
Параметр | Описание |
---|---|
return | Название столбца |
Аннотация для групп столбцов. Эта аннотация используется для многостолбцовых структур, таких как индексы и ключи.
@Target(value={java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Columns {
public Column[] value ;
}
Информация об аннотации столбцов.
Таблица 4.80. value
Параметр | Описание |
---|---|
return | собственно столбцы |
Аннотация для нестандартного расширения.
@Target(value={java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Extension {
public String vendorName ;
public String key ;
public String value ;
}
Ключ для расширения (требуется).
Таблица 4.81. key
Параметр | Описание |
---|---|
return | Собственно ключ |
Значение для расширения (требуется).
Таблица 4.82. value
Параметр | Описание |
---|---|
return | Значение |
Продавец, к которому расширение относится (требуется, чтобы сделать ключ уникальным).
Таблица 4.83. vendorName
Параметр | Описание |
---|---|
return | vendor |
Аннотация для группы расширений.
@Target(value={java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Extensions {
public Extension[] value ;
}
Расширения.
Таблица 4.84. value
Параметр | Описание |
---|---|
return | Расширения |
Аннотация для индекса базы данных.
@Target(value={java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Index{
public String Имя ;
public String unique ;
public Column[] columns ;
}
Столбцы, которые составляют этот индекс.
Таблица 4.85. columns
Параметр | Описание |
---|---|
return | Столбцы, которые составляют этот индекс |
Название индекса.
Таблица 4.86. name
Параметр | Описание |
---|---|
return | Название индекса |
Уникален ли этот индекс.
Таблица 4.87 unique
Параметр | Описание |
---|---|
return | Уникален ли этот индекс |
Аннотация для группы индексов. Это используется на классе, где есть многократные определенные индексы.
@Target(value=java.lang.annotation.ElementType.TYPE) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Indices {
public Index[] value ;
}
Индексы.
Таблица 4.88 value
Параметр | Описание |
---|---|
return | Индексы |
Аннотация для Large Object (lob). Эта аннотация может использоваться с типами byte[] и InputStream для столбцов двоичных данных, с String и InputStream для символьных столбцов.
@Target(value={java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Lob {
}
Аннотация, чтобы определить, что участник не постоянный. Если используется, это единственная аннотация, позволенная на участнике.
@Target(value={java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface NotPersistent {
}
Перечисление значений обработки "null-value". Это поведение определяется в @Persistent аннотации.
public final class NullValue extends, Enum<NullValue> {
// Public Static Fieldspublic static final NullValue DEFAULT ;
public static final NullValue EXCEPTION ;
public static final NullValue NONE ;
// Public Static Methodspublic static NullValue valueOf(String name );
public static NullValue[] values();
}
Унаследовано от
java.lang.Enum:
compareTo
, equals
, getDeclaringClass
, hashCode
, Имя
, ordinal
, toString
, valueOf
Унаследовано от
java.lang.Object:
getClass
, notify
, notifyAll
, wait
Аннотация на класс или участника, чтобы определить ключ разделения. Аннотируя класс или интерфейс, отдельный столбец или многочисленные столбцы могут быть определены. Аннотируя участника, ни столбец, ни столбцы не должны быть определены.
@Target(value={java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PartitionKey {
public String column ;
public Column[] columns ;
}
Название столбца, чтобы использовать для ключа разделения.
Таблица 4.89. column
Параметр | Описание |
---|---|
return | Название столбца, чтобы использовать для ключа разделения. |
Столбец (столбцы) для ключа разделения.
Таблица 4.90. columns
Параметр | Описание |
---|---|
return | Столбец (столбцы) для ключа разделения. |
Аннотация для того, способны ли класс или интерфейс к постоянству.
@Target(value=java.lang.annotation.ElementType.TYPE) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PersistenceCapable {public String table ;
public String database ;
public String schema ;
}
Перечисление значений модификатора постоянства для участника.
public final class PersistenceModifier extends, Enum<PersistenceModifier> {
// Public Static Fieldspublic static final PersistenceModifier NONE ;
public static final PersistenceModifier PERSISTENT ;
public static final PersistenceModifier UNSPECIFIED ;
// Public Static Methodspublic static PersistenceModifier valueOf(String name);
public static PersistenceModifier[] values();
}
Унаследовано от
java.lang.Enum:
compareTo
, equals
, getDeclaringClass
, hashCode
, Имя
, ordinal
, toString
, valueOf
Унаследовано от
java.lang.Object:
getClass
, notify
, notifyAll
, wait
Аннотация для определения постоянства участника.
@Target(value={java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Persistent {public NullValue nullValue ;
public String primaryKey ;
public String column ;
public Extension[] extensions ;
}
Имя столбца, где значения сохранены для этого участника.
Таблица 4.91. column
Параметр | Описание |
---|---|
return | the name of the column |
Нестандартные расширения для этого участника.
Таблица 4.92. extensions
Параметр | Описание |
---|---|
return | Нестандартные расширения для этого участника. |
Поведение, когда этот участник содержит нулевое значение.
Таблица 4.93. nullValue
Параметр | Описание |
---|---|
return | Поведение, когда этот участник содержит нулевое значение. |
Является ли этот участник частью первичного ключа для таблицы. Это эквивалентно определению @PrimaryKey как отдельной аннотации на участника.
Таблица 4.94. primaryKey
Параметр | Описание |
---|---|
return | Является ли этот участник частью первичного ключа для таблицы. |
Аннотация на участника, чтобы определить его как члена первичного ключа класса или постоянного интерфейса.
@Target(value={java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PrimaryKey {
public String Имя ;
public String column ;
public Column[] columns ;
}
Название столбца, чтобы использовать для первичного ключа.
Таблица 4.95. column
Параметр | Описание |
---|---|
return | Название столбца, чтобы использовать для первичного ключа. |
Столбец (столбцы) для первичного ключа.
Таблица 4.96. columns
Параметр | Описание |
---|---|
return | Столбец (столбцы) для первичного ключа. |
Название ограничения первичного ключа.
Таблица 4.97. name
Параметр | Описание |
---|---|
return | Название ограничения первичного ключа. |
Аннотация на тип, чтобы определить его как проектирование таблицы. Только столбцы, отображенные к постоянным областям/методам, будут использоваться, выполняя операции на таблице.
@Target(value=java.lang.annotation.ElementType.TYPE) @Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Projection {
}
Обеспечивает интерфейсы создания запросов для ClusterJ.
Используемый, чтобы объединить многократные предикаты с логическими операциями.
public interface Predicate {
// Public Methodspublic abstract Predicate and(Predicate predicate);
public abstract Predicate not();
public abstract Predicate or(Predicate predicate );
}
public abstract Predicate
and(Predicate predicate);
Объедините этот Предикат с другим, используя "and".
Таблица 4.98. and(Predicate)
Параметр | Описание |
---|---|
predicate | tдругой предикат |
return | новый Предикат, объединяющий оба Предиката |
public abstract Predicate
not();
Отрицайте этот Предикат.
Таблица 4.99. not()
Параметр | Описание |
---|---|
return | этот предикат |
public abstract Predicate
or(Predicate predicate);
Объедините этот Предикат с другим, используя "or".
Таблица 4.100. or(Predicate)
Параметр | Описание |
---|---|
predicate | другой предикат |
return | новый Предикат, объединяющий оба Предиката |
PredicateOperand представляет столбец или параметр, который может сравниться с другим.
public interface PredicateOperand {
// Public Methodspublic abstract Predicate between(PredicateOperand lower,
PredicateOperand upper);
public abstract Predicate equal(PredicateOperand other );
public abstract Predicate greaterEqual(PredicateOperand other );
public abstract Predicate greaterThan(PredicateOperand other );
public abstract Predicate in(PredicateOperand other );
public abstract Predicate isNotNull();
public abstract Predicate isNull();
public abstract Predicate lessEqual(PredicateOperand other );
public abstract Predicate lessThan(PredicateOperand other );
public abstract Predicate like(PredicateOperand other );
}
public abstract Predicate
between(PredicateOperand lower,
PredicateOperand upper);
Возвратите представление Предиката, сравнивающее его с другим с использованием "between".
Таблица 4.101. between(PredicateOperand, PredicateOperand)
Параметр | Описание |
---|---|
lower | другой PredicateOperand |
upper | другой PredicateOperand |
return | новый Predicate |
public abstract Predicate
equal(PredicateOperand other
);
Возвратите представление Предиката, сравнивающее его с другим с использованием "equal to".
Таблица 4.102. equal(PredicateOperand)
Параметр | Описание |
---|---|
other | другой PredicateOperand |
return | новый Predicate |
public abstract Predicate
greaterEqual(PredicateOperand other
);
Возвратите представление Предиката, сравнивающее его с другим с использованием "greater than or equal to".
Таблица 4.103. greaterEqual(PredicateOperand)
Параметр | Описание |
---|---|
other | другой PredicateOperand |
return | новый Predicate |
public abstract Predicate
greaterThan(PredicateOperand other
);
Возвратите представление Предиката, сравнивающее его с другим с использованием "greater than".
Таблица 4.104. greaterThan(PredicateOperand)
Параметр | Описание |
---|---|
other | другой PredicateOperand |
return | новый Predicate |
public abstract Predicate
in(PredicateOperand other
);
Возвратите представление Предиката, сравнивающее его с коллекцией с использованием "in".
Таблица 4.105. in(PredicateOperand)
Параметр | Описание |
---|---|
other | другой PredicateOperand |
return | новый Predicate |
public abstract Predicate
isNotNull();
Возвратите представление Предиката, сравнивающее его с not null.
Таблица 4.106. isNotNull()
Параметр | Описание |
---|---|
return | новый Predicate |
public abstract Predicate
isNull();
Возвратите представление Предиката, сравнивающее его с null.
Таблица 4.107. isNull()
Параметр | Описание |
---|---|
return | новый Predicate |
public abstract Predicate
lessEqual(PredicateOperand other
);
Возвратите представление Предиката, сравнивающее его с другим с использованием "less than or equal to".
Таблица 4.108. lessEqual(PredicateOperand)
Параметр | Описание |
---|---|
other | другой PredicateOperand |
return | новый Predicate |
public abstract
Predicate lessThan(PredicateOperand
other);
Возвратите представление Предиката, сравнивающее его с другим с использованием "less than".
Таблица 4.109. lessThan(PredicateOperand)
Параметр | Описание |
---|---|
other | другой PredicateOperand |
return | новый Predicate |
public abstract Predicate
like(PredicateOperand other
);
Возвратите представление Предиката, сравнивающее его с другим с использованием "like".
Таблица 4.110. like(PredicateOperand)
Параметр | Описание |
---|---|
other | другой PredicateOperand |
return | новый Predicate |
QueryBuilder представляет фабрику для запросов.
public interface QueryBuilder {
// Public Methodspublic abstract QueryDomainType<T> createQueryDefinition( Class<T> cls);
}
public abstract
QueryDomainType<T> createQueryDefinition(
Class<T> cls);
Создайте QueryDefinition, чтобы определить запросы.
Таблица 4.111. createQueryDefinition(Class<T>)
Параметр | Описание |
---|---|
cls | класс типа, который будет запрошен |
return | QueryDomainType, чтобы определить запрос |
QueryDefinition позволяет пользователям определять запросы.
public interface QueryDefinition<E> {
// Public Methodspublic abstract Predicate not(Predicate predicate);
public abstract PredicateOperand param(String parameterName);
public abstract QueryDefinition<E> where( Predicate predicate);
}
public abstract Predicate
not(Predicate predicate);
Удобный метод отрицать предикат.
Таблица 4.112. not(Predicate)
Параметр | Описание |
---|---|
predicate | предикат для отрицания |
return | инвертированный предикат |
public abstract PredicateOperand
param(String parameterName
);
Определите параметр для запроса.
Таблица 4.113. param(String)
Параметр | Описание |
---|---|
parameterName | название параметра |
return | PredicateOperand, представляющий параметр |
public abstract
QueryDefinition<E> where(Predicate
predicate);
Определите предикат, чтобы удовлетворить запрос.
Таблица 4.114. where(Predicate)
Параметр | Описание |
---|---|
predicate | Predicate |
return | это определение запроса |
QueryDomainType представляет тип области запроса. Тип области утверждает имена свойств, которые используются, чтобы отфильтровать результаты.
public interface QueryDomainType<E> extends, QueryDefinition<E>{
// Public Methodspublic abstract PredicateOperand get(String propertyName);
public abstract Class<E> getType ();
}
public abstract PredicateOperand
get(String propertyName
);
Получите PredicateOperand, представляющий свойство типа области.
Таблица 4.115. get(String)
Параметр | Описание |
---|---|
propertyName | название свойства |
return | представление значения свойства |
public abstract Class<E>
getType();
Получите тип области запроса.
Таблица 4.116. getType()
Параметр | Описание |
---|---|
return | Тип области запроса. |
Таблица 4.117. com.mysql.clusterj.*
Имя | Описание |
---|---|
DEFAULT_PROPERTY_CLUSTER_BYTE_BUFFER_POOL_SIZES | "256, 10240, 102400, 1048576" |
DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_BATCH_SIZE | 10 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_START | 1 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_STEP | 1 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_DELAY | 5 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_RETRIES | 4 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_AFTER | 20 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_BEFORE | 30 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_TIMEOUT_MGM | 30000 |
DEFAULT_PROPERTY_CLUSTER_CONNECT_VERBOSE | 0 |
DEFAULT_PROPERTY_CLUSTER_DATABASE | "test" |
DEFAULT_PROPERTY_CLUSTER_MAX_TRANSACTIONS | 4 |
DEFAULT_PROPERTY_CONNECTION_POOL_RECV_THREAD_ACTIVATION_THRESHOLD | 8 |
DEFAULT_PROPERTY_CONNECTION_POOL_SIZE | 1 |
DEFAULT_PROPERTY_CONNECTION_RECONNECT_TIMEOUT | 0 |
ENV_CLUSTERJ_LOGGER_FACTORY_NAME | "CLUSTERJ_LOGGER_FACTORY" |
PROPERTY_CLUSTER_BYTE_BUFFER_POOL_SIZES | "com.mysql.clusterj.byte.buffer.pool.sizes" |
PROPERTY_CLUSTER_CONNECTION_SERVICE | "com.mysql.clusterj.connection.service" |
PROPERTY_CLUSTER_CONNECTSTRING | "com.mysql.clusterj.connectstring" |
PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_BATCH_SIZE | "com.mysql.clusterj.connect.autoincrement.batchsize" |
PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_START | "com.mysql.clusterj.connect.autoincrement.offset" |
PROPERTY_CLUSTER_CONNECT_AUTO_INCREMENT_STEP | "com.mysql.clusterj.connect.autoincrement.increment" |
PROPERTY_CLUSTER_CONNECT_DELAY | "com.mysql.clusterj.connect.delay" |
PROPERTY_CLUSTER_CONNECT_RETRIES | "com.mysql.clusterj.connect.retries" |
PROPERTY_CLUSTER_CONNECT_TIMEOUT_AFTER | "com.mysql.clusterj.connect.timeout.after" |
PROPERTY_CLUSTER_CONNECT_TIMEOUT_BEFORE | "com.mysql.clusterj.connect.timeout.before" |
PROPERTY_CLUSTER_CONNECT_TIMEOUT_MGM | "com.mysql.clusterj.connect.timeout.mgm" |
PROPERTY_CLUSTER_CONNECT_VERBOSE | "com.mysql.clusterj.connect.verbose" |
PROPERTY_CLUSTER_DATABASE | "com.mysql.clusterj.database" |
PROPERTY_CLUSTER_MAX_TRANSACTIONS | "com.mysql.clusterj.max.transactions" |
PROPERTY_CONNECTION_POOL_NODEIDS | "com.mysql.clusterj.connection.pool.nodeids" |
PROPERTY_CONNECTION_POOL_RECV_THREAD_ACTIVATION_THRESHOLD | "com.mysql.clusterj.connection.pool.recv.thread.activation.threshold" |
PROPERTY_CONNECTION_POOL_RECV_THREAD_CPUIDS | "com.mysql.clusterj.connection.pool.recv.thread.cpuids" |
PROPERTY_CONNECTION_POOL_SIZE | "com.mysql.clusterj.connection.pool.size" |
PROPERTY_CONNECTION_RECONNECT_TIMEOUT | "com.mysql.clusterj.connection.reconnect.timeout" |
PROPERTY_DEFER_CHANGES | "com.mysql.clusterj.defer.changes" |
PROPERTY_JDBC_DRIVER_NAME | "com.mysql.clusterj.jdbc.driver" |
PROPERTY_JDBC_PASSWORD | "com.mysql.clusterj.jdbc.password" |
PROPERTY_JDBC_URL | "com.mysql.clusterj.jdbc.url" |
PROPERTY_JDBC_USERNAME | "com.mysql.clusterj.jdbc.username" |
SESSION_FACTORY_SERVICE_CLASS_NAME | "com.mysql.clusterj.SessionFactoryService" |
SESSION_FACTORY_SERVICE_FILE_NAME | "META-INF/services/com.mysql.clusterj.SessionFactoryService" |
Таблица 4.118. com.mysql.clusterj.*
Имя | Описание |
---|---|
INDEX_USED | "IndexUsed" |
SCAN_TYPE | "ScanType" |
SCAN_TYPE_INDEX_SCAN | "INDEX_SCAN" |
SCAN_TYPE_PRIMARY_KEY | "PRIMARY_KEY" |
SCAN_TYPE_TABLE_SCAN | "TABLE_SCAN" |
SCAN_TYPE_UNIQUE_KEY | "UNIQUE_KEY" |
Эта секция обсуждает ограничения и известные проблемы в MySQL NDB Cluster Connector for Java API.
Известные проблемы в ClusterJ:
Joins: с ClusterJ запросы ограничиваются единственной таблицей. Это не проблема с JPA или JDBC, оба из которых поддерживают соединения.
Database views:
Поскольку представления базы данных MySQL не используют
NDB
, приложения ClusterJ
не могут видеть представления и таким образом
не могут получить доступ к ним. Чтобы работать с представлениями, используя
Яву, необходимо использовать JPA или JDBC.
Relations and inheritance: ClusterJ
не поддерживает отношения или наследование.
Таблицы отображены непосредственно на классы области и только операции
единственной таблицы поддерживаются.
Таблицы NDB
для NDB Cluster 7.3 и
выше понимают внешние ключи и ограничения внешнего ключа проведены в жизнь,
используя ClusterJ для вставок, обновлений и удалений.
TIMESTAMP: Сейчас ClusterJ не поддерживает тип данных timestamp для области первичного ключа.
Известные проблемы в JDBC и Connector/J: Для получения информации об ограничениях и известных проблемах с JDBC и Connector/J см. JDBC API Implementation Notes и Troubleshooting Connector/J Applications.
Известные проблемы в NDB Cluster: Для получения информации об ограничениях и других известных проблемах с кластером NDB посмотрите Known Limitations of NDB Cluster.