當前,我們允許在子系統級別配置池,這意味著該池將適用于服務器上部署的所有Bean。 在一些即將發布的版本中,我們將允許在單個部署和單個Bean級別上配置池。 現在,讓我們看看子系統級別的配置。
在我以前的文章中,我提到AS 7.0.1有2個發行版。 一個純粹是webprofile,另一個(稱為“ everything”)具有其他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子系統:
<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池
下一個配置是“池”:
<!-- 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使用的池。 在“ pools”元素中,可以使用“ bean-instance-pools”元素配置bean實例池。 在AS 7.0.1中,我們僅支持“ strict-max-pool”作為bean實例池。
嚴格的最大池允許您配置池的最大上限。 在運行時,當池中的所有bean實例都在使用中并且新的bean調用請求進入時,池將阻塞該請求,直到下一個bean實例可用或超時(在instance-acquisition-timeout中設置)為止。 每個池都有一個唯一的名稱。 上面的配置顯示2個嚴格的最大池,分別名為“ slsb-strict-max-pool”和“ mdb-strict-max-pool”。 您可以在其中添加新的嚴格最大池,并為其選擇唯一的名稱。 您可以手動編輯xml(服務器關閉時)以添加新的嚴格最大池,也可以使用AS7隨附的命令行客戶端(CLI)。 在本文后面的內容中,我們將介紹如何使用CLI。
消息驅動的Bean配置
現在,讓我們轉到該EJB3子系統中的下一個配置:
<!-- 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。
MDB的默認bean實例池
bean-instance-pool-ref充當對bean-instance-pool的引用,它將用作所有MDB的默認池配置。 在此示例中,我們看到它指向“ mdb-strict-max-pool”,我們在前面的部分中看到它被配置為嚴格的最大池,其中池的上限為20。 如果要更改MDB的默認bean實例池,則只需將bean-instance-pool-ref元素的pool-name屬性更改為其他可用的bean實例池。 您可以通過直接編輯xml(在服務器關閉時)來執行此操作,也可以使用CLI來執行此操作(稍后將看到如何完成此操作)。
無狀態會話Bean配置
轉到EJB3配置的下一部分,您將看到:
<!-- Session bean configurations --> <session-bean> <stateless> <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/> </stateless> </session-bean>
在這里配置會話Bean的默認值。 就像我們在MDB中看到的一樣,以上配置顯示了如何為無狀態會話Bean配置默認Bean實例池。 在這里,我們看到“ slsb-strict-max-pool”被用作默認值。 就像MDB一樣,您可以通過直接在xml中或通過CLI更改bean-instance-pool-ref元素的pool-name屬性,來更改無狀態會話bean的默認bean實例池。
使用命令行客戶端(CLI)
AS7帶有功能強大的命令行客戶端。 查看CLI上的AS7文檔以獲取快速參考。 命令行客戶端工具是使用JBOSS_HOME / bin文件夾中的jboss-admin.sh/jboss-admin.bat腳本啟動的:
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現在已連接到正在9999端口上監聽localhost的服務器。可以為CLI傳遞不同的主機名和端口以進行連接,但現在就不要再討論了。
從CLI連接到服務器后,現在就可以從CLI運行操作來管理正在運行的服務器。 現在讓我們看一下如何管理EJB3子系統的bean實例池配置。
從CLI創建一個新的strict max bean實例池
從CLI連接到服務器后,可以按以下方式創建一個新的strict max bean實例池:
[standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=new-pool:add
我建議您閱讀CLI文檔,以更好地了解該命令。 但是,讓我簡要地分解上面的命令并解釋每個部分的作用。
需要注意的重要一點是,您不必在CLI上鍵入所有這些內容。 CLI提供了非常非常有用的制表符完成功能! 因此,輸入/ subsystem =并按下選項卡將顯示可用的選項。
了解Bean實例池創建命令
從CLI文檔:
操作請求基本上由三部分組成:地址,操作名稱和一組可選參數。
操作請求的正式規范為:
[/node-type=node-name (/node-type=node-name)*] : operation-name [( [parameter-name=parameter-value (,parameter-name=parameter-value)*] )]
在此示例中,我們的目標是創建一個新的strict max bean實例池。 這可以通過發出“添加”操作來完成。 在我上面發布的命令中,請注意最后使用“:add”。 操作始終以“:”開頭,后跟操作名稱。 因此,在上面的示例中,我們正在執行“: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并注意,已將名為“ new-pool”的新的嚴格的最大bean實例池添加到“ bean-instance-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"/> <strict-max-pool name="new-pool"/> </bean-instance-pools> </pools>
尚未設置max-pool-size和其他屬性,將使用默認值。 這是因為在運行操作時,我們沒有為這些屬性指定任何值。 現在,讓我們嘗試發出命令來創建一個具有某些特定屬性值的池(名為“ take2”)。 現在,該命令將如下所示:
[standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=take2:add(max-pool-size=15,timeout=2)
因此,上面的命令與上一個命令相似,除了池的名稱為“ take2”,并且我們另外指定了最大池大小為15和超時為2并將timeout-unit為默認值。 請注意,編寫該命令時可以使用制表符補全。 運行該命令時,您將看到以下輸出:
[standalone@localhost:9999 /] /subsystem=ejb3/strict-max-bean-instance-pool=take2:add(max-pool-size=15,timeout=2) {"outcome" => "success"}
現在,standalone-preview.xml如下所示:
<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-acquisition-timeout值設置為我們在CLI上指定的值。
這樣便可以通過CLI創建新的bean實例池。
設置/更改MDB和SLSB使用的默認bean實例池
在上一節中,我們看到了如何創建一個新的bean實例池。 現在,如果我們希望這個新池成為MDB和/或SLSB的默認池配置,那么我們可以使用CLI來做到這一點。
首先讓我們看看如何對MDB進行操作:
[standalone@localhost:9999 /] /subsystem=ejb3:write-attribute(name=default-mdb-instance-pool, value=take2)
因此,我們正在/ subsystem = ejb3地址上執行“寫屬性”操作,以寫入名為“ default-mdb-instance-pool”的屬性,其值為“ take2”。 有效地,此命令將從“ mdb-strict-max-pool”更改默認的MDB bean實例池(請記住,我們之前在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的默認池配置(此后)。
<mdb> <resource-adapter-ref resource-adapter-name="hornetq-ra"/> <bean-instance-pool-ref pool-name="take2"/> </mdb>
我們也可以對無狀態會話Bean配置執行相同的操作。 該命令是:
[standalone@localhost:9999 /] /subsystem=ejb3:write-attribute(name=default-slsb-instance-pool, value=new-pool) {"outcome" => "success"}
在這里,我們將default-slsb-instance-pool設置為我們先前創建的“ new-pool”。 現在,standalone-preview.xml文件將如下所示:
<session-bean> <stateless> <bean-instance-pool-ref pool-name="new-pool"/> </stateless> </session-bean>
就是這樣了! 現在,我們已經使用CLI來配置/管理EJB3池。
禁用MDB和無狀態會話Bean的池
我們還允許為MDB和SLSB禁用池。 但是,并不總是建議這樣做,因為它可能會影響性能。 如果作為開發人員,您知道您的bean在構造期間不會太重(即,在構造函數中沒有任何負擔,在@PostConstruct中沒有任何負擔),那么有時它有助于禁用對bean的合并。 當前,唯一的方法是從EJB3子系統配置中的和/或元素中刪除該元素。 目前,我們尚無法通過CLI進行此操作,也無法在每個部署或每個bean級別上指定此方法。
因此,如果您知道禁用池化將使您受益,那么這就是禁用它的方法。
摘要
我沒想到這個博客會花那么長的時間。 但是由于其中大多數是AS7中的新功能,因此值得編寫。 因此,在此博客中,我們了解了如何配置EJB3 bean實例池以及在何處配置EJB3實例池,如何創建新的bean實例池,如何為MDB和無狀態會話bean更改默認的bean實例池。 我們還看到了如何使用AS7中的CLI來完成所有這些工作。
參考: JBoss AS 7.0.1 –從我們的JCG合作伙伴 Jaikirian的“ Jaitech WriteUps”博客中 配置EJB3池 。
- JBoss AS 7.0.2“ Arc”發布–使用綁定選項
- 帶有Spring和Maven教程的JAX–WS
- JBoss 4.2.x Spring 3 JPA Hibernate教程
- 調試生產服務器– Eclipse和JBoss展示
- Java EE6 CDI,命名組件和限定符
- Java教程和Android教程列表
翻譯自: https://www.javacodegeeks.com/2011/11/jboss-as-7-ejb3-pools-configuration.html