8.4和Apache Geronimo集成
生活随笔
收集整理的這篇文章主要介紹了
8.4和Apache Geronimo集成
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Apache Geronimo應用服務器是在應用服務器許多方面都使用了許多領先開源項目的一個fully certified Java EE 5 runtime。事實上,Geronimo更大程度上是用來創建一個定制的只包含您需要的組件的應用程序分布式服務器的工具包。
默認的,有三個取決于您的需求的不同發行版的Geronimo:
1 Java EE Certified--一個完全認證的Java EE 5分布,使用兩個主要的開源web容器:
■Geronimo with Jetty 7
■Geronimo with Tomcat6
2 Little-G--一個提供一個web容器和Geronimo模塊的一個子集的distribution,子集包括:
■Geronimo with Jetty 7
■Geronimo with Tomcat6
3 Micro-G--一個允許你from the ground up建立你自己定制的應用服務器。你通過Geronimo deployer決定包含哪些組件。
Geronimo 提供了大量寬廣的選擇性,但是我們將為本章節使用Little-G 2.2 with Tomcat 6因為它還沒有安裝ActiveMQ(而Java EE certified runtime確實包括ActiveMQ)。所以從Geronimo下載頁面([url]http://mng.bz/DaoR[/url])下載Little-G 2.2 with Tomcat 6并將它解壓到你的電腦上。
在本章節中,我們將為Geronimo部署ActiveMQ插件并使用Geronimo web console來注冊ActiveMQ JMS 資源到Geronimo JNDI provider。在完成了這些步驟以后,Geronimo 示例應用(jms-webapp-geronimo項目)能被部署。
[b]8.4.1安裝Geronimo并在Geronimo中配置ActiveMQ插件[/b]
在archive展開之后,啟動到建立的目錄并啟動Geronimo,如下所示。
[i]Listing 8.10 Start up Geronimo[/i]
[code]
$ cd ./geronimo-tomcat6-minimal-2.2
$ ./bin/start-server
Launching Geronimo Server...
Booting Geronimo Kernel (in Java 1.6.0_15)...
...
Startup completed in 6.431s seconds
Listening on Ports:
1099 0.0.0.0 RMI Naming
8009 0.0.0.0 Tomcat Connector AJP TomcatAJPConnector
8080 0.0.0.0 Tomcat Connector HTTP BIO TomcatWebConnector
8443 0.0.0.0 Tomcat Connector HTTPS BIO TomcatWebSSLConnector
9999 0.0.0.0 JMX Remoting Connector
Geronimo Server started in 0:00:08.787
Started Application Modules:
WAR: org.apache.geronimo.configs/remote-deploy-tomcat/2.2/car
Web Applications:
/remote-deploy
Geronimo Application Server started
[/code]
當Geronimo啟動了,它的輸出顯示了哪些組件被啟動了。默認的所有組件都包含在Little-G中。注意ActiveMQ沒有包含在輸出中。現在該是使用Geronimo deployer安裝ActiveMQ的時候了。
Geronimo deployer是一個用于查詢和安裝Geronimo插件的命令行工具。啟動Geronimo deployer并使用它的search-plugins功能查看所有可用的插件的列表。
[code]
$ ./bin/deploy.sh --user system --password manager \
search-plugins http://geronimo.apache.org/plugins/geronimo-2.2
Using GERONIMO_HOME: /opt/geronimo-tomcat6-minimal-2.2
Using GERONIMO_TMPDIR: var/temp
Using JRE_HOME:
<no category>
1: ActiveMQ web console on Jetty (2.2)
2: ActiveMQ web console on Tomcat (2.2)
3: Geronimo Plugins, Clustering :: Plugin Farm Datasource (2.2)
4: Geronimo Plugins, UDDI : Database (2.2)
Administration
5: Geronimo Plugins, Console :: Debug Views (Jetty) (2.2)
...
12: Geronimo Plugins, Console :: System Database (Jetty) (2.2)
13: Geronimo Plugins, Console :: System Database (Tomcat) (2.2)
14: Geronimo Plugins, Console :: Tomcat (2.2)
15: Geronimo Plugins, OpenEJB :: Jetty (2.2)
JMS
[b]88: Geronimo Plugins, ActiveMQ v5 :: Broker (2.2)
89: Geronimo Plugins, ActiveMQ v5 :: Console (Jetty) (2.2)
90: Geronimo Plugins, ActiveMQ v5 :: Console (Tomcat) (2.2)
91: Geronimo Plugins, ActiveMQ v5 :: Resource Adapter (2.2)[/b]
JavaEE
92: Geronimo Framework, Configs :: JavaEE Specs (2.2)
...
Install Services [enter a comma separated list of numbers or 'q' to quit]:
[/code]
[color=blue]注意 [/color][i]當Geronimo deployer啟動了,它需要一個username和一個密碼。默認的username是system并且默認的密碼是manager。注意這些將作為參數傳給deployer。[/i]
雖然deployer上的許多輸出已被elided來節省空間,你能通過142個不同插件的列表看到這里有很大的選擇空間。但是在本章需要插件僅用粗體標示--插件 14,88和91。插件14是Geronimo控制臺,用于管理Geronimo的基于web的控制臺。Geronimo控制臺將使它更容易建立JMS資源。插件88是ActiveMQ代理。插件91是ActiveMQ 資源適配器,它將允許ActiveMQ和Java EE服務器集成。
注意deployer上輸出的最后一行是允許你以逗號為間隔輸入要按章的插件(通過number)的prompt。在這個prompt上,輸入14,88,91并按回車。當你這么做后你將看到如下的輸出:
[code]
...
Install Services [enter a comma separated list of numbers or
'q' to quit]: 14,88,91
Checking for status every 1000ms:
Downloading org.apache.geronimo.plugins/console-tomcat/2.2/car (40%)
Downloading org.apache.pluto/pluto-portal-driver/1.1.6/jar
Downloading org.apache.pluto/pluto-container/1.1.6/jar
Downloading org.apache.pluto/pluto-descriptor-impl/1.1.6/jar
Downloading commons-beanutils/commons-beanutils/1.7.0/jar
Downloading org.apache.portals/portlet-api_1.0_spec/1.0/jar
Downloading org.springframework/spring-core/2.5.6/jar
Downloading org.springframework/spring-context/2.5.6/jar
...
**** Installation Complete!
...
Downloaded 22983 kB in 52s (441 kB/s)
[/code]
輸出已經被truncated,但是你一旦看到了Installation Complete!消息,就意味著三個ActiveMQ插件已經成功安裝了。去檢驗的最簡答的方法時打開瀏覽器并訪問http://localhost:8080/控制臺來查看Geronimo控制臺。你應該能看到如圖8.5所示的頁面。
請登錄,使用Geronimo deployer相同的credentials(默認username是system,密碼是manager)。登錄到Geronimo控制臺后,你將看到如圖8.6顯示的頁面。
注意在圖8.6右側的鏈接。名為JMS Server的圖允許你管理ActiveMQ配置,如8.7圖中顯示的。
雖然Geronimo控制臺使管理ActiveMQ配置很簡單,但是對于本章最簡單的是使用對代理的默認配置。但是在GeronimoJMS資源的默認配置是一個不同的。
[b]8.4.2[/b]在Geronimo中配置ActiveMQ JMS資源
ActiveMQ的JMS資源(JMS connection和JMS destination)需要定制來匹配在示例應用中配置的資源。要做到這一點,在web控制臺點擊名為JMS Resources的鏈接則你將看到圖8.8中的頁面。
如你所見,一個默認的JMS資源組已被配置。Geronimo中默認的JMS資源沒有被命名為和示例應用兼容的方式,所以你將要建立一個新的資源組。要做到這一點,點擊名為ActiveMQ的鏈接。你將看到如圖8.9的頁面。為這個資源組鍵入一個名字。對于這個示例,資源組名為FooGroup。然后滑動到頁面的底部并點擊下一步按鍵。
下一個頁面允許你建立JMS連接工廠和JMS destinations。該頁面如圖8.10所示。
點擊添加Connection Facotry按鈕。在下一個頁面,如圖8.11所示leave the default type of javax.jms.ConnectionFactory并點擊下一步按鈕。
下一個頁面允許一些JMS connection factory定制,如圖8.12所示。
確保name了連接工廠為ConnectionFactory并設置transaction suppor為None。接著點擊下一步按鈕。這將使你返回那個允許你建立JMS資源的頁面,但是現在新的連接工廠應該已被列出,如圖8.13所示。
現在點擊添加Destination按鈕建立一個JMSdestination。這件顯示一個頁面,它允許選擇destination類型,如圖8.14所示。確保javax.jms.Queue被選擇,并點擊下一步按鈕來定制queue。
在下一個頁面,確保在Message Destination Name字段輸入FooQueue并在Physical Name字段輸入FOO.QUEUE,如圖8.15所示。
該queue將作為FooQueue從JNDI context中fetched,但是該queue被實力web應用使用的的實際名字是FOO.QUEUE。現在點擊下一步按鈕。這會帶你回到允許建立JMS資源的頁面。現在新的連接工廠和新的queue才應被列出,如圖8.16所示。
現在JMS資源組已經準備好被部署了。要做到這一點,點擊Deploy Now按鈕。Geronimo將會發布ActiveMQ資源適配器并將你帶回到初始JMS資源組頁面。不同的是FooGroup資源組已被列出,如圖8.17所示。
現在JMS資源已經被建立,你能進一步來發布示例web應用來測試它們。
[b]8.4.3為在Geronimo中部署準備示例應用[/b]
為了部署示例,一個jms-webapp-local項目的拷貝將被使用,命名為jms-webapp-geronimo。Java EE應用服務器提供了不同的環境,在其中去發布應用,所以一些tweaks來支持該環境是必要的:
[color=olive]第一步 [/color]建立一個名為src/main/webapp/WEB-INF/geronimo-web.xml的文件,如下所示。
[i]Listing 8.11 The geronimo-web.xml file[/i]
[code]
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
<environment>
<moduleId>
<groupId>org.apache.activemq.book</groupId>
<artifactId>jms-webapp</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
</moduleId>
<dependencies>
<!-- Depend upon the custom JMS resources group -->
<dependency>
<groupId>console.jms</groupId>
<artifactId>FooGroup</artifactId>
<version>1.0</version>
<type>car</type>
</dependency>
</dependencies>
<!-- Filter out the following items from the parent classloader -->
<hidden-classes>
<filter>org.springframework.</filter>
<filter>META-INF/spring</filter>
</hidden-classes>
</environment>
<context-root>/jms-webapp</context-root>
</web-app>
[/code]
geronimo-web.xml文件對Geronimo是特殊的。它為Geronimo提供了一些instructions。<moduleId>元素被用來識別發布到Geronimo的WAR文件。<dependency>元素告訴Geronimo它需要在該章節先前建立的JMS資源組。若沒有作為資源組一部分的連接工廠和destination,示例應用將不能正確地運行。<hidden-classes>元素告訴Geronimo不要在列出的packages中expose任何classes,因為它們已經存在于exposed到web應用的應用server的classloader中。This is something that should happen automatically and will probably be corrected in the near term based on a JIRA issue that was created to point this out.一旦這被fixed了,<hidden-classes>元素將不再需要來隱藏activemq-broker Geronimo插件的Spring classes。
[color=olive]第二步 [/color]取代在web.xml文件中使用<resource-ref>元素定義JMS queue,Geronimo需要使用<message-destination-ref>。<message-destination-ref>元素為web.xml定義在DTD。下面的列表顯示了jms-webapp-geronimo/src/main/webapp/WEB-INF/web.xml文件中必要的修改。
[i]Listing 8.12 Change to the web.xml file for Geronimo[/i]
[code]
...
<message-destination-ref>
<message-destination-ref-name>jms/FooQueue</message-destination-ref-name>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-usage>Produces</message-destination-usage>
<message-destination-link>jms/FooQueue</message-destination-link>
</message-destination-ref>
<!--
<resource-ref>
<res-ref-name>jms/FooQueue</res-ref-name>
<res-type>javax.jms.Queue</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
-->
...
[/code]
[color=olive]第三步 [/color]因為ActiveMQ通過activemq-broker Geronimo 代理而可用,jms-webapp-geronimo不在WAR文件中package ActiveMQ JAR或它的dependencies。為了ActiveMQ依賴被Maven編譯過程包含在WAR文件中,在pom.xml文件中添加<scope>provided</scope>元素到ActiveMQ依賴,XBean依賴和Log4J依賴,如下面類表中粗體顯示。
[i]Listing 8.13 Maven dependency changes for Geronimo[/i]
[code]
...
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>${activemq-version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.apache.activemq</groupId>
<artifactId>activeio-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</exclusion>
<exclusion>
<artifactId>activemq-protobuf</artifactId>
<groupId>org.apache.activemq.protobuf</groupId>
</exclusion>
<exclusion>
<artifactId>commons-net</artifactId>
<groupId>commons-net</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.4.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>provided</scope>
</dependency>
...
[/code]
注意在表8.13中粗體顯示的<scope>provided</scope>元素。不包含這些JAR在WAR文件的inclusion中避免了任何classloader的clashes,如果dependency被包含將引起clashes。
[color=olive]第四步 [/color]你需要在在這個示例web應用中做的最后一件事是在Spring配置文件中關于連接工廠的類型。編輯jmswebapp-geronimo/src/main/webapp/WEB-INF/spring/jms-context.xml文件來修改連接工廠類型,從org.apache.activemq.ActiveMQConnectionFactory改為org.apache.activemq.ra.ActiveMQConnectionFactory。這是必要的因為在這里使用的連接工廠是ActiveMQ資源適配器的,而不是基本的連接工廠。
所有的application-specific的修改已經存在于jms-webapp-geronimo項目。確保下載本書的示例源碼來查看示例項目。
[b]8.4.4在Geronimo中部署和修改示例應用[/b]
使用jms-webapp-geronimo項目在Geronimo中激活JNDI資源的定義,使用下面的步驟:
[color=olive]第一步 [/color]編譯項目并建立WAR文件,在命令行,運行下面的Maven命令:
[code]
$ cd jms-webapp-geronimo
$ mvn clean install
...
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------
-----
[INFO] Building jms-webapp-global
[INFO] task-segment: [clean, install]
[INFO] ----------------------------------------------------------------
-----
...
[INFO] ----------------------------------------------------------------
-----
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------
-----
...
[/code]
[color=olive]第二步 [/color]在一個控制臺,使用如下命令啟動Geronimo:
[code]
$ cd $GERONIMO_HOME
$ ./bin/start-server
Launching Geronimo Server...
Booting Geronimo Kernel (in Java 1.6.0_15)...
...
Module 33/36 org.apache.geronimo.configs/activemq-broker/2.2/car
started in 1.248s
Module 34/36 org.apache.geronimo.configs/activemq-ra/2.2/car
started in .350s
Module 35/36 org.apache.geronimo.plugins/activemq-console-tomcat/2.2/car
started in .264s
Module 36/36 console.jms/FooGroup/1.0/car
started in .111s
Startup completed in 17.753s seconds
Listening on Ports:
1099 0.0.0.0 RMI Naming
1527 0.0.0.0 Derby Connector
8009 0.0.0.0 Tomcat Connector AJP TomcatAJPConnector
8080 0.0.0.0 Tomcat Connector HTTP BIO TomcatWebConnector
8443 0.0.0.0 Tomcat Connector HTTPS BIO TomcatWebSSLConnector
9999 0.0.0.0 JMX Remoting Connector
61616 0.0.0.0 ActiveMQ Transport Connector
Started Application Modules:
EAR: org.apache.geronimo.plugins/console-tomcat/2.2/car
RAR: console.jms/FooGroup/1.0/car
RAR: org.apache.geronimo.configs/activemq-ra/2.2/car
RAR: org.apache.geronimo.configs/system-database/2.2/car
WAR: org.apache.geronimo.configs/remote-deploy-tomcat/2.2/car
Web Applications:
/console
/console-base
/remote-deploy
Geronimo Application Server started
Geronimo Server started in 0:00:21.997
[/code]
雖然一些輸出已經被eliminated來節省空間,hold JMS資源的FooGroup被部署了,Geronimo必要的ActiveMQ插件被已被部署。
[color=olive]第三步 [/color]在第二個控制臺
默認的,有三個取決于您的需求的不同發行版的Geronimo:
1 Java EE Certified--一個完全認證的Java EE 5分布,使用兩個主要的開源web容器:
■Geronimo with Jetty 7
■Geronimo with Tomcat6
2 Little-G--一個提供一個web容器和Geronimo模塊的一個子集的distribution,子集包括:
■Geronimo with Jetty 7
■Geronimo with Tomcat6
3 Micro-G--一個允許你from the ground up建立你自己定制的應用服務器。你通過Geronimo deployer決定包含哪些組件。
Geronimo 提供了大量寬廣的選擇性,但是我們將為本章節使用Little-G 2.2 with Tomcat 6因為它還沒有安裝ActiveMQ(而Java EE certified runtime確實包括ActiveMQ)。所以從Geronimo下載頁面([url]http://mng.bz/DaoR[/url])下載Little-G 2.2 with Tomcat 6并將它解壓到你的電腦上。
在本章節中,我們將為Geronimo部署ActiveMQ插件并使用Geronimo web console來注冊ActiveMQ JMS 資源到Geronimo JNDI provider。在完成了這些步驟以后,Geronimo 示例應用(jms-webapp-geronimo項目)能被部署。
[b]8.4.1安裝Geronimo并在Geronimo中配置ActiveMQ插件[/b]
在archive展開之后,啟動到建立的目錄并啟動Geronimo,如下所示。
[i]Listing 8.10 Start up Geronimo[/i]
[code]
$ cd ./geronimo-tomcat6-minimal-2.2
$ ./bin/start-server
Launching Geronimo Server...
Booting Geronimo Kernel (in Java 1.6.0_15)...
...
Startup completed in 6.431s seconds
Listening on Ports:
1099 0.0.0.0 RMI Naming
8009 0.0.0.0 Tomcat Connector AJP TomcatAJPConnector
8080 0.0.0.0 Tomcat Connector HTTP BIO TomcatWebConnector
8443 0.0.0.0 Tomcat Connector HTTPS BIO TomcatWebSSLConnector
9999 0.0.0.0 JMX Remoting Connector
Geronimo Server started in 0:00:08.787
Started Application Modules:
WAR: org.apache.geronimo.configs/remote-deploy-tomcat/2.2/car
Web Applications:
/remote-deploy
Geronimo Application Server started
[/code]
當Geronimo啟動了,它的輸出顯示了哪些組件被啟動了。默認的所有組件都包含在Little-G中。注意ActiveMQ沒有包含在輸出中。現在該是使用Geronimo deployer安裝ActiveMQ的時候了。
Geronimo deployer是一個用于查詢和安裝Geronimo插件的命令行工具。啟動Geronimo deployer并使用它的search-plugins功能查看所有可用的插件的列表。
[code]
$ ./bin/deploy.sh --user system --password manager \
search-plugins http://geronimo.apache.org/plugins/geronimo-2.2
Using GERONIMO_HOME: /opt/geronimo-tomcat6-minimal-2.2
Using GERONIMO_TMPDIR: var/temp
Using JRE_HOME:
<no category>
1: ActiveMQ web console on Jetty (2.2)
2: ActiveMQ web console on Tomcat (2.2)
3: Geronimo Plugins, Clustering :: Plugin Farm Datasource (2.2)
4: Geronimo Plugins, UDDI : Database (2.2)
Administration
5: Geronimo Plugins, Console :: Debug Views (Jetty) (2.2)
...
12: Geronimo Plugins, Console :: System Database (Jetty) (2.2)
13: Geronimo Plugins, Console :: System Database (Tomcat) (2.2)
14: Geronimo Plugins, Console :: Tomcat (2.2)
15: Geronimo Plugins, OpenEJB :: Jetty (2.2)
JMS
[b]88: Geronimo Plugins, ActiveMQ v5 :: Broker (2.2)
89: Geronimo Plugins, ActiveMQ v5 :: Console (Jetty) (2.2)
90: Geronimo Plugins, ActiveMQ v5 :: Console (Tomcat) (2.2)
91: Geronimo Plugins, ActiveMQ v5 :: Resource Adapter (2.2)[/b]
JavaEE
92: Geronimo Framework, Configs :: JavaEE Specs (2.2)
...
Install Services [enter a comma separated list of numbers or 'q' to quit]:
[/code]
[color=blue]注意 [/color][i]當Geronimo deployer啟動了,它需要一個username和一個密碼。默認的username是system并且默認的密碼是manager。注意這些將作為參數傳給deployer。[/i]
雖然deployer上的許多輸出已被elided來節省空間,你能通過142個不同插件的列表看到這里有很大的選擇空間。但是在本章需要插件僅用粗體標示--插件 14,88和91。插件14是Geronimo控制臺,用于管理Geronimo的基于web的控制臺。Geronimo控制臺將使它更容易建立JMS資源。插件88是ActiveMQ代理。插件91是ActiveMQ 資源適配器,它將允許ActiveMQ和Java EE服務器集成。
注意deployer上輸出的最后一行是允許你以逗號為間隔輸入要按章的插件(通過number)的prompt。在這個prompt上,輸入14,88,91并按回車。當你這么做后你將看到如下的輸出:
[code]
...
Install Services [enter a comma separated list of numbers or
'q' to quit]: 14,88,91
Checking for status every 1000ms:
Downloading org.apache.geronimo.plugins/console-tomcat/2.2/car (40%)
Downloading org.apache.pluto/pluto-portal-driver/1.1.6/jar
Downloading org.apache.pluto/pluto-container/1.1.6/jar
Downloading org.apache.pluto/pluto-descriptor-impl/1.1.6/jar
Downloading commons-beanutils/commons-beanutils/1.7.0/jar
Downloading org.apache.portals/portlet-api_1.0_spec/1.0/jar
Downloading org.springframework/spring-core/2.5.6/jar
Downloading org.springframework/spring-context/2.5.6/jar
...
**** Installation Complete!
...
Downloaded 22983 kB in 52s (441 kB/s)
[/code]
輸出已經被truncated,但是你一旦看到了Installation Complete!消息,就意味著三個ActiveMQ插件已經成功安裝了。去檢驗的最簡答的方法時打開瀏覽器并訪問http://localhost:8080/控制臺來查看Geronimo控制臺。你應該能看到如圖8.5所示的頁面。
請登錄,使用Geronimo deployer相同的credentials(默認username是system,密碼是manager)。登錄到Geronimo控制臺后,你將看到如圖8.6顯示的頁面。
注意在圖8.6右側的鏈接。名為JMS Server的圖允許你管理ActiveMQ配置,如8.7圖中顯示的。
雖然Geronimo控制臺使管理ActiveMQ配置很簡單,但是對于本章最簡單的是使用對代理的默認配置。但是在GeronimoJMS資源的默認配置是一個不同的。
[b]8.4.2[/b]在Geronimo中配置ActiveMQ JMS資源
ActiveMQ的JMS資源(JMS connection和JMS destination)需要定制來匹配在示例應用中配置的資源。要做到這一點,在web控制臺點擊名為JMS Resources的鏈接則你將看到圖8.8中的頁面。
如你所見,一個默認的JMS資源組已被配置。Geronimo中默認的JMS資源沒有被命名為和示例應用兼容的方式,所以你將要建立一個新的資源組。要做到這一點,點擊名為ActiveMQ的鏈接。你將看到如圖8.9的頁面。為這個資源組鍵入一個名字。對于這個示例,資源組名為FooGroup。然后滑動到頁面的底部并點擊下一步按鍵。
下一個頁面允許你建立JMS連接工廠和JMS destinations。該頁面如圖8.10所示。
點擊添加Connection Facotry按鈕。在下一個頁面,如圖8.11所示leave the default type of javax.jms.ConnectionFactory并點擊下一步按鈕。
下一個頁面允許一些JMS connection factory定制,如圖8.12所示。
確保name了連接工廠為ConnectionFactory并設置transaction suppor為None。接著點擊下一步按鈕。這將使你返回那個允許你建立JMS資源的頁面,但是現在新的連接工廠應該已被列出,如圖8.13所示。
現在點擊添加Destination按鈕建立一個JMSdestination。這件顯示一個頁面,它允許選擇destination類型,如圖8.14所示。確保javax.jms.Queue被選擇,并點擊下一步按鈕來定制queue。
在下一個頁面,確保在Message Destination Name字段輸入FooQueue并在Physical Name字段輸入FOO.QUEUE,如圖8.15所示。
該queue將作為FooQueue從JNDI context中fetched,但是該queue被實力web應用使用的的實際名字是FOO.QUEUE。現在點擊下一步按鈕。這會帶你回到允許建立JMS資源的頁面。現在新的連接工廠和新的queue才應被列出,如圖8.16所示。
現在JMS資源組已經準備好被部署了。要做到這一點,點擊Deploy Now按鈕。Geronimo將會發布ActiveMQ資源適配器并將你帶回到初始JMS資源組頁面。不同的是FooGroup資源組已被列出,如圖8.17所示。
現在JMS資源已經被建立,你能進一步來發布示例web應用來測試它們。
[b]8.4.3為在Geronimo中部署準備示例應用[/b]
為了部署示例,一個jms-webapp-local項目的拷貝將被使用,命名為jms-webapp-geronimo。Java EE應用服務器提供了不同的環境,在其中去發布應用,所以一些tweaks來支持該環境是必要的:
[color=olive]第一步 [/color]建立一個名為src/main/webapp/WEB-INF/geronimo-web.xml的文件,如下所示。
[i]Listing 8.11 The geronimo-web.xml file[/i]
[code]
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
<environment>
<moduleId>
<groupId>org.apache.activemq.book</groupId>
<artifactId>jms-webapp</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
</moduleId>
<dependencies>
<!-- Depend upon the custom JMS resources group -->
<dependency>
<groupId>console.jms</groupId>
<artifactId>FooGroup</artifactId>
<version>1.0</version>
<type>car</type>
</dependency>
</dependencies>
<!-- Filter out the following items from the parent classloader -->
<hidden-classes>
<filter>org.springframework.</filter>
<filter>META-INF/spring</filter>
</hidden-classes>
</environment>
<context-root>/jms-webapp</context-root>
</web-app>
[/code]
geronimo-web.xml文件對Geronimo是特殊的。它為Geronimo提供了一些instructions。<moduleId>元素被用來識別發布到Geronimo的WAR文件。<dependency>元素告訴Geronimo它需要在該章節先前建立的JMS資源組。若沒有作為資源組一部分的連接工廠和destination,示例應用將不能正確地運行。<hidden-classes>元素告訴Geronimo不要在列出的packages中expose任何classes,因為它們已經存在于exposed到web應用的應用server的classloader中。This is something that should happen automatically and will probably be corrected in the near term based on a JIRA issue that was created to point this out.一旦這被fixed了,<hidden-classes>元素將不再需要來隱藏activemq-broker Geronimo插件的Spring classes。
[color=olive]第二步 [/color]取代在web.xml文件中使用<resource-ref>元素定義JMS queue,Geronimo需要使用<message-destination-ref>。<message-destination-ref>元素為web.xml定義在DTD。下面的列表顯示了jms-webapp-geronimo/src/main/webapp/WEB-INF/web.xml文件中必要的修改。
[i]Listing 8.12 Change to the web.xml file for Geronimo[/i]
[code]
...
<message-destination-ref>
<message-destination-ref-name>jms/FooQueue</message-destination-ref-name>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-usage>Produces</message-destination-usage>
<message-destination-link>jms/FooQueue</message-destination-link>
</message-destination-ref>
<!--
<resource-ref>
<res-ref-name>jms/FooQueue</res-ref-name>
<res-type>javax.jms.Queue</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
-->
...
[/code]
[color=olive]第三步 [/color]因為ActiveMQ通過activemq-broker Geronimo 代理而可用,jms-webapp-geronimo不在WAR文件中package ActiveMQ JAR或它的dependencies。為了ActiveMQ依賴被Maven編譯過程包含在WAR文件中,在pom.xml文件中添加<scope>provided</scope>元素到ActiveMQ依賴,XBean依賴和Log4J依賴,如下面類表中粗體顯示。
[i]Listing 8.13 Maven dependency changes for Geronimo[/i]
[code]
...
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>${activemq-version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.apache.activemq</groupId>
<artifactId>activeio-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</exclusion>
<exclusion>
<artifactId>activemq-protobuf</artifactId>
<groupId>org.apache.activemq.protobuf</groupId>
</exclusion>
<exclusion>
<artifactId>commons-net</artifactId>
<groupId>commons-net</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.4.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>provided</scope>
</dependency>
...
[/code]
注意在表8.13中粗體顯示的<scope>provided</scope>元素。不包含這些JAR在WAR文件的inclusion中避免了任何classloader的clashes,如果dependency被包含將引起clashes。
[color=olive]第四步 [/color]你需要在在這個示例web應用中做的最后一件事是在Spring配置文件中關于連接工廠的類型。編輯jmswebapp-geronimo/src/main/webapp/WEB-INF/spring/jms-context.xml文件來修改連接工廠類型,從org.apache.activemq.ActiveMQConnectionFactory改為org.apache.activemq.ra.ActiveMQConnectionFactory。這是必要的因為在這里使用的連接工廠是ActiveMQ資源適配器的,而不是基本的連接工廠。
所有的application-specific的修改已經存在于jms-webapp-geronimo項目。確保下載本書的示例源碼來查看示例項目。
[b]8.4.4在Geronimo中部署和修改示例應用[/b]
使用jms-webapp-geronimo項目在Geronimo中激活JNDI資源的定義,使用下面的步驟:
[color=olive]第一步 [/color]編譯項目并建立WAR文件,在命令行,運行下面的Maven命令:
[code]
$ cd jms-webapp-geronimo
$ mvn clean install
...
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------
-----
[INFO] Building jms-webapp-global
[INFO] task-segment: [clean, install]
[INFO] ----------------------------------------------------------------
-----
...
[INFO] ----------------------------------------------------------------
-----
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------
-----
...
[/code]
[color=olive]第二步 [/color]在一個控制臺,使用如下命令啟動Geronimo:
[code]
$ cd $GERONIMO_HOME
$ ./bin/start-server
Launching Geronimo Server...
Booting Geronimo Kernel (in Java 1.6.0_15)...
...
Module 33/36 org.apache.geronimo.configs/activemq-broker/2.2/car
started in 1.248s
Module 34/36 org.apache.geronimo.configs/activemq-ra/2.2/car
started in .350s
Module 35/36 org.apache.geronimo.plugins/activemq-console-tomcat/2.2/car
started in .264s
Module 36/36 console.jms/FooGroup/1.0/car
started in .111s
Startup completed in 17.753s seconds
Listening on Ports:
1099 0.0.0.0 RMI Naming
1527 0.0.0.0 Derby Connector
8009 0.0.0.0 Tomcat Connector AJP TomcatAJPConnector
8080 0.0.0.0 Tomcat Connector HTTP BIO TomcatWebConnector
8443 0.0.0.0 Tomcat Connector HTTPS BIO TomcatWebSSLConnector
9999 0.0.0.0 JMX Remoting Connector
61616 0.0.0.0 ActiveMQ Transport Connector
Started Application Modules:
EAR: org.apache.geronimo.plugins/console-tomcat/2.2/car
RAR: console.jms/FooGroup/1.0/car
RAR: org.apache.geronimo.configs/activemq-ra/2.2/car
RAR: org.apache.geronimo.configs/system-database/2.2/car
WAR: org.apache.geronimo.configs/remote-deploy-tomcat/2.2/car
Web Applications:
/console
/console-base
/remote-deploy
Geronimo Application Server started
Geronimo Server started in 0:00:21.997
[/code]
雖然一些輸出已經被eliminated來節省空間,hold JMS資源的FooGroup被部署了,Geronimo必要的ActiveMQ插件被已被部署。
[color=olive]第三步 [/color]在第二個控制臺
總結
以上是生活随笔為你收集整理的8.4和Apache Geronimo集成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: layer.open(常用)
- 下一篇: ClassNotFoundExcepti