Spec-Zone .ru
спецификации, руководства, описания, API
|
|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЕЙМЫ НИКАКИЕ ФРЕЙМЫ | ||||||||
СВОДКА: ВЛОЖЕННЫЙ | ПОЛЕ | CONSTR | МЕТОД | ДЕТАЛЬ: ПОЛЕ | CONSTR | МЕТОД |
public interface Session
A Session
объект является однопоточным контекстом для создания и потребления сообщений. Хотя это может выделить ресурсы провайдера вне виртуальной машины Java (JVM), это считают легким объектом JMS.
Сеанс служит нескольким целям:
TemporaryTopics
и TemporaryQueues
. Queue
или Topic
объекты для тех клиентов, которые должны динамически управлять специфичными для провайдера целевыми именами. QueueBrowsers
. Сеанс может создать и служба многократные производители сообщения и потребители.
У одного типичного использования должен быть блок потока на синхронном MessageConsumer
пока сообщение не прибывает. Поток может тогда использовать один или больше Session
's MessageProducer
s.
Если клиентские требования иметь один поток производят сообщения, в то время как другие используют их, клиент должен использовать отдельный сеанс для его потока создания.
Как только соединение было запущено, любой сеанс с один или более зарегистрированные слушатели сообщения выделяется потоку управления, которое передает сообщения к этому. Это ошибочно для клиентского кода, чтобы использовать этот сеанс или любой из его составляющих объектов от другого потока управления. Единственное исключение к этому правилу является использованием сеанса или соединения close
метод.
Для большинства клиентов должно быть легко разделить их работу естественно в сеансы. Эта модель позволяет клиентам запускаться просто и с приращением добавлять сложность обработки сообщения, поскольку их потребность в параллелизме растет.
close
метод является единственным методом сеанса, который можно вызвать, в то время как некоторый другой метод сеанса выполняется в другом потоке.
Сеанс может быть определен как проведено. Каждый проведенный сеанс поддерживает единственную серию транзакций. Каждая транзакция группы, которые ряд сообщения отправляет и ряд сообщения, получает в атомарную единицу работы. В действительности транзакции организуют поток входного сигнала сеанса и поток выходного сигнала в серию атомарных модулей. Когда транзакция фиксирует, ее атомарный модуль ввода подтверждается, и ее связанная атомарная единица продукции отправляется. Если откат транзакции делается, отправленные сообщения транзакции уничтожаются, и ввод сеанса автоматически восстанавливается.
Контент модулей ввода и вывода транзакции является просто теми сообщениями, которые были произведены и использованы в пределах текущей транзакции сеанса.
Транзакция завершается, используя любой ее сеанс commit
метод или его сеанс rollback
метод. Завершение текущей транзакции сеанса автоматически начинает следующее. Результат состоит в том, что у проведенного сеанса всегда есть текущая транзакция, в пределах которой делается ее работа.
Служба Транзакции Java (JTS) или некоторый другой монитор транзакций могут использоваться, чтобы объединить транзакцию сеанса с транзакциями на других ресурсах (базы данных, другие сеансы JMS, и т.д.). Так как распределенными транзакциями Java управляют через API Транзакции Java (JTA), использование сеанса commit
и rollback
методы в этом контексте запрещаются.
API JMS не требует поддержки JTA; однако, это действительно определяет, как провайдер предоставляет эту поддержку.
Хотя для клиента JMS также возможно обработать распределенные транзакции непосредственно, маловероятно, что много клиентов JMS сделают это. Поддержка JTA в API JMS предназначается в системных поставщиках, которые будут интегрировать API JMS в их продукты сервера приложений.
QueueSession
, TopicSession
, XASession
Полевая Сводка | |
---|---|
static int |
AUTO_ACKNOWLEDGE
С этим режимом подтверждения сеанс автоматически подтверждает получение клиента сообщения также, когда сеанс успешно возвратился из звонка receive или когда слушатель сообщения, которого сеанс вызвал, чтобы обработать сообщение успешно, возвращается. |
static int |
CLIENT_ACKNOWLEDGE
С этим режимом подтверждения клиент подтверждает использованное сообщение, вызывая сообщение acknowledge метод. |
static int |
DUPS_OK_ACKNOWLEDGE
Этот режим подтверждения дает сеансу команду лениво подтверждать поставку сообщений. |
static int |
SESSION_TRANSACTED
Это значение возвращается из метода getAcknowledgeMode если сеанс проводится. |
Сводка метода | |
---|---|
void |
close()
Закрывает сеанс. |
void |
commit()
В настоящий момент сохранены фиксации все сообщения, сделанные в этой транзакции и выпусках любые блокировки. |
QueueBrowser |
createBrowser(Queue queue)
Создает a QueueBrowser возразите, чтобы посмотреть на сообщения на указанной очереди. |
QueueBrowser |
createBrowser(Queue queue, java.lang.String messageSelector)
Создает a QueueBrowser возразите, чтобы посмотреть на сообщения на указанной очереди, использующей селектор сообщения. |
BytesMessage |
createBytesMessage()
Создает a BytesMessage объект. |
MessageConsumer |
createConsumer(Destination destination)
Создает a MessageConsumer для указанного места назначения. |
MessageConsumer |
createConsumer(Destination destination, java.lang.String messageSelector)
Создает a MessageConsumer для указанного места назначения, используя селектор сообщения. |
MessageConsumer |
createConsumer(Destination destination, java.lang.String messageSelector, boolean NoLocal)
Создает MessageConsumer для указанного места назначения, используя селектор сообщения. |
TopicSubscriber |
createDurableSubscriber(Topic topic, java.lang.String name)
Создает длительного подписчика к указанной теме. |
TopicSubscriber |
createDurableSubscriber(Topic topic, java.lang.String name, java.lang.String messageSelector, boolean noLocal)
Создает длительного подписчика к указанной теме, используя селектор сообщения и определяя, должны ли сообщения, опубликованные его собственным соединением, быть переданы к этому. |
MapMessage |
createMapMessage()
Создает a MapMessage объект. |
Сообщение |
createMessage()
Создает a Message объект. |
ObjectMessage |
createObjectMessage()
Создает ObjectMessage объект. |
ObjectMessage |
createObjectMessage(java.io.Serializable object)
Создает инициализированный ObjectMessage объект. |
MessageProducer |
createProducer(Destination destination)
Создает a MessageProducer отправить сообщения указанному месту назначения. |
Очередь |
createQueue(java.lang.String queueName)
Создает идентификационные данные очереди, данные a Queue имя. |
StreamMessage |
createStreamMessage()
Создает a StreamMessage объект. |
TemporaryQueue |
createTemporaryQueue()
Создает a TemporaryQueue объект. |
TemporaryTopic |
createTemporaryTopic()
Создает a TemporaryTopic объект. |
TextMessage |
createTextMessage()
Создает a TextMessage объект. |
TextMessage |
createTextMessage(java.lang.String text)
Создает инициализированный TextMessage объект. |
Тема |
createTopic(java.lang.String topicName)
Создает идентификационные данные темы, данные a Topic имя. |
int |
getAcknowledgeMode()
Возвращает режим подтверждения сеанса. |
MessageListener |
getMessageListener()
Возвращает выдающегося (дополнительного) слушателя сообщения сеанса. |
boolean |
getTransacted()
Указывает, является ли сеанс в транзакционном режиме. |
void |
recover()
Доставка сообщений остановок в этом сеансе, и доставка сообщений перезапусков с самым старым непризнанным сообщением. |
void |
rollback()
Откатывает любые сообщения, сделанные в этой транзакции, и выпускает любые блокировки, в настоящий момент сохраненные. |
void |
run()
Дополнительная работа, предназначенная, чтобы использоваться только Серверами приложений, не обычными клиентами JMS. |
void |
setMessageListener(MessageListener listener)
Устанавливает выдающегося (дополнительного) слушателя сообщения сеанса. |
void |
unsubscribe(java.lang.String name)
Отписывает длительную подписку, которая была создана клиентом. |
Полевая Деталь |
---|
static final int AUTO_ACKNOWLEDGE
receive
или когда слушатель сообщения, которого сеанс вызвал, чтобы обработать сообщение успешно, возвращается.
static final int CLIENT_ACKNOWLEDGE
acknowledge
метод. Подтверждение использованного сообщения подтверждает все сообщения, что сеанс использовал. Когда клиентский режим подтверждения используется, клиент может создать большое количество непризнанных сообщений, пытаясь обработать их. Провайдер JMS должен предоставить администраторам способ ограничить клиент, превышенный так, чтобы клиенты не управлялись к исчерпанию ресурса и следующему отказу, когда некоторый ресурс, который они используют, временно блокируется.
Message.acknowledge()
, Постоянные Значения полейstatic final int DUPS_OK_ACKNOWLEDGE
static final int SESSION_TRANSACTED
getAcknowledgeMode
если сеанс проводится. Если a Session
проводится, режим подтверждения игнорируется.
Деталь метода |
---|
BytesMessage createBytesMessage() throws JMSException
BytesMessage
объект. A BytesMessage
объект используется, чтобы отправить сообщение, содержащее поток неинтерпретируемых байтов.
JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.MapMessage createMapMessage() throws JMSException
MapMessage
объект. A MapMessage
объект используется, чтобы отправить набор самоопределения пар значение-имя, где имена String
объекты и значения являются примитивными значениями в языке программирования Java.
JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.Message createMessage() throws JMSException
Message
объект. Message
интерфейс является корневым интерфейсом всех сообщений JMS. A Message
объект содержит всю стандартную информацию о заголовке сообщения. Это может быть отправлено, когда сообщение, содержащее только информацию о заголовке, достаточно.
JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.ObjectMessage createObjectMessage() throws JMSException
ObjectMessage
объект. ObjectMessage
объект используется, чтобы отправить сообщение, которое содержит сериализуемый объект Java.
JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.ObjectMessage createObjectMessage(java.io.Serializable object) throws JMSException
ObjectMessage
объект. ObjectMessage
объект используется, чтобы отправить сообщение, которое содержит сериализуемый объект Java.
object
- объект использовать, чтобы инициализировать это сообщение JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.StreamMessage createStreamMessage() throws JMSException
StreamMessage
объект. A StreamMessage
объект используется, чтобы отправить поток самоопределения примитивных значений в языке программирования Java.
JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.TextMessage createTextMessage() throws JMSException
TextMessage
объект. A TextMessage
объект используется, чтобы отправить сообщение, содержащее a String
объект.
JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.TextMessage createTextMessage(java.lang.String text) throws JMSException
TextMessage
объект. A TextMessage
объект используется, чтобы отправить сообщение, содержащее a String
.
text
- строка, используемая, чтобы инициализировать это сообщение JMSException
- если провайдер JMS не в состоянии создать это сообщение из-за некоторой внутренней ошибки.boolean getTransacted() throws JMSException
JMSException
- если провайдер JMS не в состоянии возвратить режим транзакции из-за некоторой внутренней ошибки.int getAcknowledgeMode() throws JMSException
JMSException
- если провайдер JMS не в состоянии возвратить режим подтверждения из-за некоторой внутренней ошибки.Connection#createSession
void commit() throws JMSException
JMSException
- если провайдер JMS не в состоянии фиксировать транзакцию из-за некоторой внутренней ошибки. TransactionRolledBackException
- если транзакция откатывается из-за некоторой внутренней ошибки во время фиксации. IllegalStateException
- если метод не вызывает проведенный сеанс.void rollback() throws JMSException
JMSException
- если провайдер JMS не в состоянии откатывать транзакцию из-за некоторой внутренней ошибки. IllegalStateException
- если метод не вызывает проведенный сеанс.void close() throws JMSException
Так как провайдер может выделить некоторые ресурсы от имени сеанса вне JVM, клиенты должны закрыть ресурсы, когда они не необходимы. Доверие сборке "мусора", чтобы в конечном счете исправить эти ресурсы, возможно, не достаточно своевременно.
Нет никакой потребности закрыть производителей и потребителей закрытого сеанса.
Этот вызов блокирует до a receive
вызовите или обменивайтесь сообщениями, происходящий слушатель завершился. Блокированный потребитель сообщения receive
вызовите возвраты null
когда этот сеанс закрывается.
Закрытие проведенного сеанса должно откатывать происходящую транзакцию.
Этот метод является единственным Session
метод, который можно вызвать одновременно.
Вызов любого другого Session
метод на закрытом сеансе должен бросить a JMSException.IllegalStateException
. Закрытие закрытого сеанса не должно выдать исключение.
JMSException
- если провайдер JMS не в состоянии закрыть сеанс из-за некоторой внутренней ошибки.void recover() throws JMSException
Все потребители передают сообщения в последовательном порядке. Подтверждение полученного сообщения автоматически подтверждает все сообщения, которые были переданы клиенту.
Перезапуск сеанса заставляет это предпринимать следующие меры:
JMSException
- если провайдер JMS не в состоянии остановить и перезапустить доставку сообщений из-за некоторой внутренней ошибки. IllegalStateException
- если метод вызывает проведенный сеанс.MessageListener getMessageListener() throws JMSException
JMSException
- если провайдер JMS не в состоянии получить слушателя сообщения из-за внутренней ошибки.setMessageListener(javax.jms.MessageListener)
, ServerSessionPool
, ServerSession
void setMessageListener(MessageListener listener) throws JMSException
Когда выдающийся слушатель сообщения устанавливается, никакая другая форма получения сообщения в сеансе не может использоваться; однако, все формы отправки сообщений все еще поддерживаются.
Это - опытное средство, не используемое регулярными клиентами JMS.
listener
- слушатель сообщения, чтобы связаться с этим сеансом JMSException
- если провайдер JMS не в состоянии установить слушателя сообщения из-за внутренней ошибки.getMessageListener()
, ServerSessionPool
, ServerSession
void run()
run
в интерфейсе java.lang.Runnable
ServerSession
MessageProducer createProducer(Destination destination) throws JMSException
MessageProducer
отправить сообщения указанному месту назначения. Клиент использует a MessageProducer
объект отправить сообщения месту назначения. С тех пор Queue
и Topic
оба наследовались от Destination
, они могут использоваться в целевом параметре, чтобы создать a MessageProducer
объект.
destination
- Destination
передаться к, или нуль, если это - производитель, у которого нет указанного места назначения. JMSException
- если сеанс не в состоянии создать MessageProducer из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимое место назначения определяется.MessageConsumer createConsumer(Destination destination) throws JMSException
MessageConsumer
для указанного места назначения. С тех пор Queue
и Topic
оба наследовались от Destination
, они могут использоваться в целевом параметре, чтобы создать a MessageConsumer
.
destination
- Destination
к доступу. JMSException
- если сеанс не в состоянии создать потребителя из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимое место назначения определяется.MessageConsumer createConsumer(Destination destination, java.lang.String messageSelector) throws JMSException
MessageConsumer
для указанного места назначения, используя селектор сообщения. С тех пор Queue
и Topic
оба наследовались от Destination
, они могут использоваться в целевом параметре, чтобы создать a MessageConsumer
. Клиент использует a MessageConsumer
объект получить сообщения, которые были отправлены месту назначения.
destination
- Destination
к доступуmessageSelector
- только сообщения со свойствами, соответствующими выражение селектора сообщения, передаются. Значение нуля или пустой строки указывает, что нет никакого селектора сообщения для потребителя сообщения. JMSException
- если сеанс не в состоянии создать MessageConsumer из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимое место назначения определяется. InvalidSelectorException
- если селектор сообщения недопустим.MessageConsumer createConsumer(Destination destination, java.lang.String messageSelector, boolean NoLocal) throws JMSException
MessageConsumer
для указанного места назначения, используя селектор сообщения. Этот метод может определить, должны ли сообщения, опубликованные его собственным соединением, быть переданы к этому, если место назначения является темой. С тех пор Queue
и Topic
оба наследовались от Destination
, они могут использоваться в целевом параметре, чтобы создать a MessageConsumer
.
Клиент использует a MessageConsumer
объект получить сообщения, которые были опубликованы месту назначения.
В некоторых случаях соединение может и опубликовать и подписаться на тему. Потребитель NoLocal
атрибут позволяет потребителю подавлять поставку сообщений, опубликованных ее собственным соединением. Значение по умолчанию для этого атрибута является Ложью. noLocal
значение должно поддерживаться местами назначения, которые являются темами.
destination
- Destination
к доступуmessageSelector
- только сообщения со свойствами, соответствующими выражение селектора сообщения, передаются. Значение нуля или пустой строки указывает, что нет никакого селектора сообщения для потребителя сообщения.NoLocal
- если это правда, и место назначения тема, запрещает поставку сообщений, опубликованных ее собственным соединением. Поведение для NoLocal
не определяется, если место назначения является очередью. JMSException
- если сеанс не в состоянии создать MessageConsumer из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимое место назначения определяется. InvalidSelectorException
- если селектор сообщения недопустим.Queue createQueue(java.lang.String queueName) throws JMSException
Queue
имя. Это средство предоставляется для редких случаев, где клиенты должны динамически управлять идентификационными данными очереди. Это позволяет создание идентификационных данных очереди со специфичным для провайдера именем. Клиенты, которые зависят от этой возможности, не переносимы.
Отметьте, что этот метод не для того, чтобы создать физическую очередь. Физическое создание очередей является задачей администрирования и не должно инициироваться API JMS. Одно исключение является созданием временных очередей, которое выполняется с createTemporaryQueue
метод.
queueName
- имя этого Queue
Queue
с именем JMSException
- если сеанс не в состоянии создать очередь из-за некоторой внутренней ошибки.Topic createTopic(java.lang.String topicName) throws JMSException
Topic
имя. Это средство предоставляется для редких случаев, где клиенты должны динамически управлять идентификационными данными темы. Это позволяет создание идентификационных данных темы со специфичным для провайдера именем. Клиенты, которые зависят от этой возможности, не переносимы.
Отметьте, что этот метод не для того, чтобы создать физическую тему. Физическое создание тем является задачей администрирования и не должно инициироваться API JMS. Одно исключение является созданием временных тем, которое выполняется с createTemporaryTopic
метод.
topicName
- имя этого Topic
Topic
с именем JMSException
- если сеанс не в состоянии создать тему из-за некоторой внутренней ошибки.TopicSubscriber createDurableSubscriber(Topic topic, java.lang.String name) throws JMSException
Если клиент должен получить все сообщения, опубликованные на теме, включая тех опубликованных, в то время как подписчик неактивен, она использует длительное TopicSubscriber
. Провайдер JMS сохраняет запись этой длительной подписки и обеспечивает, чтобы все сообщения от издателей темы были сохранены, пока они не подтверждаются этим длительным подписчиком, или они истекли.
Сеансы с длительными подписчиками должны всегда обеспечивать тот же самый клиентский идентификатор. Кроме того, каждый клиент должен определить имя, которое однозначно определяет (в пределах клиентского идентификатора) каждую длительную подписку, которую он создает. Только у одного сеанса за один раз может быть a TopicSubscriber
для определенной длительной подписки.
Клиент может изменить существующую длительную подписку, создавая длительное TopicSubscriber
с тем же самым именем и новой темой и/или селектором сообщения. Изменение длительного подписчика эквивалентно отмене подписки (удаления) старого и создания нового.
В некоторых случаях соединение может и опубликовать и подписаться на тему. Подписчик NoLocal
атрибут позволяет подписчику подавлять поставку сообщений, опубликованных ее собственным соединением. Значение по умолчанию для этого атрибута является ложью.
topic
- невременное Topic
подписываться наname
- имя, используемое, чтобы идентифицировать эту подписку JMSException
- если сеанс не в состоянии создать подписчика из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимая тема определяется.TopicSubscriber createDurableSubscriber(Topic topic, java.lang.String name, java.lang.String messageSelector, boolean noLocal) throws JMSException
Если клиент должен получить все сообщения, опубликованные на теме, включая тех опубликованных, в то время как подписчик неактивен, она использует длительное TopicSubscriber
. Провайдер JMS сохраняет запись этой длительной подписки и обеспечивает, чтобы все сообщения от издателей темы были сохранены, пока они не подтверждаются этим длительным подписчиком, или они истекли.
Сеансы с длительными подписчиками должны всегда обеспечивать тот же самый клиентский идентификатор. Кроме того, каждый клиент должен определить имя, которое однозначно определяет (в пределах клиентского идентификатора) каждую длительную подписку, которую он создает. Только у одного сеанса за один раз может быть a TopicSubscriber
для определенной длительной подписки. Неактивный длительный подписчик является тем, который существует, но в настоящий момент не связывал потребителя сообщения с этим.
Клиент может изменить существующую длительную подписку, создавая длительное TopicSubscriber
с тем же самым именем и новой темой и/или селектором сообщения. Изменение длительного подписчика эквивалентно отмене подписки (удаления) старого и создания нового.
topic
- невременное Topic
подписываться наname
- имя, используемое, чтобы идентифицировать эту подпискуmessageSelector
- только сообщения со свойствами, соответствующими выражение селектора сообщения, передаются. Значение нуля или пустой строки указывает, что нет никакого селектора сообщения для потребителя сообщения.noLocal
- если установлено, запрещает поставку сообщений, опубликованных ее собственным соединением JMSException
- если сеанс не в состоянии создать подписчика из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимая тема определяется. InvalidSelectorException
- если селектор сообщения недопустим.QueueBrowser createBrowser(Queue queue) throws JMSException
QueueBrowser
возразите, чтобы посмотреть на сообщения на указанной очереди.
queue
- queue
к доступу JMSException
- если сеанс не в состоянии создать браузер из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимое место назначения определяетсяQueueBrowser createBrowser(Queue queue, java.lang.String messageSelector) throws JMSException
QueueBrowser
возразите, чтобы посмотреть на сообщения на указанной очереди, использующей селектор сообщения.
queue
- queue
к доступуmessageSelector
- только сообщения со свойствами, соответствующими выражение селектора сообщения, передаются. Значение нуля или пустой строки указывает, что нет никакого селектора сообщения для потребителя сообщения. JMSException
- если сеанс не в состоянии создать браузер из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимое место назначения определяется InvalidSelectorException
- если селектор сообщения недопустим.TemporaryQueue createTemporaryQueue() throws JMSException
TemporaryQueue
объект. Его время жизни будет временем жизни Connection
если это не удаляется ранее.
JMSException
- если сеанс не в состоянии создать временную очередь из-за некоторой внутренней ошибки.TemporaryTopic createTemporaryTopic() throws JMSException
TemporaryTopic
объект. Его время жизни будет временем жизни Connection
если это не удаляется ранее.
JMSException
- если сеанс не в состоянии создать временную тему из-за некоторой внутренней ошибки.void unsubscribe(java.lang.String name) throws JMSException
Этот метод удаляет состояние, сохраняемое от имени подписчика его провайдером.
Это ошибочно для клиента, чтобы удалить длительную подписку, в то время как есть активное MessageConsumer
или TopicSubscriber
для подписки, или в то время как использованное сообщение является частью транзакции на ожидании или не было подтверждено в сеансе.
name
- имя, используемое, чтобы идентифицировать эту подписку JMSException
- если сеанс не в состоянии отписаться к длительной подписке из-за некоторой внутренней ошибки. InvalidDestinationException
- если недопустимое имя подписки определяется.
|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЕЙМЫ НИКАКИЕ ФРЕЙМЫ | ||||||||
СВОДКА: ВЛОЖЕННЫЙ | ПОЛЕ | CONSTR | МЕТОД | ДЕТАЛЬ: ПОЛЕ | CONSTR | МЕТОД |
Авторское право © 2009-2011, Oracle Corporation и/или его филиалы. Все права защищены. Использование подвергается
Сгенерированный на 10-February-2011 12:41