User: stark
Date: 01/02/27 08:48:08
Modified: src/main/org/jboss/ejb Container.java ContainerFactory.java
Log:
Add support for a SecurityInterceptor security proxy and restore the
externalization of the container interceptor configuration that I
dropped in the last patch.
Revision Changes Path
1.37 +12 -1 jboss/src/main/org/jboss/ejb/Container.java
Index: Container.java
===================================================================
RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/ejb/Container.java,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- Container.java 2001/02/21 06:20:09 1.36
+++ Container.java 2001/02/27 16:48:07 1.37
@@ -67,7 +67,7 @@
* @see ContainerFactory
* @author Rickard �berg ([EMAIL PROTECTED])
* @author <a href="[EMAIL PROTECTED]">Marc Fleury</a>
- * @version $Revision: 1.36 $
+ * @version $Revision: 1.37 $
*/
public abstract class Container
{
@@ -102,6 +102,9 @@
// This is the realm mapping
protected RealmMapping rm;
+ /** The custom security proxy used by the SecurityInterceptor */
+ protected Object securityProxy;
+
// This is a cache for method permissions
private HashMap methodPermissionsCache = new HashMap();
@@ -149,6 +152,14 @@
return rm;
}
+ public void setSecurityProxy(Object proxy)
+ {
+ this.securityProxy = proxy;
+ }
+ public Object getSecurityProxy()
+ {
+ return securityProxy;
+ }
/**
* Sets the application deployment unit for this container. All the bean
1.67 +63 -127 jboss/src/main/org/jboss/ejb/ContainerFactory.java
Index: ContainerFactory.java
===================================================================
RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/ejb/ContainerFactory.java,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -r1.66 -r1.67
--- ContainerFactory.java 2001/02/23 18:22:23 1.66
+++ ContainerFactory.java 2001/02/27 16:48:08 1.67
@@ -77,8 +77,9 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Juha Lindfors</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
* @author Peter Antman ([EMAIL PROTECTED])
+* @author Scott Stark([EMAIL PROTECTED])
*
-* @version $Revision: 1.66 $
+* @version $Revision: 1.67 $
*/
public class ContainerFactory
extends org.jboss.util.ServiceMBeanSupport
@@ -541,39 +542,12 @@
// Stolen from Stateless deploy
// Create container
MessageDrivenContainer container = new MessageDrivenContainer();
+ int transType = ((MessageDrivenMetaData)bean).isContainerManagedTx() ?
ContainerInterceptors.CMT : ContainerInterceptors.BMT;
- initializeContainer( container, conf, bean, cl, localCl );
+ initializeContainer( container, conf, bean, transType, cl, localCl );
container.setContainerInvoker( createContainerInvoker( conf, cl ) );
container.setInstancePool( createInstancePool( conf, cl ) );
- // Create interceptors
- container.addInterceptor( new LogInterceptor() );
- container.addInterceptor( new SecurityInterceptor() );
- if( ( (MessageDrivenMetaData) bean ).isContainerManagedTx() )
- {
- // CMT
- container.addInterceptor( new TxInterceptorCMT() );
-
- if( metricsEnabled )
- container.addInterceptor( new MetricsInterceptor() );
-
- container.addInterceptor( new MessageDrivenInstanceInterceptor() );
- }
- else
- {
- // BMT
- container.addInterceptor( new MessageDrivenInstanceInterceptor() );
- // FIXME. should we have a special BMT tx interceptor
- // to place ACK there???
- container.addInterceptor( new MessageDrivenTxInterceptorBMT() );
-
- if( metricsEnabled )
- container.addInterceptor( new MetricsInterceptor() );
- }
-
- // Finally we add the last interceptor from the container
- container.addInterceptor( container.createContainerInterceptor() );
-
return container;
}
@@ -585,37 +559,11 @@
ConfigurationMetaData conf = bean.getContainerConfiguration();
// Create container
StatelessSessionContainer container = new StatelessSessionContainer();
-
- initializeContainer( container, conf, bean, cl, localCl );
+ int transType = ((SessionMetaData)bean).isContainerManagedTx() ?
ContainerInterceptors.CMT : ContainerInterceptors.BMT;
+ initializeContainer( container, conf, bean, transType, cl, localCl );
container.setContainerInvoker( createContainerInvoker( conf, cl ) );
container.setInstancePool( createInstancePool( conf, cl ) );
- // Create interceptors
- container.addInterceptor( new LogInterceptor() );
- container.addInterceptor( new SecurityInterceptor() );
-
- if( ( (SessionMetaData) bean ).isContainerManagedTx() )
- {
- // CMT
- container.addInterceptor( new TxInterceptorCMT() );
-
- if( metricsEnabled )
- container.addInterceptor( new MetricsInterceptor() );
-
- container.addInterceptor( new StatelessSessionInstanceInterceptor() );
- }
- else
- {
- // BMT
- container.addInterceptor( new StatelessSessionInstanceInterceptor() );
- container.addInterceptor( new TxInterceptorBMT() );
-
- if( metricsEnabled )
- container.addInterceptor( new MetricsInterceptor() );
- }
-
- // Finally we add the last interceptor from the container
- container.addInterceptor( container.createContainerInterceptor() );
-
+
return container;
}
@@ -627,40 +575,15 @@
ConfigurationMetaData conf = bean.getContainerConfiguration();
// Create container
StatefulSessionContainer container = new StatefulSessionContainer();
-
- initializeContainer( container, conf, bean, cl, localCl );
+ int transType = ((SessionMetaData)bean).isContainerManagedTx() ?
ContainerInterceptors.CMT : ContainerInterceptors.BMT;
+ initializeContainer( container, conf, bean, transType, cl, localCl );
container.setContainerInvoker( createContainerInvoker( conf, cl ) );
container.setInstanceCache( createInstanceCache( conf,
m_beanCacheJMSMonitoring, cl ) );
// No real instance pool, use the shadow class
container.setInstancePool( new StatefulSessionInstancePool() );
// Set persistence manager
container.setPersistenceManager( (StatefulSessionPersistenceManager)
cl.loadClass( conf.getPersistenceManager() ).newInstance() );
- // Create interceptors
- container.addInterceptor( new LogInterceptor() );
-
- if( ( (SessionMetaData) bean ).isContainerManagedTx() )
- {
- // CMT
- container.addInterceptor( new TxInterceptorCMT() );
-
- if( metricsEnabled )
- container.addInterceptor( new MetricsInterceptor() );
- container.addInterceptor( new StatefulSessionInstanceInterceptor() );
- }
- else
- {
- // BMT : the tx interceptor needs the context from the instance interceptor
- container.addInterceptor( new StatefulSessionInstanceInterceptor() );
- container.addInterceptor( new TxInterceptorBMT() );
-
- if( metricsEnabled )
- container.addInterceptor( new MetricsInterceptor() );
- }
-
- container.addInterceptor( new SecurityInterceptor() );
- container.addInterceptor( container.createContainerInterceptor() );
-
return container;
}
@@ -672,8 +595,8 @@
ConfigurationMetaData conf = bean.getContainerConfiguration();
// Create container
EntityContainer container = new EntityContainer();
-
- initializeContainer( container, conf, bean, cl, localCl );
+ int transType = ContainerInterceptors.CMT;
+ initializeContainer( container, conf, bean, transType, cl, localCl );
container.setContainerInvoker( createContainerInvoker( conf, cl ) );
container.setInstanceCache( createInstanceCache( conf,
m_beanCacheJMSMonitoring, cl ) );
container.setInstancePool( createInstancePool( conf, cl ) );
@@ -695,19 +618,6 @@
container.setPersistenceManager( persistenceManager );
}
- // Create interceptors
- container.addInterceptor( new LogInterceptor() );
- container.addInterceptor( new SecurityInterceptor() );
- // entity beans are always CMT
- container.addInterceptor( new TxInterceptorCMT() );
-
- if( metricsEnabled )
- container.addInterceptor( new MetricsInterceptor() );
-
- container.addInterceptor( new EntityInstanceInterceptor() );
- container.addInterceptor( new EntitySynchronizationInterceptor() );
- container.addInterceptor( container.createContainerInterceptor() );
-
return container;
}
@@ -715,7 +625,7 @@
// Helper Methods
// **************
- private static void initializeContainer( Container container,
ConfigurationMetaData conf, BeanMetaData bean, ClassLoader cl, ClassLoader localCl )
+ private void initializeContainer( Container container, ConfigurationMetaData
conf, BeanMetaData bean, int transType, ClassLoader cl, ClassLoader localCl )
throws NamingException, DeploymentException
{
// Create classloader for this container
@@ -727,36 +637,64 @@
// Set metadata
container.setBeanMetaData( bean );
// Set transaction manager
- container.setTransactionManager( (TransactionManager) new
InitialContext().lookup( "java:/TransactionManager" ) );
-
- // Set security manager & role mapping manager
- String securityManagerJNDIName = conf.getAuthenticationModule();
- String roleMappingManagerJNDIName = conf.getRoleMappingManager();
+ InitialContext iniCtx = new InitialContext();
+ container.setTransactionManager( (TransactionManager) iniCtx.lookup(
"java:/TransactionManager" ) );
- if( ( securityManagerJNDIName != null ) && ( roleMappingManagerJNDIName != null
) )
- {
- try
- {
- EJBSecurityManager ejbS = (EJBSecurityManager) new InitialContext().lookup(
securityManagerJNDIName );
+ // Set security manager & role mapping manager
+ String securityDomain = bean.getApplicationMetaData().getSecurityDomain();
+ String securityManagerJNDIName = conf.getAuthenticationModule();
+ String roleMappingManagerJNDIName = conf.getRoleMappingManager();
+
+ if( securityDomain != null && securityDomain.startsWith("java:/jaas") ==
false )
+ securityDomain = "java:/jaas/" + securityDomain;
+ if( securityDomain != null || ((securityManagerJNDIName != null) &&
(roleMappingManagerJNDIName != null)) )
+ { // Either the application has a security domain or the container has
security setup
+ try
+ {
+ if( securityManagerJNDIName == null )
+ securityManagerJNDIName = securityDomain;
+ System.out.println("lookup securityManager name:
"+securityManagerJNDIName);
+ EJBSecurityManager ejbS =
(EJBSecurityManager)iniCtx.lookup(securityManagerJNDIName);
+ container.setSecurityManager( ejbS );
+ }
+ catch (NamingException ne)
+ {
+ throw new DeploymentException( "Could not find the Security Manager
specified for this container, name="+securityManagerJNDIName, ne);
+ }
- container.setSecurityManager( ejbS );
+ try
+ {
+ if( roleMappingManagerJNDIName == null )
+ roleMappingManagerJNDIName = securityDomain;
+ RealmMapping rM =
(RealmMapping)iniCtx.lookup(roleMappingManagerJNDIName);
+ container.setRealmMapping( rM );
+ }
+ catch (NamingException ne)
+ {
+ throw new DeploymentException( "Could not find the Role Mapping
Manager specified for this container", ne );
+ }
}
- catch( NamingException ne )
+
+ // Set security proxies
+ String securityProxyClassName = bean.getSecurityProxy();
+ if( securityProxyClassName != null )
{
- throw new DeploymentException( "Could not find the Security Manager
specified for this container", ne );
+ try
+ {
+ Class proxyClass = cl.loadClass(securityProxyClassName);
+ Object proxy = proxyClass.newInstance();
+ container.setSecurityProxy(proxy);
+ System.out.println("setSecurityProxy, "+proxy);
+ }
+ catch(Exception e)
+ {
+ throw new DeploymentException("Missing SecurityProxy (in jboss.xml
or standardjboss.xml): " + conf.getContainerInvoker() +" - " + e);
+ }
}
- try
- {
- RealmMapping rM = (RealmMapping) new InitialContext().lookup(
roleMappingManagerJNDIName );
+ // Create interceptors
+ ContainerInterceptors.addInterceptors(container, transType, metricsEnabled,
conf.getContainerInterceptorsConf());
- container.setRealmMapping( rM );
- }
- catch( NamingException ne )
- {
- throw new DeploymentException( "Could not find the Role Mapping Manager
specified for this container", ne );
- }
- }
}
private static ContainerInvoker createContainerInvoker( ConfigurationMetaData
conf, ClassLoader cl )
@@ -827,5 +765,3 @@
}
}
-
-/*------ Formatted by Jindent 3.23 Basic 1.0 --- http://www.jindent.de ------*/