Author: chirino
Date: Fri Sep 1 08:30:50 2006
New Revision: 439353
URL: http://svn.apache.org/viewvc?rev=439353&view=rev
Log:
Latest export from confluence
Modified:
incubator/activemq/site/weblogic-integration.html
Modified: incubator/activemq/site/weblogic-integration.html
URL:
http://svn.apache.org/viewvc/incubator/activemq/site/weblogic-integration.html?rev=439353&r1=439352&r2=439353&view=diff
==============================================================================
--- incubator/activemq/site/weblogic-integration.html (original)
+++ incubator/activemq/site/weblogic-integration.html Fri Sep 1 08:30:50 2006
@@ -365,36 +365,7 @@
<H4><A name="WebLogicIntegration-ActiveMQasaWebLogicApplication"></A>ActiveMQ
as a WebLogic Application</H4>
-<P>The easiest type of WebLogic application to configure with all the needed
ActiveMQ libraries and configuration and not much else is a web application.
The JARs go in <TT>WEB-INF/lib/</TT> and config files typically in
<TT>WEB-INF/</TT>. The only necessary configuration for the web application
itself is to install a listener that will start and stop ActiveMQ when the web
application is started and stopped.</P>
-
-<P>The easiest way to do this is to a use the commonly available Spring
listeners, which start a Spring context, which can point ActiveMQ to an XBean
configuration file, which starts ActiveMQ. A little roundabout, but it works
well in practice with very little configuration.</P>
-
-<P><B>J2EE WEB-INF/web.xml</B></P>
-<DIV class="code"><DIV class="codeContent">
-<PRE class="code-xml"><SPAN class="code-tag"><?xml version=<SPAN
class="code-quote">"1.0"</SPAN> encoding=<SPAN
class="code-quote">"UTF-8"</SPAN>?></SPAN>
-
-<web-app version=<SPAN class="code-quote">"2.4"</SPAN>
- xmlns=<SPAN
class="code-quote">"http://java.sun.com/xml/ns/j2ee"</SPAN>
- <SPAN class="code-keyword">xmlns:xsi</SPAN>=<SPAN
class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</SPAN>
- xsi:schemaLocation=<SPAN
class="code-quote">"http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</SPAN> >
- <SPAN class="code-tag"><listener></SPAN>
- <SPAN
class="code-tag"><listener-class></SPAN>org.springframework.web.context.ContextLoaderListener<SPAN
class="code-tag"></listener-class></SPAN>
- <SPAN class="code-tag"></listener></SPAN>
-<SPAN class="code-tag"></web-app></SPAN></PRE>
-</DIV></DIV>
-<P><B>Spring WEB-INF/applicationContext.xml</B></P>
-<DIV class="code"><DIV class="codeContent">
-<PRE class="code-xml"><SPAN class="code-tag"><?xml version=<SPAN
class="code-quote">"1.0"</SPAN> encoding=<SPAN
class="code-quote">"UTF-8"</SPAN> ?></SPAN>
-<SPAN class="code-tag"><!DOCTYPE beans PUBLIC <SPAN
class="code-quote">"-//SPRING//DTD BEAN//EN"</SPAN> <SPAN
class="code-quote">"http://www.springframework.org/dtd/spring-beans.dtd"</SPAN>></SPAN>
-<SPAN class="code-tag"><beans></SPAN>
- <SPAN class="code-tag"><bean id=<SPAN
class="code-quote">"brokerService"</SPAN> class=<SPAN
class="code-quote">"org.apache.activemq.xbean.BrokerFactoryBean"</SPAN>></SPAN>
- <SPAN class="code-tag"><property name=<SPAN
class="code-quote">"config"</SPAN> value=<SPAN
class="code-quote">"classpath:activemq-config.xml"</SPAN>/></SPAN>
- <SPAN class="code-tag"></bean></SPAN>
-<SPAN class="code-tag"></beans></SPAN></PRE>
-</DIV></DIV>
-<P>Again, the <TT>web.xml</TT> listener starts Spring and reads the Spring
<TT>META-INF/applicationContext.xml</TT> file (the default location used by the
<TT>ContextLoaderListener</TT>), and the <TT>applicationContext.xml</TT>
indicates that the ActiveMQ configuration file should be read from the class
path with the name <TT>activemq-config.xml</TT>. That file could be placed in
<TT>WEB-INF/classes</TT> or in a directory on the file system that is added to
the WebLogic class path (for ease of editing).</P>
-
-<P>With this approach, the normal WebLogic deployment tools, admin console,
etc. can be used to deploy, start, stop, and restart ActiveMQ (packaged into a
web application WAR). Additionally, a simple web page included in the WAR will
be available whenever ActiveMQ is running, so a simple HTTP request can
determine whether the ActiveMQ module has been started.</P>
+<P>The easiest type of WebLogic application to configure with all the needed
ActiveMQ libraries and configuration and not much else is a web application.
The JARs go in <TT>WEB-INF/lib/</TT> and config files typically in
<TT>WEB-INF/</TT>. The only necessary configuration for the web application
itself is to install a listener that will start and stop ActiveMQ when the web
application is started and stopped. There are also a couple optional classes
that can be used to integrate ActiveMQ with WebLogic's management and
security systems. Additionally, in this example, a simple web page included in
the WAR will be available whenever ActiveMQ is running, so a simple HTTP
request can determine whether the ActiveMQ module has been started.</P>
<H4><A name="WebLogicIntegration-ManagementOptions"></A>Management Options</H4>
@@ -413,13 +384,13 @@
</UL>
-<H4><A name="WebLogicIntegration-SecurityOptions"></A>Security Options</H4>
+<P>The sample below includes an optional class that lets ActiveMQ hook into
the WebLogic runtime MBeanServer. This means ActiveMQ MBeans will appear
alongside WebLogic MBeans (and even JVM MBeans if they are enabled). This
means management clients will access ActiveMQ MBeans through the normal
WebLogic listen port (e.g. 7001) rather than using a dedicated JMX port, though
IIOP must be enabled for this to work. However, note that this is optional,
and you can skip this class and use one of the other approaches (JVM or
embedded MBeanServer) to expose the ActiveMQ MBeans.</P>
-<P>ActiveMQ has optional authentication and authorization plugins, which are
based on JAAS. Fortunately, WebLogic provides a JAAS LoginModule that performs
the authentication against the default WebLogic security realm, and returns the
appropriate principals for authorization. Some wiring is required to link
these together, but the bottom line is that ActiveMQ can use the WebLogic
security realm to process a login and then you can configure the WebLogic
principals (users and/or groups) that should be allowed to connect.</P>
+<H4><A name="WebLogicIntegration-SecurityOptions"></A>Security Options</H4>
-<P>You may choose to use authentication only, in which case any user with a
valid WebLogic login can access ActiveMQ. You may also add authorization to
that, so that the ActiveMQ broker as a whole or individual destinations limit
the users which can interact with them.</P>
+<P>ActiveMQ has optional authentication and authorization plugins, which are
based on JAAS. Fortunately, WebLogic provides a JAAS LoginModule that performs
the authentication against the default WebLogic security realm, and returns the
appropriate principals for authorization. Unfortunately, by default, ActiveMQ
cannot authorize access to specific users within the security realm based on
WebLogic principals, meaning either there's no security or a login is
required but any user with a valid login has full access to ActiveMQ. However,
with custom security classes like the ones shown below, ActiveMQ can use the
WebLogic security realm to process a login and then you can configure the
WebLogic principals (users and/or groups) that should be allowed to perform
read/write/create/remove actions on a per-broker or per-destination basis.</P>
-<P>For purposes of this example, we have only implemented an authorization
approach that allows any member of a single specific WebLogic group to access
all resources in ActiveMQ. Between the authorization plugin provided here and
the default one provided with ActiveMQ, you should have the foundation to
enhance this if more feature-rich authorization is required.</P>
+<P>You may choose to use authentication only, in which case any user with a
valid WebLogic login can access ActiveMQ, and no custom code is necessary. You
may also add authorization to that using some custom code, to apply specific
security constraints to specific users or destinations. For purposes of this
example, we have only implemented an authorization approach that allows any
member of a single specific WebLogic group to access all resources in ActiveMQ.
Between the authorization plugin provided here and the default one provided
with ActiveMQ, you should have the foundation to enhance this if more
feature-rich authorization is required.</P>
<H4><A name="WebLogicIntegration-ActiveMQIntegrationArchitecture"></A>ActiveMQ
Integration Architecture</H4>
@@ -447,7 +418,64 @@
</UL>
-<H4><A name="WebLogicIntegration-CodeandConfigurationFiles"></A>Code and
Configuration Files</H4>
+<H4><A
name="WebLogicIntegration-BuildingtheActiveMQtoWebLogicIntegrationWAR"></A>Building
the ActiveMQ to WebLogic Integration WAR</H4>
+
+<P>This section discusses the code, libraries, and configuration files
necessary to build the ActiveMQ web application that will be deployed in
WebLogic Express.</P>
+
+<H5><A name="WebLogicIntegration-StartingandStoppingActiveMQ"></A>Starting and
Stopping ActiveMQ</H5>
+
+<P>ActiveMQ needs to start when the web application is deployed or started,
and stop when the web application is stopped or undeployed. The easiest way to
do this is to a use the commonly available Spring listeners, which start a
Spring context, which can point ActiveMQ to an XBean configuration file, which
starts ActiveMQ. A little roundabout, but it works well in practice with very
little configuration.</P>
+
+<P><B>J2EE WEB-INF/web.xml</B></P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml"><SPAN class="code-tag"><?xml version=<SPAN
class="code-quote">"1.0"</SPAN> encoding=<SPAN
class="code-quote">"UTF-8"</SPAN>?></SPAN>
+
+<web-app version=<SPAN class="code-quote">"2.4"</SPAN>
+ xmlns=<SPAN
class="code-quote">"http://java.sun.com/xml/ns/j2ee"</SPAN>
+ <SPAN class="code-keyword">xmlns:xsi</SPAN>=<SPAN
class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</SPAN>
+ xsi:schemaLocation=<SPAN
class="code-quote">"http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</SPAN> >
+ <SPAN class="code-tag"><listener></SPAN>
+ <SPAN
class="code-tag"><listener-class></SPAN>org.springframework.web.context.ContextLoaderListener<SPAN
class="code-tag"></listener-class></SPAN>
+ <SPAN class="code-tag"></listener></SPAN>
+<SPAN class="code-tag"></web-app></SPAN></PRE>
+</DIV></DIV>
+<P><B>Spring WEB-INF/applicationContext.xml</B></P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml"><SPAN class="code-tag"><?xml version=<SPAN
class="code-quote">"1.0"</SPAN> encoding=<SPAN
class="code-quote">"UTF-8"</SPAN> ?></SPAN>
+<SPAN class="code-tag"><!DOCTYPE beans PUBLIC <SPAN
class="code-quote">"-//SPRING//DTD BEAN//EN"</SPAN> <SPAN
class="code-quote">"http://www.springframework.org/dtd/spring-beans.dtd"</SPAN>></SPAN>
+<SPAN class="code-tag"><beans></SPAN>
+ <SPAN class="code-tag"><bean id=<SPAN
class="code-quote">"brokerService"</SPAN> class=<SPAN
class="code-quote">"org.apache.activemq.xbean.BrokerFactoryBean"</SPAN>></SPAN>
+ <SPAN class="code-tag"><property name=<SPAN
class="code-quote">"config"</SPAN> value=<SPAN
class="code-quote">"classpath:activemq-config.xml"</SPAN>/></SPAN>
+ <SPAN class="code-tag"></bean></SPAN>
+<SPAN class="code-tag"></beans></SPAN></PRE>
+</DIV></DIV>
+<P>Again, the <TT>web.xml</TT> listener starts Spring and reads the Spring
<TT>META-INF/applicationContext.xml</TT> file (the default location used by the
<TT>ContextLoaderListener</TT>), and the <TT>applicationContext.xml</TT>
indicates that the ActiveMQ configuration file should be read from the class
path with the name <TT>activemq-config.xml</TT>. That file could be placed in
<TT>WEB-INF/classes</TT> or in a directory on the file system that is added to
the WebLogic class path (for ease of editing).</P>
+
+<P>With this approach, the normal WebLogic deployment tools, admin console,
etc. can be used to deploy, start, stop, and restart ActiveMQ (packaged into a
web application WAR).</P>
+
+<H5><A name="WebLogicIntegration-RequiredLibraries"></A>Required Libraries</H5>
+
+<P>ActiveMQ required a number of JARs which should be included in the web
application <TT>WEB-INF/lib</TT> directory. </P>
+
+<P>This list was generated for ActiveMQ 4.0.1:</P>
+<UL>
+ <LI><TT>activemq-core</TT> (basic ActiveMQ code)</LI>
+ <LI><TT>activemq-jaas</TT> (ActiveMQ security code)</LI>
+ <LI><TT>activeio-core</TT> (ActiveMQ networking layer)</LI>
+ <LI><TT>derby</TT> (embedded DB for persistent messages)</LI>
+ <LI><TT>commons-logging</TT> (logging abstraction library)</LI>
+ <LI><TT>log4j</TT> (actual logging package used)</LI>
+ <LI><TT>backport-util-concurrent</TT> (concurrency utility library)</LI>
+ <LI><TT>spring</TT> (used to configure and start ActiveMQ)</LI>
+ <LI><TT>xbean-spring</TT> (used to configure ActiveMQ)</LI>
+</UL>
+
+
+<P>Additionally, to build the custom security plugins, the WebLogic
<TT>server/lib/weblogic.jar</TT> is presently required at compile time.</P>
+
+<P>Of these, Derby could be omitted if ActiveMQ was configured to not use a
database for persistence or to use a separate database for persistence. The
WebLogic JAR is needed only at build time (it's provided by the server at
runtime). Spring could be omitted if a different strategy was used to start
and stop ActiveMQ when the web app was started or stopped (a little custom code
could replace this dependency). The rest are probably unavoidable, unless
ActiveMQ changes its dependencies in a future version.</P>
+
+<H5><A name="WebLogicIntegration-CodeandConfigurationFiles"></A>Code and
Configuration Files</H5>
<P><B>TODO:</B> show and discuss code for:</P>
<UL>
@@ -458,10 +486,6 @@
</UL>
-<H4><A name="WebLogicIntegration-ActiveMQWebApplication"></A>ActiveMQ Web
Application</H4>
-
-<P><B>TODO:</B> List the JARs that need to go into the web app, and repeat or
refer to the <TT>web.xml</TT> and <TT>applicationContext.xml</TT> listed
above</P>
-
<H4><A name="WebLogicIntegration-InstallationProcedure"></A>Installation
Procedure</H4>
<P>This procedure makes the following assumptions:</P>
@@ -536,8 +560,8 @@
</DIV>
<DIV id="site-footer">
Added by <A
href="http://goopen.org/confluence/users/viewuserprofile.action?username=ammulder">Aaron
Mulder</A>,
- last edited by <A
href="http://goopen.org/confluence/users/viewuserprofile.action?username=chirino">Hiram
Chirino</A> on Sep 01, 2006
- (<A
href="http://goopen.org/confluence/pages/diffpages.action?pageId=13349&originalId=13362">view
change</A>)
+ last edited by <A
href="http://goopen.org/confluence/users/viewuserprofile.action?username=ammulder">Aaron
Mulder</A> on Sep 01, 2006
+ (<A
href="http://goopen.org/confluence/pages/diffpages.action?pageId=13349&originalId=13363">view
change</A>)
(<A
href="http://goopen.org/confluence/pages/editpage.action?pageId=13349">edit
page</A>)
</DIV>