User: jules_gosnell
  Date: 01/11/21 15:13:01

  Modified:    jetty/src/main/org/jboss/jetty JBossLogSink.java
                        JBossUserRealm.java Jetty.java JettyMBean.java
                        JettyResolver.java JettyService.java
                        SetupHandler.java
  Added:       jetty/src/main/org/jboss/jetty
                        JBossWebApplicationContext.java
  Log:
  my first cut of the JBoss3/Jetty4 integration - enjoy !
  
  Revision  Changes    Path
  1.7       +9 -8      contrib/jetty/src/main/org/jboss/jetty/JBossLogSink.java
  
  Index: JBossLogSink.java
  ===================================================================
  RCS file: /cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/JBossLogSink.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- JBossLogSink.java 2001/10/03 22:27:02     1.6
  +++ JBossLogSink.java 2001/11/21 23:13:01     1.7
  @@ -5,7 +5,7 @@
    * See terms of license at gnu.org.
    */
   
  -// $Id: JBossLogSink.java,v 1.6 2001/10/03 22:27:02 jules_gosnell Exp $
  +// $Id: JBossLogSink.java,v 1.7 2001/11/21 23:13:01 jules_gosnell Exp $
   
   package org.jboss.jetty;
   
  @@ -22,7 +22,7 @@
    * This class bidges the API between Jetty and Log4J.
    *
    * @author <a href="mailto:";>Jules Gosnell</a>
  - * @version $Id: JBossLogSink.java,v 1.6 2001/10/03 22:27:02 jules_gosnell Exp $
  + * @version $Id: JBossLogSink.java,v 1.7 2001/11/21 23:13:01 jules_gosnell Exp $
    * @since 1.0
    * @see org.mortbay.util.LogSink
    */
  @@ -34,7 +34,7 @@
     HashMap  _dispatch = new HashMap();
   
     interface Logger {void log(String s);}
  -  
  +
     public
       JBossLogSink()
     {
  @@ -65,6 +65,7 @@
       throws InterruptedException
     {
       _started = false;
  +    //_log=null;
     }
   
     public void
  @@ -101,10 +102,10 @@
     {
       // is it possible to translate these into JBoss logging options...?
     }
  -  
  +
     public void
       setOptions(String logOptions)
  -  {  
  +  {
       //     setOptions((logOptions.indexOf(OPT_TIMESTAMP) >= 0),
       //              (logOptions.indexOf(OPT_LABEL) >= 0),
       //              (logOptions.indexOf(OPT_TAG) >= 0),
  @@ -112,7 +113,7 @@
       //              (logOptions.indexOf(OPT_STACKTRACE) >= 0),
       //              (logOptions.indexOf(OPT_ONELINE) >= 0));
     }
  -  
  +
     public String
       getOptions()
     {
  @@ -125,7 +126,7 @@
       //       (_logOneLine?"O":"");
       return "";
     }
  -  
  +
     /* ------------------------------------------------------------ */
     /** Log a message.
      * This method formats the log information as a string and calls
  @@ -158,7 +159,7 @@
     /** Log a message.
      * The formatted log string is written to the log sink. The default
      * implementation writes the message to a PrintWriter.
  -   * @param formattedLog 
  +   * @param formattedLog
      */
     public synchronized void
       log(String formattedLog)
  
  
  
  1.8       +131 -79   contrib/jetty/src/main/org/jboss/jetty/JBossUserRealm.java
  
  Index: JBossUserRealm.java
  ===================================================================
  RCS file: /cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/JBossUserRealm.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JBossUserRealm.java       2001/09/17 23:07:47     1.7
  +++ JBossUserRealm.java       2001/11/21 23:13:01     1.8
  @@ -5,13 +5,17 @@
    * See terms of license at gnu.org.
    */
   
  -// $Id: JBossUserRealm.java,v 1.7 2001/09/17 23:07:47 jules_gosnell Exp $
  +// $Id: JBossUserRealm.java,v 1.8 2001/11/21 23:13:01 jules_gosnell Exp $
   
   package org.jboss.jetty;
   
  -import java.util.HashSet;
  +import java.util.Collections;
  +import java.util.HashMap;
  +import java.util.Set;
  +import javax.naming.Context;
   import javax.naming.InitialContext;
   import javax.naming.NamingException;
  +import javax.security.auth.Subject;
   import org.apache.log4j.Category;
   import org.jboss.security.EJBSecurityManager;
   import org.jboss.security.RealmMapping;
  @@ -25,106 +29,103 @@
   /** An implementation of UserRealm that integrates with the JBossSX
    * security manager associted with the web application.
    * @author  [EMAIL PROTECTED]
  - * @version $Revision: 1.7 $
  + * @version $Revision: 1.8 $
    */
  +
  +// TODO
  +
   public class JBossUserRealm
     implements UserRealm
   {
  -  private String   _realmName;
  -  private Category _log;
  -
  -  //----------------------------------------
  -
  -  class User
  -    extends SimplePrincipal
  -    implements UserPrincipal
  -  {
  -    HttpRequest _request;
  -    
  -    User(String name, HttpRequest request)
  +  class JBossUserPrincipal
  +    extends SimplePrincipal  // The JBoss API
  +    implements UserPrincipal // The Jetty API
  +  {
  +    JBossUserPrincipal(String name)
       {
         super(name);
  -      _request = request;
  +      _log.info("Security- created JBossUserRealm::JBossUserPrincipal: "+name);
       }
  -    
  +
       public boolean
  -      authenticate(String password)
  +      equals(Object o)
       {
  -      boolean authenticated = false;
  -      String  username      = this.getName(); // needs disambiguation
  +      if (o==this)
  +     return true;
   
  -      _log.info("Authenticating access, username: " + username/* + " " + 
_request*/);
  -      
  -      try
  -      {
  -     // Get the JBoss security manager from the ENC context
  -     InitialContext iniCtx = new InitialContext();
  -     EJBSecurityManager securityMgr = (EJBSecurityManager) 
iniCtx.lookup("java:comp/env/security/securityMgr");
  +      if (o==null)
  +     return false;
   
  -     if(securityMgr.isValid(this, password))
  -     {
  -       authenticated = true;
  -       _request.setAttribute(UserPrincipal.__ATTR, this);
  +      if (getClass()!=o.getClass())
  +     return false;
   
  -       _log.info("User: "+username+" is authenticated");
  +      String myName  =this.getName();
  +      String yourName=((JBossUserPrincipal)o).getName();
   
  -       SecurityAssociation.setPrincipal(this);
  -       SecurityAssociation.setCredential(password.toCharArray());
  -       /*
  -         if( useJAAS == true && securityMgr instanceof SubjectSecurityManager )
  -         {
  -         SubjectSecurityManager subjectMgr = (SubjectSecurityManager) securityMgr;
  -         Subject subject = subjectMgr.getActiveSubject();
  -         _request.setAttribute(subjectAttributeName, subject);
  -         }
  -       */
  -     }
  -     else
  +      if (myName==null && yourName==null)
  +     return true;
  +
  +      if (myName!=null && myName.equals(yourName))
  +     return true;
  +
  +      return false;
  +    }
  +
  +    public boolean
  +      authenticate(String password, HttpRequest request)
  +    {
  +      boolean authenticated = false;
  +      String  userName      = this.getName(); // needs disambiguation because our 
outer class....
  +
  +      if (password==null)
  +     password="";
  +
  +      char[] passwordChars = password.toCharArray();
  +      _log.info("Security- authenticating: Name:"+userName+" Password:"+password);
  +      if(_securityMgr!=null &&_securityMgr.isValid(this, passwordChars))
  +      {
  +     _log.info("Security- JBossUserPrincipal: "+userName+" is authenticated");
  +     SecurityAssociation.setPrincipal(this);
  +     SecurityAssociation.setCredential(passwordChars);
  +     authenticated=true;
  +
  +     // This doesn't mean anything to Jetty - but may to some
  +     // Servlets - confirm later...
  +     if (_subjectMgr!=null)
        {
  -       _log.info("User: "+username+" is NOT authenticated");
  +       Subject subject = _subjectMgr.getActiveSubject();
  +       request.setAttribute(_subjectAttributeName, subject);
        }
  +
         }
  -      catch(NamingException e)
  +      else
         {
  -     _log.error("Error during authenticate", e);
  +     _log.warn("WARNING: Security- JBossUserPrincipal: "+userName+" is NOT 
authenticated");
         }
  -      
  +
         return authenticated;
       }
  -    
  +
       public boolean
         isUserInRole(String role)
       {
         boolean isUserInRole = false;
  -      String username = this.getName();
  +      String userName      = this.getName();
   
  -      _log.info("Authorizing access, username: " + username/* + " " + _request*/);
  -      
  -      try
  +      Set requiredRoles = Collections.singleton(new SimplePrincipal(role));
  +      if(_realmMapping!=null && _realmMapping.doesUserHaveRole(this, requiredRoles))
         {
  -     // Get the JBoss security manager from the ENC context
  -     InitialContext iniCtx = new InitialContext();
  -     RealmMapping securityMgr = (RealmMapping) 
iniCtx.lookup("java:comp/env/security/realmMapping");
  -     HashSet requiredRoles = new HashSet();
  -
  -     requiredRoles.add(new SimplePrincipal(role));
  -     if(securityMgr.doesUserHaveRole(this, requiredRoles))
  -     {
  -       isUserInRole = true;
  -       _log.info("User: "+username+" is authorized");
  -     }
  -     else
  -     {
  -       _log.warn("User: "+username+" is NOT authorized, 
requiredRoles="+requiredRoles);
  -     }
  +     _log.info("Security- JBossUserPrincipal: "+userName+" is in Role: "+role);
  +     isUserInRole = true;
         }
  -      catch(NamingException e)
  +      else
         {
  -     _log.error("Error during authorization", e);
  +     _log.warn("WARNING: Security- JBossUserPrincipal: "+userName+" is NOT in Role: 
"+role);
         }
  +
         return isUserInRole;
       }
  -    
  +
       public UserRealm
         getUserRealm()
       {
  @@ -132,14 +133,37 @@
       }
     }
   
  -  //----------------------------------------
  -  
  +  private Category               _log=Category.getInstance("Jetty");
  +  private String                 _realmName;
  +  private EJBSecurityManager     _securityMgr;
  +  private RealmMapping           _realmMapping;
  +  private HashMap                _users = new HashMap();
  +  private String                 _subjectAttributeName = "j_subject"; // needs 
accessors - TODO
  +  private SubjectSecurityManager _subjectMgr = null;
  +
     public
  -    JBossUserRealm(Category log, String realmName)
  +    JBossUserRealm(String realmName)
     {
  -    _log       = log;
       _realmName = realmName;
  -    _log.info("+++ Created JBossUserRealm, realmName="+_realmName);
  +    _log.info("Security- created JBossUserRealm: "+_realmName);
  +
  +    try
  +    {
  +      // can I get away with just doing this lookup once per webapp ?
  +      InitialContext iniCtx = new InitialContext();
  +      // do we need the 'java:comp/env' prefix ? TODO
  +      Context securityCtx  =(Context) iniCtx.lookup("java:comp/env/security");
  +      _securityMgr  =(EJBSecurityManager) securityCtx.lookup("securityMgr");
  +      _realmMapping =(RealmMapping)       securityCtx.lookup("realmMapping");
  +      iniCtx=null;
  +
  +      if (_securityMgr instanceof SubjectSecurityManager)
  +     _subjectMgr = (SubjectSecurityManager) _securityMgr;
  +    }
  +    catch (NamingException e)
  +    {
  +      _log.error("ERROR: Security- Could not create initial Context", e);
  +    }
     }
   
     public String
  @@ -148,10 +172,38 @@
       return _realmName;
     }
   
  +  //----------------------------------------
  +
  +  // this is going to cause contention - TODO
  +  private synchronized JBossUserPrincipal
  +    ensureUser(String userName)
  +  {
  +    JBossUserPrincipal user = (JBossUserPrincipal)_users.get(userName);
  +
  +    if (user==null)
  +    {
  +      user=new JBossUserPrincipal(userName);
  +      _users.put(userName, user);
  +    }
  +
  +    return user;
  +  }
  +
     public UserPrincipal
  -    getUser(String username, HttpRequest request)
  +    getUser(String userName)
     {
  -    _log.info("+++ JBossUserRealm.getUser, username="+username);
  -    return new User(username, request);
  +    _log.info("Security- JBossUserPrincipal: "+userName);
  +    return ensureUser(userName);
     }
  +
  +  /**
  +   * @deprecated
  +   */
  +  public UserPrincipal
  +    getUser(String userName, HttpRequest request)
  +  {
  +    return getUser(userName);
  +  }
  +
  +  //----------------------------------------
   }
  
  
  
  1.19      +43 -46    contrib/jetty/src/main/org/jboss/jetty/Jetty.java
  
  Index: Jetty.java
  ===================================================================
  RCS file: /cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/Jetty.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- Jetty.java        2001/09/23 19:42:32     1.18
  +++ Jetty.java        2001/11/21 23:13:01     1.19
  @@ -4,12 +4,12 @@
    * Distributable under GPL license.
    * See terms of license at gnu.org.
    */
  - 
  -// $Id: Jetty.java,v 1.18 2001/09/23 19:42:32 jules_gosnell Exp $
   
  +// $Id: Jetty.java,v 1.19 2001/11/21 23:13:01 jules_gosnell Exp $
  +
   // A Jetty HttpServer with the interface expected by JBoss'
   // J2EEDeployer...
  - 
  +
   package org.jboss.jetty;
   
   import java.io.FileNotFoundException;
  @@ -24,13 +24,13 @@
   import org.mortbay.http.HttpHandler;
   import org.mortbay.jetty.servlet.WebApplicationContext;
   import org.mortbay.util.Resource;
  - 
  +
   public class Jetty
     extends org.mortbay.jetty.Server
   {
     Category _log;
     JettyResolver _resolver;
  -  
  +
     Jetty(Category log)
     {
       super();
  @@ -38,11 +38,13 @@
   
       // resolver should be populated from a configuration file.
       _resolver=new JettyResolver(_log);
  -    
  -    URL 
stdWeb=findResourceInJar("org.mortbay.http.HttpServer","org/mortbay/jetty/servlet/web.dtd");
  -    _resolver.put("-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN", stdWeb);
  -    
  -    URL 
jbossWeb=findResourceInJar("org.jboss.web.AbstractWebContainer","org/jboss/metadata/jboss-web.dtd");
  +
  +    URL stdWeb22=findResourceInJar("javax/servlet/resources/web-app_2_2.dtd");
  +    _resolver.put("-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN", 
stdWeb22);
  +    URL stdWeb23=findResourceInJar("javax/servlet/resources/web-app_2_3.dtd");
  +    _resolver.put("-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN", 
stdWeb23);
  +
  +    URL jbossWeb=findResourceInJar("org/jboss/metadata/jboss-web.dtd");
       _resolver.put("-//jBoss//DTD Web Application 2.2//EN", jbossWeb);
       _resolver.put("-//JBoss//DTD Web Application 2.2//EN", jbossWeb);
     }
  @@ -75,7 +77,7 @@
     {
       _unpackWars=unpackWars;
     }
  -  
  +
     public synchronized boolean
       getUnpackWars()
     {
  @@ -93,7 +95,7 @@
     {
       _webDefault=webDefault;
     }
  -  
  +
     public synchronized String
       getWebDefault()
     {
  @@ -103,15 +105,15 @@
     //----------------------------------------
     // configuration property
     //----------------------------------------
  -  
  +
     String _configuration=null;
  -  
  +
     public synchronized void
       setConfiguration(String configUrl)
     {
       if (configUrl==null)
         return;
  -    
  +
       try
       {
         _log.info("loading config: "+configUrl);
  @@ -121,16 +123,16 @@
       }
       catch (Exception e)
       {
  -      _log.error("problem loading configuration: "+configUrl, e);
  +      _log.error("ERROR: problem loading configuration: "+configUrl, e);
       }
     }
  -  
  +
     public synchronized String
       getConfiguration()
     {
       return _configuration;
     }
  -  
  +
     //----------------------------------------------------------------------------
     // 'deploy' interface
     //----------------------------------------------------------------------------
  @@ -152,21 +154,22 @@
         if (getContext(null, contextPath, 0)!=null)
        _log.warn("WARNING: A WebApplication is already deployed in context 
'"+contextPath+"' - proceed at your own risk.");
   
  +      ClassLoader cl=Thread.currentThread().getContextClassLoader();
  +      // Greg now retrieves this for himself...
  +      //      app.setClassLoader(cl);
  +      wa.setClassLoader(cl);
  +
         // deploy the WebApp
  -      WebApplicationContext app=new WebApplicationContext(this, contextPath);
  +      WebApplicationContext app=new JBossWebApplicationContext(this, contextPath, 
_log, descriptorParser, wa);
  +      // Use the same ClassLoader as JBoss - this allows optimisation
  +      // of calls to EJBs...
         wa.setAppData(app);
   
         addContext(null, app);
   
  -      // Use the same ClassLoader as JBoss - this allows optimisation
  -      // of calls to EJBs...
  -      ClassLoader cl=Thread.currentThread().getContextClassLoader();
  -      app.setClassLoader(cl);
  -      wa.setClassLoader(cl);
  -
         String fixedWarUrl=warUrl+(warUrl.endsWith("/")?"":"/");
         app.initialize(fixedWarUrl, getWebDefault(), getUnpackWars());
  -      
  +
         wa.setName(app.getDisplayName());
   
         DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  @@ -175,11 +178,11 @@
         // locate and register $JETTY_HOME//etc/dtd/web.dtd
         //      parser.setErrorHandler();
         parser.setEntityResolver(_resolver);
  -      
  +
         // MANDATORY - web.xml
         Resource web=app.getResource("/WEB-INF/web.xml");
         wa.setWebApp(parser.parse(web.getInputStream()).getDocumentElement());
  -      
  +
         try
         {
        // OPTIONAL - jboss-web.xml
  @@ -192,15 +195,8 @@
        _log.info("no jboss-web.xml found");
         }
   
  -      // Add a handler to perform the JBoss integration during start()
  -      HttpHandler handler = new SetupHandler(_log, descriptorParser, wa);
  -      app.addHandler(handler);
  -      // finally - start the WebApp...
  +      // finally start the app
         app.start();
  -      // Remove the handler
  -      handler.stop();
  -      app.removeHandler(handler);
  -      handler.destroy();
   
         // keep track of deployed contexts for undeployment
         _deployed.put(warUrl, app);
  @@ -209,26 +205,27 @@
       }
       catch (Exception e)
       {
  -      _log.error("problem deploying "+warUrl+" to "+contextPath, e);
  +      _log.error("ERROR: problem deploying "+warUrl+" to "+contextPath, e);
         throw new DeploymentException(e.getMessage());
       }
   
       return wa;
     }
  -  
  +
     public void
       undeploy(String warUrl)
       throws DeploymentException
     {
       // find the WebApp Context in the repository
       WebApplicationContext app = (WebApplicationContext)_deployed.get(warUrl);
  -    
  +
       try
       {
         app.stop();
   
         removeContext(app);
  -      app.destroy();
  +      //      app.destroy();
  +      app=null;
   
         _deployed.remove(warUrl);
   
  @@ -236,11 +233,11 @@
       }
       catch (Exception e)
       {
  -      _log.error("problem undeploying "+warUrl, e);
  +      _log.error("ERROR: problem undeploying "+warUrl, e);
         throw new DeploymentException(e.getMessage());
       }
     }
  -  
  +
     public boolean
       isDeployed(String warUrl)
     {
  @@ -252,19 +249,19 @@
     //----------------------------------------------------------------------------
   
     public URL
  -    findResourceInJar(String sibling, String name)
  +    findResourceInJar(String name)
     {
       URL url=null;
  -    
  +
       try
       {
         url=getClass().getClassLoader().getResource(name);
       }
       catch (Exception e)
       {
  -      _log.error("Could not find resource: "+name, e);
  +      _log.error("ERROR: Could not find resource: "+name, e);
       }
  -    
  +
       return url;
     }
   }
  
  
  
  1.5       +3 -3      contrib/jetty/src/main/org/jboss/jetty/JettyMBean.java
  
  Index: JettyMBean.java
  ===================================================================
  RCS file: /cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/JettyMBean.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JettyMBean.java   2001/09/17 23:07:47     1.4
  +++ JettyMBean.java   2001/11/21 23:13:01     1.5
  @@ -13,10 +13,10 @@
   import javax.management.MBeanException;
   import javax.management.MBeanServer;
   import javax.management.ObjectName;
  -import org.mortbay.jetty.jmx.HttpServerMBean;
  +import org.mortbay.jetty.jmx.JettyServerMBean;
   
   public class JettyMBean
  -  extends HttpServerMBean
  +  extends JettyServerMBean
   {
     public JettyMBean(Jetty jetty)
       throws MBeanException, InstanceNotFoundException
  
  
  
  1.5       +8 -8      contrib/jetty/src/main/org/jboss/jetty/JettyResolver.java
  
  Index: JettyResolver.java
  ===================================================================
  RCS file: /cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/JettyResolver.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JettyResolver.java        2001/09/18 23:06:49     1.4
  +++ JettyResolver.java        2001/11/21 23:13:01     1.5
  @@ -4,7 +4,7 @@
    * Distributable under GPL license.
    * See terms of license at gnu.org.
    */
  - 
  +
   // $Id$
   
   package org.jboss.jetty;
  @@ -22,27 +22,27 @@
   // revisited.
   
   public class JettyResolver
  -  implements EntityResolver 
  +  implements EntityResolver
   {
     protected Category _log;
     protected HashMap  _map=new HashMap();
  -  
  +
     public
       JettyResolver(Category log)
     {
       _log=log;
     }
  -  
  +
     public InputSource
       resolveEntity (String publicId, String systemId)
     {
       _log.info("resolving "+publicId+" : "+systemId);
  -    
  +
       URL url=(URL)_map.get(publicId);
  -    
  +
       if (url==null)
       {
  -      _log.info("no resolution for "+publicId);
  +      _log.warn("WARNING: no resolution for "+publicId+" - are you using a 
supported JSDK version?");
       }
       else
       {
  @@ -54,7 +54,7 @@
         }
         catch (IOException e)
         {
  -     _log.error("bad resolution "+publicId+" : "+url, e);
  +     _log.error("ERROR: bad resolution "+publicId+" : "+url, e);
         }
       }
   
  
  
  
  1.27      +44 -45    contrib/jetty/src/main/org/jboss/jetty/JettyService.java
  
  Index: JettyService.java
  ===================================================================
  RCS file: /cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/JettyService.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- JettyService.java 2001/11/12 06:36:50     1.26
  +++ JettyService.java 2001/11/21 23:13:01     1.27
  @@ -4,9 +4,9 @@
    * Distributable under GPL license.
    * See terms of license at gnu.org.
    */
  - 
  -// $Id: JettyService.java,v 1.26 2001/11/12 06:36:50 d_jencks Exp $
   
  +// $Id: JettyService.java,v 1.27 2001/11/21 23:13:01 jules_gosnell Exp $
  +
   package org.jboss.jetty;
   
   import java.io.File;
  @@ -25,19 +25,18 @@
   import org.jboss.web.AbstractWebContainer.WebDescriptorParser;
   import org.jboss.web.AbstractWebContainer;
   import org.jboss.web.WebApplication;
  -import org.mortbay.http.HandlerContext;
   import org.mortbay.http.HttpServer;
  -import org.mortbay.jetty.jmx.HttpServerMBean;
  +import org.mortbay.jetty.jmx.JettyServerMBean;
   import org.mortbay.jetty.servlet.WebApplicationContext;
   import org.mortbay.util.Log;
   import org.mortbay.xml.XmlConfiguration;
   
   /**
    *   A service to launch jetty from JMX.
  - *      
  + *
    *   @see <related>
    *   @author <a href="mailto:[EMAIL PROTECTED]";>Julian Gosnell</a>
  - *   @version $Revision: 1.26 $
  + *   @version $Revision: 1.27 $
    */
   
   // NOTES
  @@ -50,7 +49,7 @@
     implements JettyServiceMBean, MBeanRegistration
   {
     public static final String NAME = "Jetty";
  -  
  +
     Category     _log    = 
Category.getInstance(super.category.getName()+"."+getName());
     JettyMBean   _mbean  = null;
     Jetty        _jetty  = null;
  @@ -73,18 +72,18 @@
     {
       name = getObjectName(server, name);
       _server = server;
  -    
  +
       return name;
     }
   
     //----------------------------------------------------------------------------
  -  
  +
     protected void
       ensureLogging()
     {
       // sort out a JBossLogSink for use by Jetty. This will bridge the
       // API between Jetty and Log4J...
  -    
  +
       JBossLogSink logSink = new JBossLogSink();
       try
       {
  @@ -92,24 +91,24 @@
       }
       catch(Exception e)
       {
  -      _log.error("Could not initialise logging bridge", e);
  +      _log.error("ERROR: Could not initialise logging bridge", e);
       }
   
       logSink.start();
       Log.instance().disableLog(); // remove default logger
       Log.instance().add(logSink);
  -    
  +
       // why doesn't this work? - investigate...
       //    _jetty.setLogSink(logSink);
  -    
  +
       _log.info("connected JBoss and Jetty Log models");
     }
  -  
  +
     /** the usual path separators we know */
     protected final static String KNOWN_PATH_SEPARATORS=":;";
  -  
  +
     /** tiny helper that converts classpath properties to the target platform */
  -  protected String convertPath(String original) 
  +  protected String convertPath(String original)
     {
      // should be set, but who knows
      String separator=System.getProperty("path.separator",";");
  @@ -121,17 +120,17 @@
            result.append(separator);
         } else {
            first=false;
  -      }  
  +      }
         result.append(tokenizer.nextToken());
      }
      return result.toString();
     }
  -  
  +
     /** this is the property in which Jasper expects the additional classpath
      */
     protected final static String TC_PATH_ADD="tc_path_add";
  -  
  -  /** 
  +
  +  /**
      * enter the jetty.properties file to the system properties such that
      * Jasper will find the right jars to compile
      */
  @@ -141,15 +140,15 @@
     {
       String props="jetty.properties";
       InputStream propertiesIn = 
getClass().getClassLoader().getResourceAsStream(props);
  -    
  +
       if (propertiesIn == null)
         throw new IOException("failed to load "+props);
  -    
  +
       System.getProperties().load(propertiesIn);
  -    
  +
       // make sure that the tc_path_add property is correctly set
  -    System.setProperty(TC_PATH_ADD,convertPath(System.getProperty(TC_PATH_ADD,"")));
  -  
  +    //    
System.setProperty(TC_PATH_ADD,convertPath(System.getProperty(TC_PATH_ADD,"")));
  +
       _log.info("loaded properties from: "+props);
     }
   
  @@ -182,7 +181,7 @@
         }
         catch (Throwable e)
         {
  -     _log.error("JMX Registration problem", e);
  +     _log.error("ERROR: JMX Registration problem", e);
         }
       }
       else
  @@ -201,7 +200,7 @@
       ensureJetty();
       ensureConfig();
     }
  -  
  +
     //----------------------------------------------------------------------------
     // 'name' interface
     //----------------------------------------------------------------------------
  @@ -212,7 +211,7 @@
     {
       return new ObjectName(OBJECT_NAME);
     }
  -  
  +
     public String
       getName()
     {
  @@ -222,8 +221,8 @@
     //----------------------------------------------------------------------------
     // 'service' interface
     //----------------------------------------------------------------------------
  +
   
  -  
     protected boolean _started=false;
   
     public void
  @@ -235,7 +234,7 @@
         try {ensureService();} catch (Exception e) {e.printStackTrace();}
       }
       else
  -      _log.warn("Jetty has already been initialised");
  +      _log.warn("WARNING: Jetty has already been initialised");
   
       if (!isStarted())
       {
  @@ -243,9 +242,9 @@
         _started=true;
       }
       else
  -      _log.warn("Jetty has already been started");
  +      _log.warn("WARNING: Jetty has already been started");
     }
  -   
  +
     public void
       stopService()
     {
  @@ -257,23 +256,22 @@
         }
         catch (Exception e)
         {
  -     _log.error("Could not stop Jetty", e);
  +     _log.error("ERROR: Could not stop Jetty", e);
         }
         _started=false;
       }
       else
  -      _log.warn("Jetty has already been stopped");
  +      _log.warn("WARNING: Jetty has already been stopped");
       if (!isDestroyed())
       {
  -      _jetty.destroy();
  +      //      _jetty.destroy();
         _jetty=null;
         _mbean=null;
       }
       else
  -      _log.warn("Jetty has already been destroyed");
  +      _log.warn("WARNING: Jetty has already been destroyed");
     }
   
  -
     //----------------------------------------------------------------------------
     // 'deploy' interface
     //----------------------------------------------------------------------------
  @@ -282,9 +280,10 @@
       performDeploy(String path, String warUrl, WebDescriptorParser parser)
       throws DeploymentException
     {
  +    _log.info("about to deploy to "+path);
       return _jetty.deploy(path, warUrl, parser);
     }
  -     
  +
     public void
       performUndeploy(String warUrl)
       throws DeploymentException
  @@ -299,25 +298,25 @@
     {
       return (_jetty!=null);
     }
  -  
  +
     protected boolean
       isStarted()
     {
       return (_jetty!=null && _started);
     }
  -  
  +
     protected boolean
       isStopped()
     {
       return (!_started);
     }
  -  
  +
     protected boolean
       isDestroyed()
     {
       return (_jetty==null);
     }
  -  
  +
     //----------------------------------------------------------------------------
   
     protected boolean _publishMBeans=false;
  @@ -361,7 +360,7 @@
     }
   
     //----------------------------------------------------------------------------
  -  
  +
     protected String _webDefault=null;
   
     public String
  @@ -385,7 +384,7 @@
     }
   
     //----------------------------------------------------------------------------
  -  
  +
     protected String _configuration=null;
   
     public String
  @@ -407,7 +406,7 @@
       else
         _configuration=configUrl;
     }
  -  
  +
     //----------------------------------------------------------------------------
   
     protected static String _jettyHome=null;
  
  
  
  1.11      +3 -82     contrib/jetty/src/main/org/jboss/jetty/SetupHandler.java
  
  Index: SetupHandler.java
  ===================================================================
  RCS file: /cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/SetupHandler.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SetupHandler.java 2001/10/03 22:27:02     1.10
  +++ SetupHandler.java 2001/11/21 23:13:01     1.11
  @@ -4,89 +4,10 @@
    * Distributable under GPL license.
    * See terms of license at gnu.org.
    */
  - 
  -// $Id: SetupHandler.java,v 1.10 2001/10/03 22:27:02 jules_gosnell Exp $
   
  -package org.jboss.jetty;
  +// $Id: SetupHandler.java,v 1.11 2001/11/21 23:13:01 jules_gosnell Exp $
   
  -import java.io.IOException;
  -import org.apache.log4j.Category;
  -import org.jboss.web.AbstractWebContainer.WebDescriptorParser;
  -import org.jboss.web.WebApplication;
  -import org.mortbay.http.HttpException;
  -import org.mortbay.http.HttpRequest;
  -import org.mortbay.http.HttpResponse;
  -import org.mortbay.http.HttpServer;
  -import org.mortbay.http.handler.NullHandler;
  -import org.w3c.dom.Element;
  +package org.jboss.jetty;
   
  -/**
  - * An HttpHandler that simply hooks into the web application startup
  - * so that is sees the correct class loader and security realm name.
  - *
  - * @author  [EMAIL PROTECTED]
  - * @version $Revision: 1.10 $
  - */
   public class SetupHandler
  -  extends NullHandler
  -{
  -  Category            _log;
  -  WebDescriptorParser _descriptorParser;
  -  WebApplication      _webApp;
  -
  -  //----------------------------------------------------------------------
  -
  -  public
  -    SetupHandler(Category log,
  -              WebDescriptorParser descriptorParser,
  -              WebApplication webApp)
  -  {
  -    _log              = log;
  -    _descriptorParser = descriptorParser;
  -    _webApp           = webApp;
  -  }
  -  
  -  //----------------------------------------------------------------------
  -
  -  public void
  -    start()
  -    throws Exception
  -  {
  -    ClassLoader loader = getHandlerContext().getClassLoader();
  -
  -    // sanity check - the classloader with which we are called
  -    // (i.e. the one that Jetty has used for the webapps context)
  -    // should be either the one we specified, or a descendent of it.
  -    {
  -      ClassLoader cl = loader;
  -      while (cl!=null && cl!=_webApp.getClassLoader())
  -     cl=cl.getParent();
  -      
  -      if (cl==null)
  -     _log.warn("WebApp Context's ClassLoader is of incorrect descent:"+loader);
  -    }
  -    
  -    // Setup the JNDI environment
  -    Element webAppDD = _webApp.getWebApp();
  -    Element jbossDD  = _webApp.getJbossWeb();
  -    _descriptorParser.parseWebAppDescriptors(loader, webAppDD, jbossDD);
  -    
  -    // Add the JBoss security realm
  -    HttpServer server    = getHandlerContext().getHttpServer();
  -    String     realmName = getHandlerContext().getRealm();
  -    server.addRealm(new JBossUserRealm(_log, realmName));
  -    
  -    super.start();
  -  }
  -  
  -  //----------------------------------------------------------------------
  -
  -  /**
  -   * Does nothing - we are only interested in {@link #start}.
  -   */
  -  public void
  -    handle(String pathInContext, String pathParams, HttpRequest request, 
HttpResponse response)
  -    throws HttpException, IOException
  -  {
  -  }
  -}
  +{}
  
  
  
  1.1                  
contrib/jetty/src/main/org/jboss/jetty/JBossWebApplicationContext.java
  
  Index: JBossWebApplicationContext.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  
  // $Id: JBossWebApplicationContext.java,v 1.1 2001/11/21 23:13:01 jules_gosnell Exp $
  
  // A Jetty HttpServer with the interface expected by JBoss'
  // J2EEDeployer...
  
  package org.jboss.jetty;
  
  import org.apache.log4j.Category;
  import org.jboss.web.AbstractWebContainer.WebDescriptorParser;
  import org.jboss.web.WebApplication;
  import org.mortbay.http.HttpServer;
  import org.mortbay.jetty.servlet.WebApplicationContext;
  import org.w3c.dom.Element;
  
  import org.mortbay.http.handler.SecurityHandler;
  
  import javax.naming.Context;
  import javax.naming.InitialContext;
  
  import org.jboss.security.EJBSecurityManager;
  import org.jboss.security.RealmMapping;
  import org.jboss.security.SimplePrincipal;
  import org.jboss.security.SecurityAssociation;
  import org.jboss.security.SubjectSecurityManager;
  
  import org.mortbay.http.UserPrincipal;
  import org.mortbay.http.UserRealm;
  
  import org.mortbay.http.ContextLoader;
  
  public class
    JBossWebApplicationContext
    extends WebApplicationContext
  {
    Category            _log;
    WebDescriptorParser _descriptorParser;
    WebApplication      _webApp;
  
    public
      JBossWebApplicationContext(HttpServer httpServer,
                               String contextPathSpec,
                               Category log,
                               WebDescriptorParser descriptorParser,
                               WebApplication webApp)
      {
        super(httpServer, contextPathSpec);
  
        _log              = log;
        _descriptorParser = descriptorParser;
        _webApp           = webApp;
  
        //       try
        //       {
        //      initClassLoader();
        //       }
        //       catch (Exception e)
        //       {
        //      _log.error("ERROR: BAD CLASSLOADER - ", e);
        //       }
        //
        //       ClassLoader loader = getClassLoader();
        //
        //       // sanity check - the classloader with which we are called
        //       // (i.e. the one that Jetty has used for the webapps context)
        //       // should be either the one we specified, or a descendent of it.
        //       {
        //      ClassLoader cl = loader;
        //      while (cl!=null && cl!=_webApp.getClassLoader())
        //        cl=cl.getParent();
        //
        //      if (cl==null)
        //        _log.warn("WARNING: WebApp Context's ClassLoader is of incorrect 
descent:"+loader);
        //      else
        //        _log.info("WebApp Context's ClassLoader is of correct 
descent:"+loader);
        //       }
      }
  
    /* ------------------------------------------------------------ */
    /** Get the context SecurityHandler.
     * Conveniance method. If no SecurityHandler exists, a new one is added to
     * the context at position 0.
     * @return SecurityHandler
     */
  
    class
      JBossSXSecurityHandler
      extends SecurityHandler
      {
        public void start()
          throws Exception
        {
          //      ClassLoader loader = getHttpContext().getClassLoader();
          ClassLoader loader = Thread.currentThread().getContextClassLoader();
  
          //      Thread.currentThread().setContextClassLoader(loader);
  
          // sanity check - the classloader with which we are called
          // (i.e. the one that Jetty has used for the webapps context)
          // should be either the one we specified, or a descendent of it.
  
          {
            ClassLoader cl = loader;
            while (cl!=null && cl!=_webApp.getClassLoader())
              cl=cl.getParent();
  
            if (cl==null)
              _log.warn("WARNING: WebApp Context's ClassLoader is of incorrect 
descent:"+loader);
            else
              _log.info("WebApp Context's ClassLoader is of correct descent:"+loader);
          }
  
          // Parse descriptors and set up the JNDI environment
          Element webAppDD = _webApp.getWebApp();
          Element jbossDD  = _webApp.getJbossWeb();
          _descriptorParser.parseWebAppDescriptors(loader, webAppDD, jbossDD);
          _log.info("WebApp Descriptors parsed");
  
          // Add the JBoss security realm
          String realmName = getRealm();
          if (realmName!=null)
          {
            _log.info("WebApp Realm initialised");
            // these need to be cached and reused by name... - TODO
            getHttpContext().getHttpServer().addRealm(new JBossUserRealm(realmName));
          }
  
          // this is causing a printout which implies a separate
          // SecurityHandler has also started...
          super.start();
        }
      }
  
  
    /**
     * return the first JBossSXSecurityHandler, inserting one at the
     * beginning of the list, if no other can be found.
     *
     * @return a <code>SecurityHandler</code> value
     */
    public SecurityHandler
      getSecurityHandler()
      {
        SecurityHandler securityHandler=null;
        securityHandler=(SecurityHandler)getHttpHandler(JBossSXSecurityHandler.class);
        if (securityHandler==null)
        {
        securityHandler=new JBossSXSecurityHandler();
        addHttpHandler(0,securityHandler);
        }
        return securityHandler;
      }
  
    // avoid Jetty maoning about things that it doesn't bu AbstractWebContainer does 
do...
  
    protected void
      initWebXmlElement(String element, org.mortbay.xml.XmlParser.Node node)
      throws Exception
      {
        // these are handled by AbstractWebContainer
        if ("resource-ref".equals(element) ||
          "env-entry".equals(element) ||
          "ejb-ref".equals(element))
        {
        //_log.info("Don't moan : "+element);
        }
        // these are handled by Jetty
        else
        super.initWebXmlElement(element, node);
      }
  
    //--debugging
  
    public boolean
      handle(org.mortbay.http.HttpRequest request, org.mortbay.http.HttpResponse 
response)
      throws org.mortbay.http.HttpException, java.io.IOException
      {
        Thread.currentThread().setContextClassLoader(getClassLoader());
        return super.handle(request, response);
      }
  
     protected void initClassLoader()
       throws java.net.MalformedURLException, java.io.IOException
       {
         super.initClassLoader();
  
         ClassLoader _loader=getClassLoader();
         if (_loader instanceof org.mortbay.http.ContextLoader)
        ((org.mortbay.http.ContextLoader)_loader).setJava2Compliant(true);
       }
  
    public String getFileClassPath()
      throws IllegalStateException
      {
        ClassLoader loader = getClassLoader();
        if (loader==null)
        throw new IllegalStateException("Context classloader not initialized");
        String fileClassPath =
        ((loader instanceof ContextLoader)
         ? ((ContextLoader)loader).getFileClassPath()
         : getClassPath())+
        System.getProperty("path.separator")+
        System.getProperty("java.class.path");
  
        try
        {
        String dtd="javax/servlet/resources/web-app_2_3.dtd";
        String path=getClass().getClassLoader().getResource(dtd).toString();
        String jarPath=path.substring(0,path.length()-(dtd.length()+2)); // lose final 
'!/class...'
        jarPath=jarPath.substring("jar:file:".length(),jarPath.length());
        fileClassPath+=jarPath;
        }
        catch (Exception e)
        {
        _log.warn("WARNING: could not find Servlet API jar", e);
        }
  
        try
        {
        String dtd="org/apache/jasper/resources/jsp12.dtd";
        String path=getClass().getClassLoader().getResource(dtd).toString();
        String jarPath=path.substring(0,path.length()-(dtd.length()+2)); // lose final 
'!/class...'
        jarPath=jarPath.substring("jar:file:".length(),jarPath.length());
        fileClassPath+=":"+jarPath;
        }
        catch (Exception e)
        {
        _log.warn("WARNING: could not find Servlet API jar", e);
        }
  
        _log.info("default JSP CLASSPATH:"+fileClassPath);
        return fileClassPath;
      }
  }
  
  
  
  
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to