Статьи

Конфигурация бассейнов JBoss AS 7 EJB3

Теперь, когда AS 7.0.1 был выпущен, давайте посмотрим, какие новые функции EJB3 доступны. Как я уже упоминал в моем предыдущем посте , AS 7.0.1 теперь позволяет вам конфигурировать пулы для ваших сессионных компонентов без сохранения состояния и MDB.

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

В моем предыдущем посте я упоминал, что AS 7.0.1 имеет 2 дистрибутива. Один, который является просто webprofile, а другой (называемый «все») имеет дополнительные функции EE, такие как поддержка MDB. В этом посте я буду использовать дистрибутив «Everything» и JBOSS_HOME / standalone / configurations / standalone-preview.xml для объяснения настроек.

Прежде чем мы начнем с конфигураций, для тех из вас, кто не знаком с AS7, давайте просто посмотрим, как запустить сервер, используя определенный файл конфигурации. Сначала загрузите сервер и распакуйте двоичный файл в папку по вашему выбору. Затем из командной строки перейдите в папку «bin» установки. В этой папке вы увидите standalone.bat / standalone.sh и domain.bat / domain.sh. В этом посте мы сконцентрируемся на автономном сервере, но то же самое относится к подсистеме EJB3 в конфигурациях домена.

Запуск автономного сервера

Итак, давайте запустим сервер. Я в системе Linux, поэтому я буду использовать файл standalone.sh. Те из вас, кто работает в Windows, должны будут использовать standalone.bat.

jpai@jpai-laptop:bin$ ./standalone.sh 

Примерно через пару секунд вы увидите, что сервер запущен и работает:

  jpai@jpai-laptop:bin$ ./standalone.sh ========================================================================= JBoss Bootstrap Environment JBOSS_HOME: /NotBackedUp/jpai/jboss-as-7.0.1.Final JAVA: /opt/Java/SunJava-6/jdk1.6.0_21//bin/java JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman ========================================================================= 09:30:31,537 INFO [org.jboss.modules] JBoss Modules version 1.0.1.GA 09:30:31,765 INFO [org.jboss.msc] JBoss MSC version 1.0.0.GA 09:30:31,818 INFO [org.jboss.as] JBoss AS 7.0.1.Final "Zap" starting 09:30:32,618 WARN [org.jboss.as] No security realm defined for native management service, all access will be unrestricted. 09:30:32,693 INFO [org.jboss.as] creating http management service using network interface (management) port (9990) 09:30:32,694 WARN [org.jboss.as] No security realm defined for http management service, all access will be unrestricted. 09:30:32,703 INFO [org.jboss.as.logging] Removing bootstrap log handlers 09:30:32,720 INFO [org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying JDBC-compliant driver class org.h2.Driver (version 1.2) 09:30:32,739 INFO [org.jboss.as.clustering.infinispan.subsystem] (Controller Boot Thread) Activating Infinispan subsystem. 09:30:32,905 INFO [org.jboss.as.naming] (Controller Boot Thread) Activating Naming Subsystem 09:30:32,915 INFO [org.jboss.as.naming] (MSC service thread 1-1) Starting Naming Service 09:30:32,918 INFO [org.jboss.as.osgi] (Controller Boot Thread) Activating OSGi Subsystem 09:30:32,940 INFO [org.jboss.as.security] (Controller Boot Thread) Activating Security Subsystem 09:30:32,957 INFO [org.jboss.remoting] (MSC service thread 1-4) JBoss Remoting version 3.2.0.Beta2 09:30:32,968 INFO [org.xnio] (MSC service thread 1-4) XNIO Version 3.0.0.Beta3 09:30:32,982 INFO [org.xnio.nio] (MSC service thread 1-4) XNIO NIO Implementation Version 3.0.0.Beta3 09:30:33,182 INFO [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-4) The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /opt/Java/SunJava-6/jdk1.6.0_21/jre/lib/i386/server:/opt/Java/SunJava-6/jdk1.6.0_21/jre/lib/i386:/opt/Java/SunJava-6/jdk1.6.0_21/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib 09:30:33,203 INFO [org.jboss.as.jmx.JMXConnectorService] (MSC service thread 1-2) Starting remote JMX connector 09:30:33,209 INFO [org.jboss.as.remoting] (MSC service thread 1-1) Listening on /127.0.0.1:9999 09:30:33,232 INFO [org.jboss.as.ee] (Controller Boot Thread) Activating EE subsystem 09:30:33,390 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-4) Starting Coyote HTTP/1.1 on http--127.0.0.1-8080 09:30:33,512 INFO [org.jboss.as.connector] (MSC service thread 1-1) Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final) 09:30:33,554 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) Bound data source [java:jboss/datasources/ExampleDS] 09:30:33,919 INFO [org.jboss.as.deployment] (MSC service thread 1-4) Started FileSystemDeploymentService for directory /NotBackedUp/jpai/jboss-as-7.0.1.Final/standalone/deployments 09:30:33,931 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.1.Final "Zap" started in 2636ms - Started 93 of 148 services (55 services are passive or on-demand) 

Использование другого файла конфигурации сервера

Команда standalone.sh по умолчанию использует файл конфигурации с именем standalone.xml, который находится в папке JBOSS_HOME / standalone / configuration. Команда также позволяет указать другой файл конфигурации, чтобы запустить сервер. Как я уже упоминал ранее, я буду использовать standalone-preview.xml в этом посте. Итак, давайте запустим сервер, используя standalone-preview.xml.

 jpai@jpai-laptop:bin$ ./standalone.sh -server-config=standalone-preview.xml 

Как видите, мы передаем параметр -server-config с standalone-preview.xml в качестве значения параметра. По умолчанию файл ищется в папке JBOSS_HOME / standalone / configuration. Сервер запускается примерно за 3,5 секунды:

  09:35:59,694 INFO  [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.1.Final "Zap" started in 3586ms - Started 125 of 184 services (59 services are passive or on-demand) 

Конфигурации подсистемы EJB3

Теперь, когда мы увидели, как запустить сервер, давайте перейдем к просмотру конфигураций. В standalone-preview.xml найдите подсистему EJB3, которая выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<subsystem xmlns="urn:jboss:domain:ejb3:1.1"
      <timer-service
           <thread-pool core-threads="1" max-threads="4" /> 
           <data-store path="timer-service-data" relative-to="jboss.server.data.dir" /> 
      </timer-service
      <!-- EJB3 pools --> 
      <pools
           <bean-instance-pools
                <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" 
                                     instance-acquisition-timeout-unit="MINUTES"/> 
                <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" 
                                     instance-acquisition-timeout-unit="MINUTES"/> 
           </bean-instance-pools
      </pools
      <!-- Default MDB configurations --> 
      <mdb
           <resource-adapter-ref resource-adapter-name="hornetq-ra"/> 
           <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> 
      </mdb
      <!-- Session bean configurations --> 
      <session-bean
           <stateless
                <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/> 
           </stateless
      </session-bean
 </subsystem>

Здесь находятся конфигурации уровня подсистемы EJB3. Давайте быстро посмотрим, что некоторые из них. Первая часть конфигурации предназначена для сервисов таймера EJB3. Мы не будем вдаваться в подробности этого в этом посте.

EJB3 Бассейны

Следующая часть конфигурации — это «пулы»:

1
2
3
4
5
6
7
8
9
<!-- EJB3 pools --> 
 <pools
      <bean-instance-pools
           <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" 
                                instance-acquisition-timeout-unit="MINUTES"/> 
           <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" 
                                instance-acquisition-timeout-unit="MINUTES"/> 
      </bean-instance-pools
 </pools>

Здесь вы настраиваете пулы, используемые EJB3. В элементе «pool» вы можете настроить пулы экземпляров компонентов с помощью элемента «bean-instance-pool». В AS 7.0.1 мы поддерживаем только «strict-max-pool» в качестве пула экземпляров компонента.

Строгий максимальный пул позволяет настроить максимальный верхний предел для пула. Во время выполнения, когда все экземпляры bean-компонентов из пула используются и поступает новый запрос вызова bean-компонента, пул блокирует запрос до тех пор, пока не будет доступен следующий экземпляр bean-компонента или пока не истечет тайм-аут (установленный в instance-acquisition-timeout) , Каждый бассейн имеет уникальное имя. Приведенные выше конфигурации показывают 2 пула строгого максимума с именами «slsb-strict-max-pool» и «mdb-strict-max-pool». Вы можете добавить новый строгий максимальный пул и установить уникальное имя по вашему выбору. Вы можете либо отредактировать XML вручную (когда сервер не работает), чтобы добавить новый строгий максимальный пул, либо вы можете использовать клиент командной строки (CLI), который поставляется с AS7. Мы увидим, как использовать CLI, позже в этом посте.

Управляемые сообщениями компоненты EJB

Давайте теперь перейдем к следующим конфигурациям в этой подсистеме EJB3:

1
2
3
4
5
<!-- Default MDB configurations --> 
<mdb
     <resource-adapter-ref resource-adapter-name="hornetq-ra"/> 
     <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> 
</mdb>

Этот раздел настраивает MDB с настройками по умолчанию.

Адаптер ресурсов по умолчанию для MDB

Элемент «resource-adapter-ref» определяет ресурс-адаптер по умолчанию, который будет использоваться MDB. В этом примере показано, что мы используем hornetq-ra в качестве RA по умолчанию.


Пул экземпляров bean по умолчанию для MDB

Bean-instance-pool-ref действует как ссылка на bean-instance-pool, который будет использоваться в качестве конфигурации пула по умолчанию для всех MDB. В этом примере мы видим, что он указывает на «mdb-strict-max-pool», который мы видели в предыдущем разделе, был настроен как строгий максимальный пул с 20 в качестве верхнего предела для пула. Если вы хотите изменить пул экземпляров компонента по умолчанию для MDB, просто измените атрибут имени пула элемента bean-instance-pool-ref на другой доступный пул экземпляра компонента. Вы можете сделать это, отредактировав xml напрямую (когда сервер не работает) или использовать CLI для этого (позже мы увидим, как это делается).

Конфигурации сессионного компонента без сохранения состояния

Переходя к следующему разделу в конфигурациях EJB3, вы увидите:

1
2
3
4
5
6
<!-- Session bean configurations --> 
<session-bean
     <stateless
          <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/> 
     </stateless
</session-bean>

Здесь вы конфигурируете настройки по умолчанию для сессионных компонентов. Как мы видели в MDB, приведенная выше конфигурация показывает, как мы настраиваем пул экземпляров bean по умолчанию для bean-компонентов сеансов без состояния. Здесь мы видим, что «slsb-strict-max-pool» используется по умолчанию. Как и для MDB, вы можете изменить пул экземпляров bean-компонентов по умолчанию для сеансовых компонентов без сохранения состояния, изменив атрибут pool-name элемента bean-instance-pool-ref либо непосредственно в xml, либо через CLI.

Использование клиента командной строки (CLI)

AS7 поставляется с мощным клиентом командной строки. Обратитесь к документации AS7 по CLI для быстрого ознакомления. Клиентский инструмент командной строки запускается с использованием сценариев jboss-admin.sh/jboss-admin.bat, которые доступны в папке JBOSS_HOME / bin:

 jpai@jpai-laptop:bin$ ./jboss-admin.sh 

При запуске этого скрипта вы увидите следующее сообщение, которое заставляет вас подключиться к серверу:

  You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. [disconnected /] 

Для CLI требуется работающий сервер для подключения. Поэтому, если вы еще не запустили сервер, сначала запустите его (как описано в одном из разделов выше). Теперь давайте подключимся к серверу через командную строку:

  [disconnected /] connect Connected to standalone controller at localhost:9999 [standalone@localhost:9999 /] 

Таким образом, CLI теперь подключен к серверу, который прослушивает localhost через порт 9999. CLI может быть передано другое имя хоста и порт для подключения, но давайте сейчас не будем вдаваться в это.

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

Создайте новый пул экземпляра строгого максимального бина из CLI

После подключения к серверу из интерфейса командной строки вы можете создать новый строгий пул экземпляров max bean следующим образом:

  [standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=new-pool:add 

Я бы порекомендовал вам прочитать документацию по CLI, чтобы лучше понять команду. Но позвольте мне кратко разделить приведенную выше команду и объяснить, что делает каждая часть.

Важно отметить, что вам не нужно вводить все это в CLI. CLI предоставляет очень (очень) полезную функцию завершения вкладки! Поэтому, введя / subsystem = и нажав на вкладку, вы увидите доступные опции.

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

Из документации CLI:

Запрос операции в основном состоит из трех частей: адрес, имя операции и необязательный набор параметров.

Формальная спецификация для запроса операции:

  [/node-type=node-name (/node-type=node-name)*] : operation-name [( [parameter-name=parameter-value (,parameter-name=parameter-value)*] )] 

В этом примере наша цель — создать новый строгий пул экземпляров max bean. Это можно сделать, выполнив операцию добавления. В команде, которую я разместил выше, обратите внимание на использование «: add» в конце. Операция всегда начинается с «:», за которым следует имя операции. Таким образом, в приведенном выше примере мы выполняем операцию «: добавить».

Теперь операция добавления должна быть выполнена на определенном «ресурсе». т.е. сервер должен знать что добавить и где. Это называется адресацией. Чтобы запустить операцию, необходимо предоставить адрес (не путайте это с «адресом» имени хоста / порта сервера, это совершенно другое). В терминах управления AS7 сервер состоит из управляемых «ресурсов», и каждый ресурс имеет свой собственный адрес. Например, каждая из подсистем, которые составляют конфигурацию сервера, может быть адресована. Чтобы обратиться к подсистеме ejb3 из клиента командной строки, используйте / subsystem = ejb3 (вы можете использовать завершение вкладки).

Допустим, наш новый пул, который мы создаем, будет называться «новый пул». Таким образом, в конечном итоге адрес, по которому нужно выполнить операцию добавления, будет выглядеть так:

  /subsystem=ejb3/strict-max-bean-instance-pool=new-pool 

Наконец, мы скомбинируем адрес и операцию и запустим ее из CLI

  [standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=new-pool:add 

Успешное завершение операции покажет вам следующий результат:

  [standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=new-pool:add {"outcome" => "success"} 

Все операции управления сохраняются в файле конфигурации сервера. В нашем случае это standalone-preview.xml, поскольку мы использовали его для запуска сервера.

После выполнения этой операции вы теперь можете открыть standalone-preview.xml в текстовом редакторе и заметить, что в пул bean-instance-pool добавлен новый строгий пул экземпляров max bean с именем «new-pool»:

1
2
3
4
5
6
7
<pools
      <bean-instance-pools
           <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> 
           <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> 
           <strict-max-pool name="new-pool"/> 
      </bean-instance-pools
 </pools>

Максимальный размер пула и другие атрибуты не были установлены, и будут использоваться значения по умолчанию. Это потому, что во время выполнения операции мы не указывали никаких значений для этих атрибутов. Давайте теперь попробуем выполнить команду для создания еще одного пула (с именем «take2») с некоторыми конкретными значениями атрибутов. Команда теперь будет выглядеть так:

  [standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=take2:add(max-pool-size=15,timeout=2) 

Таким образом, приведенная выше команда аналогична предыдущей, за исключением того, что имя пула — «take2», и мы дополнительно определили максимальный размер пула 15 и тайм-аут 2, и единица тайм-аута будет значением по умолчанию. Обратите внимание, что вы можете использовать завершение табуляции при написании этой команды. Запустив эту команду, вы увидите следующий вывод:

  [standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=take2:add(max-pool-size=15,timeout=2) {"outcome" => "success"} 

Standalone-preview.xml теперь будет выглядеть так:

1
2
3
4
5
6
7
8
<pools
      <bean-instance-pools
           <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> 
           <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> 
           <strict-max-pool name="new-pool"/> 
           <strict-max-pool name="take2" max-pool-size="15" instance-acquisition-timeout="2"/> 
      </bean-instance-pools
 </pools>

Обратите внимание на пул «take2», в котором значения max-pool-size и instance-instance-timeout установлены на то, что мы указали в CLI.

Вот как вы создаете новый пул экземпляров bean-компонентов из CLI.

Установка / изменение пула экземпляров bean по умолчанию, используемого MDB и SLSB

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

Давайте сначала посмотрим, как это делается для MDB:

  [standalone@localhost:9999 /] /subsystem=ejb3:write-attribute(name=default-mdb-instance-pool, value=take2) 

Поэтому мы запускаем операцию «write-attribute» для адреса / subsystem = ejb3, чтобы записать атрибут с именем «default-mdb-instance-pool» со ​​значением «take2». По сути, эта команда изменит пул экземпляров компонента MDB по умолчанию с «mdb-strict-max-pool» (помните, мы видели это ранее в standalone-preview.xml, в разделе bean-instance-pool-ref MDB) в пул «take2», который мы создали несколько шагов назад. Выполнение этой команды покажет вам следующий вывод

  [standalone@localhost:9999 /] /subsystem=ejb3:write-attribute(name=default-mdb-instance-pool, value=take2) {"outcome" => "success"} 

Если вы откроете standalone-preview.xml в текстовом редакторе, вы заметите, что изменения были сделаны — конфигурация MDB теперь использует «take2» в качестве конфигурации пула по умолчанию для всех MDB (впредь).

1
2
3
4
<mdb
      <resource-adapter-ref resource-adapter-name="hornetq-ra"/> 
      <bean-instance-pool-ref pool-name="take2"/> 
 </mdb>

То же самое можно сделать и для конфигурации сессионного компонента без сохранения состояния. Команда:

  [standalone@localhost:9999 /] /subsystem=ejb3:write-attribute(name=default-slsb-instance-pool, value=new-pool) {"outcome" => "success"} 

Здесь мы устанавливаем default-slsb-instance-pool на «новый-пул», который мы создали ранее. Файл standalone-preview.xml теперь будет выглядеть так:

1
2
3
4
5
<session-bean
      <stateless
           <bean-instance-pool-ref pool-name="new-pool"/> 
      </stateless
 </session-bean>

Ну это все! Теперь мы использовали CLI для настройки / управления нашими пулами EJB3.

Отключение пула для MDB и сессионных компонентов без сохранения состояния

Мы также разрешаем отключение объединения для MDB и SLSB. Однако это не всегда рекомендуется, так как это может повлиять на производительность. Если вы, как разработчик, знаете, что ваши bean-компоненты не слишком тяжелы во время конструирования (т.е. ничего в конструкторе и ничего в @PostConstruct), то иногда это помогает отключить пул для bean-компонентов. В настоящее время единственный способ сделать это — удалить элемент из элементов и / или в конфигурации подсистемы EJB3. В настоящее время у нас нет способа сделать это через CLI, и у нас нет способа указать это на уровне развертывания или на уровне компонента.

Итак, если вы знаете, что отключение пула приносит вам пользу, то вы можете его отключить.

Резюме

Я не думал, что этот блог станет таким длинным. Но так как большая часть этого нова в AS7, стоило написать это. Итак, в этом блоге мы увидели, как и где настраиваются пулы экземпляров бинов EJB3, как создавать новые пулы экземпляров бинов, как изменять пулы экземпляров бинов по умолчанию для MDB и сессионных бинов без сохранения состояния. Мы также видели, как все это можно сделать с помощью CLI в AS7.

Ссылка: JBoss AS 7.0.1 — Конфигурирование пулов EJB3 от нашего партнера JCG Jaikirian в блоге «Jaitech WriteUps» .

Статьи по Теме :