PooledInvoker - RMI/Socket
The org.jboss.invocation.pooled.server.PooledInvoker is an MBean service that provides RMI over a custom socket transport implementation of the Invoker interface. The PooledInvoker exports itself as an RMI server so that when it is used as the Invoker in a remote client, the PooledInvoker stub is sent to the client instead and invocations use the custom socket protocol.
The PooledInvoker MBean supports a number of attribute to configure the socket transport layer. Its configurable attributes are:
NumAcceptThreads: The number of threads that exist for accepting client connections. The default is 1.
MaxPoolSize: The number of server threads for processing client. The default is 300.
SocketTimeout: The socket timeout value passed to the Socket.setSoTimeout() method. The default is 60000.
ServerBindPort: The port used for the server socket. A value of 0 indicates that an anonymous port should be chosen.
ClientConnectAddress: The address that the client passes to the Socket(addr, port) constructor. This defaults to the server InetAddress.getLocalHost() value.
ClientConnectPort: The port that the client passes to the Socket(addr, port) constructor. The default is the port of the server listening socket.
ClientMaxPoolSize: The client side maximum number of threads. The default is 300.
Backlog: The backlog associated with the server accept socket. The default is 200.
EnableTcpNoDelay: A boolean flag indicating if client sockets will enable the TcpNoDelay flag on the socket. The default is false.
ServerBindAddress: The address on which the server binds its listening socket. The default is an empty value which indicates the server should be bound on all interfaces.
TransactionManagerService: The JMX ObjectName of the JTA transaction manager service.
ClientSocketFactoryName: the javax.net.SocketFactory implementation class name to use on the client
ServerSocketFactoryName: the javax.net.ServerSocketFactory implementation class name to use on the server. See ServerSocketFactory as well.
ServerSocketFactory : an instantiated javax.net.ServerSocketFactory implementation to use on the server. See the Example SSL Config below for a usage.
Example Config
<mbean code="org.jboss.invocation.pooled.server.PooledInvoker" name="jboss:service=invoker,type=pooled"> <attribute name="NumAcceptThreads">1</attribute> <attribute name="MaxPoolSize">300</attribute> <attribute name="ClientMaxPoolSize">300</attribute> <attribute name="SocketTimeout">60000</attribute> <attribute name="ServerBindAddress">${jboss.bind.address}</attribute> <attribute name="ServerBindPort">4445</attribute> <attribute name="ClientConnectAddress">${jboss.bind.address}</attribute> <attribute name="ClientConnectPort">0</attribute> <attribute name="EnableTcpNoDelay">false</attribute> <depends optional-attribute-name="TransactionManagerService">jboss:service=TransactionManager</depends> </mbean>
Example SSL Config
<?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.jboss.security.plugins.JaasSecurityDomain" name="jboss.security:service=JaasSecurityDomain,domain=pooled-ssl"> <constructor> <arg type="java.lang.String" value="pooled-ssl"></arg> </constructor> <attribute name="KeyStoreURL">resource:localhost.keystore</attribute> <attribute name="KeyStorePass">unit-tests-server</attribute> <attribute name="TrustStoreURL">resource:localhost.keystore</attribute> <attribute name="TrustStorePass">unit-tests-server</attribute> <attribute name="Salt">abcdefgh</attribute> <attribute name="IterationCount">13</attribute> </mbean> <mbean code="org.jboss.invocation.pooled.server.PooledInvoker" name="jboss:service=invoker,type=pooled,socketType=SSLSocketFactory,wantsClientAuth=true"> <attribute name="NumAcceptThreads">1</attribute> <attribute name="MaxPoolSize">300</attribute> <attribute name="ClientMaxPoolSize">300</attribute> <attribute name="SocketTimeout">60000</attribute> <attribute name="ServerBindAddress">${jboss.bind.address}</attribute> <attribute name="ServerBindPort">0</attribute> <attribute name="ClientConnectAddress">${jboss.bind.address}</attribute> <attribute name="ClientConnectPort">0</attribute> <attribute name="ClientRetryCount">1</attribute> <attribute name="EnableTcpNoDelay">false</attribute> <!-- Customized socket factory attributes --> <attribute name="ClientSocketFactoryName">org.jboss.security.ssl.ClientSocketFactory</attribute> <attribute name="ServerSocketFactory" attributeClass="org.jboss.security.ssl.DomainServerSocketFactory" serialDataType="javaBean"> <property name="bindAddress">${jboss.bind.address}</property> <property name="securityDomain">java:/jaas/pooled-ssl</property> <property name="wantsClientAuth">true</property> <property name="needsClientAuth">true</property> <property name="CiperSuites">TLS_DHE_DSS_WITH_AES_128_CBC_SHA</property> <property name="Protocols">SSLv2Hello,SSLv3,TLSv1</property> </attribute> </mbean> <mbean code="org.jboss.security.auth.login.DynamicLoginConfig" name="jboss.security.tests:service=LoginConfig,policy=pooled-ssl"> <attribute name="PolicyConfig" serialDataType="jbxb"> <jaas:policy xsi:schemaLocation="urn:jboss:security-config:4.1 resource:security-config_4_1.xsd" xmlns:jaas="urn:jboss:security-config:4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <jaas:application-policy name="pooled-ssl"> <jaas:authentication> <jaas:login-module code="org.jboss.security.auth.spi.BaseCertLoginModule" flag = "required"> <jaas:module-option name="password-stacking">useFirstPass</jaas:module-option> <jaas:module-option name="securityDomain">java:/jaas/pooled-ssl</jaas:module-option> </jaas:login-module> <jaas:login-module code="org.jboss.security.auth.spi.XMLLoginModule" flag="required"> <jaas:module-option name="password-stacking">useFirstPass</jaas:module-option> <jaas:module-option name="userInfo"> <ur:users xsi:schemaLocation="urn:jboss:user-roles:1.0 resource:user-roles_1_0.xsd" xmlns:ur="urn:jboss:user-roles:1.0"> <ur:user name="CN=unit-tests-client, OU=JBoss Inc., O=JBoss Inc., ST=Washington, C=US" password=""> <ur:role name="Echo"></ur:role> </ur:user> </ur:users> </jaas:module-option> <jaas:module-option name="unauthenticatedIdentity">guest</jaas:module-option> </jaas:login-module> </jaas:authentication> </jaas:application-policy> </jaas:policy> </attribute> <depends optional-attribute-name="LoginConfigService"> jboss.security:service=XMLLoginConfig </depends> <depends optional-attribute-name="SecurityManagerService"> jboss.security:service=JaasSecurityManager </depends> </mbean> </server>
see also
PooledInvokerConfig
Comments