home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2004 March / VPR0403.ISO / talks / 208 / paper.dkb < prev    next >
Extensible Markup Language  |  2003-09-18  |  47KB  |  821 lines

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <article id="paper-208">
  3.   <articleinfo>
  4.     <title>The JOnAS Open Source J2EE Platform</title>
  5.     <author>
  6.       <firstname>Fran輟is</firstname>
  7.       <surname>Exertier</surname>
  8.     </author>
  9.     <copyright>
  10.       <year>2003</year>
  11.       <holder>Bull</holder>
  12.     </copyright>
  13.   </articleinfo>
  14.  
  15.     <para>This document presents the JOnAS J2EE platform. After a short
  16.       introduction of the J2EE concepts, and of the ObjectWeb Consortium,
  17.       the JOnAS server architecture and
  18.       features are presented.
  19.     </para>
  20.  
  21.  
  22. <section>
  23.   <title>Introduction</title>
  24.   <section>
  25.     <title>J2EE</title>
  26.     <para>The <trademark>Sun</trademark>
  27.       <ulink url="http://java.sun.com/j2ee/">J2EE specification</ulink>,
  28.       together with its related specifications
  29.       (<ulink url="http://java.sun.com/products/ejb/">
  30.     <trademark>EJB</trademark></ulink>,
  31.       <ulink url="http://java.sun.com/products/jms/">
  32.     <trademark>JMS</trademark></ulink>,...),
  33.       defines an architecture and interfaces for developing and deploying
  34.       distributed internet <trademark>Java</trademark> server applications based on a
  35.       multi-tier architecture. This
  36.       specification intends to facilitate and normalize the development,
  37.       deployment and assembling of applicative components; such components
  38.       will be deployable on J2EE platforms. The resulting applications are
  39.       typically web based, transactional, database-oriented, multi-user,
  40.       secured, scalable and portable. More precisely, this specification
  41.       describes two kinds of information:</para>
  42.     <itemizedlist>
  43.       <listitem><para>The first one is the runtime environment, called J2EE server, which
  44.     provides the execution environment and the required system services
  45.     such as the transaction service, the persistence service, the JMS
  46.     service, the security service ...</para></listitem>
  47.       <listitem><para>The second one is some kind of programmer's guide and user's guide
  48.     explaining how an application component should be developed, deployed
  49.     and used.</para></listitem>
  50.     </itemizedlist>
  51.  
  52.     <para>Not only will an application component be independent of the platform
  53.       and operating system (since written in Java), but also of the J2EE
  54.       platform.
  55.     </para>
  56.     <para>A typical J2EE application is composed of presentation components,
  57.       also called "web components" (<ulink url="http://java.sun.com/products/servlet">Servlets</ulink>
  58.       and <ulink url="http://java.sun.com/products/jsp"><trademark>JSPs</trademark></ulink>),
  59.       which define the application Web interface, and of enterprise components,
  60.       the "Enterprise JavaBeans", which define the application business logic
  61.       and application data. The J2EE server provides containers for hosting
  62.       web and enterprise components. The container provides the component
  63.       life cycle management and interfaces the components with the services
  64.       provided by the J2EE server. There are two kinds of container, the web
  65.       container handles Servlet and JSP components while the EJB container
  66.       handles the Enterprise JavaBeans components.</para>
  67.  
  68.       <para>
  69.         <inlinemediaobject>
  70.           <imageobject>
  71.             <imagedata fileref="picture-208-01.gif" format="GIF"/>
  72.           </imageobject>
  73.         </inlinemediaobject>
  74.       </para>
  75.  
  76.   </section>
  77.   <section>
  78.     <title>ObjectWeb</title>
  79.     <para>JOnAS is an open source implementation of J2EE, developed within
  80.       the ObjectWeb consortium.
  81.       <ulink url="http://www.objectweb.org">ObjectWeb</ulink> is an open source
  82.       initiative which may be compared to Apache or Linux, but in the area of
  83.       <emphasis>middleware</emphasis>. The aim of ObjectWeb is to develop
  84.       and promote open source middleware softwares.</para>
  85.     <para>ObjectWeb is an International Consortium hosted by INRIA, officially
  86.       founded in February 2002 by Bull, France Telecom, and INRIA. All
  87.       softwares are available with the LGPL licence.</para>
  88.     <para>The technical objective of this consortium is to develop a distributed
  89.       component-based middleware technology, in line with CORBA, Java and W3C
  90.       standards. The idea is to apply the component model, as already used at
  91.       the application level in J2EE or in the CORBA Component Model, at the
  92.       middleware level by itself. The functional coverage of ObjectWeb
  93.       projects addresses naming, trading, communication (events, messages),
  94.       availability and safety (transactions, persistence, replication,
  95.       fault tolerance), load balancing, and security. Some transversal
  96.       topics are also addressed, like robustness, optimisation, code quality,
  97.       as well as benchmarks, tests, evaluations, demonstrators and
  98.       development tools.
  99.     </para>
  100.     <para>Thus, the global ObjectWeb architectural model goes top down, from
  101.       applications (as benchmarks such as Rubis from the JMOB project)
  102.       running on middleware platforms (such as JOnAS, OpenCCM or ProActive).
  103.       The platforms are based on technical components such as a
  104.       Message-Oriented Middleware (JORAM which implements JMS), a
  105.       communication framework (CAROL), a persistence framework (JORM),
  106.       a transactional monitor (JOTM), a Object Request Broker (Jonathan).
  107.       A technical component such as C-JDBC allows any platform to benefit
  108.       from database clusters. JOnAS makes use of all these ObjectWeb
  109.       components (JORAM, CAROL, Jonathan, JORM, C-JDBC, and soon JOTM), but is
  110.       also using open source components from other communities, this is the
  111.       case for Tomcat or Jetty, used as Web container, or for AXIS, used for
  112.       providing the "Web Services" environment.
  113.     </para>
  114.     <para>ObjectWeb has already a significant number of corporate members,
  115.       universities, and also individual members (individual membership is
  116.       free). ObjectWeb members contribute to ObjectWeb orientations, and
  117.       participate to all ObjectWeb working groups, meetings, workshops and
  118.       conferences. The community of developers and users around
  119.       ObjectWeb components and platforms is growing continuously.</para>
  120.   </section>
  121. </section>
  122. <section>
  123.     <title>JOnAS Features</title>
  124.     <para>JOnAS is a pure Java open source application server conforming to the
  125.       J2EE specification.
  126.       However its high modularity allows to use it </para>
  127.     <itemizedlist>
  128.       <listitem><para>as a J2EE server, for deploying and running EAR applications (i.e.
  129.     applications composed of both web and ejb components),</para></listitem>
  130.       <listitem><para>as an EJB container, for deploying and running EJB components (e.g.
  131.     for applications without web interfaces or when using JSP/Servlet
  132.     engines that are not integrated as a JOnAS J2EE container),</para></listitem>
  133.       <listitem><para>as a Web container, for deploying and running JSPs and Servlets
  134.     (e.g. for applications without EJB components).</para></listitem>
  135.     </itemizedlist>
  136.   <section>
  137.     <title>System Requirements</title>
  138.     <para>JOnAS is available for JDK 1.3 or 1.4. It has been used on many
  139.       operating systems (Linux, AIX, Windows, Solaris, HP-UX, etc.), and
  140.       with different Databases (Oracle, PostgreSQL, MySQL, SQL server, Access,
  141.       DB2, Versant, Informix, Interbase, etc.).</para>
  142.   </section>
  143.   <section>
  144.     <title>Java Standard Conformance</title>
  145.     <para>JOnAS is an implementation of J2EE 1.3. It
  146.       currently conforms to EJB 2.0. Its
  147.       current integration of Tomcat or Jetty as Web container insures
  148.       conformity to Servlet 2.3 and JSP 1.2 specifications. The JOnAS
  149.       server relies on or implements the following Java APIs: <trademark>JCA</trademark>
  150.       1.0, <trademark>JDBC</trademark> 2.0, <trademark>JTA</trademark> 1.0.1,
  151.       <trademark>JMS</trademark> 1.1,
  152.       <trademark>JMX</trademark> 1.0, <trademark>JNDI</trademark> 1.2.1,
  153.       <trademark>JAAS</trademark> 1.0,
  154.       <trademark>JavaMail</trademark> 1.3.</para>
  155.   </section>
  156.   <section>
  157.     <title>Key Features</title>
  158.     <para>In addition to the implementation of all J2EE related standards, JOnAS
  159.       provides the following advanced and important features:</para>
  160.     <itemizedlist>
  161.       <listitem><para><emphasis>Management:</emphasis> JOnAS server management uses JMX and
  162.     provides a servlet based managment console.</para></listitem>
  163.       <listitem><para><emphasis>Services:</emphasis> The service based architecture of JOnAS
  164.     provides a high modularity and configurability of the server. It
  165.     allows to apply a component model approach at the middleware level,
  166.     and makes easy the integration of new modules (e.g. for open source
  167.     contributors). It also allows to start only the services needed
  168.     by a particular application, thus saving useless system resources.
  169.     JOnAS services are manageable through JMX.</para></listitem>
  170.       <listitem><para><emphasis>Scalability:</emphasis> JOnAS integrates several optimization
  171.     mechanisms for increasing the server scalability. This includes
  172.     pool of stateless session beans, pool of message-driven beans, pool
  173.     of threads, cache of entity beans, activation/passivation of entity
  174.     beans, pool of connections (for JDBC and JMS), storage access
  175.     optimizations (shared flag, isModified).</para></listitem>
  176.       <listitem><para><emphasis>Clustering:</emphasis> JOnAS clustering solutions, both at
  177.     the WEB and EJB level provide load balancing, high availability and
  178.     failover support.</para></listitem>
  179.       <listitem><para><emphasis>Distribution: </emphasis> JOnAS is working with several
  180.     distributed processing environments, thanks to the integration of
  181.     the <ulink url="http://www.objectweb.org/carol/index.html">CAROL</ulink>
  182.     (Common Architecture for RMI ObjectWeb Layer) ObjectWeb project,
  183.     which allows simultaneous support of several communication protocols:
  184.     <itemizedlist>
  185.       <listitem><para><emphasis>RMI</emphasis> using the Sun proprietary protocol JRMP,</para></listitem>
  186.       <listitem><para><emphasis>RMI</emphasis> on IIOP,</para></listitem>
  187.       <listitem><para><emphasis>CMI</emphasis>, the "Cluster aware" distribution protocol of
  188.         JOnAS,</para></listitem>
  189.       <listitem><para>or <emphasis>Jeremie</emphasis>, the RMI personality of an Object Request
  190.         Broker called
  191.         <ulink url="http://www.objectweb.org/jonathan/index.html">Jonathan</ulink>,
  192.         from Objectweb. Used with Jeremie, JOnAS benefits from transparent
  193.         local RMI calls optimization.</para></listitem>
  194.     </itemizedlist>
  195.       </para></listitem>
  196.       <listitem><para><emphasis>Support of "Web Services":</emphasis> by the integration of
  197.     AXIS, JOnAS allows J2EE components to access "Web services" (i.e. to
  198.     be "Web Services" clients), and
  199.     allows J2EE components to be deployed as "Web Services" endpoints.</para></listitem>
  200.     </itemizedlist>
  201.     <para>Three critical J2EE aspects have been early implemented in the JOnAS
  202.       server:</para>
  203.     <itemizedlist>
  204.       <listitem><para><emphasis>JCA:</emphasis> Enterprise Information Systems (EIS) may
  205.     be easily accessed from JOnAS applications. By supporting the Java
  206.     Connector Architecture, JOnAS allows to deploy any JCA compliant
  207.     Resource Adapter (connector) that will make the corresponding EIS
  208.     available from the J2EE application components. For example, Bull
  209.     GCOS mainframes may be accessed from JOnAS using their associated
  210.     <ulink url="http://www.bull.com/servers/gcos8/products/interop8/hoox_pr.htm">Hoox connectors</ulink>.</para></listitem>
  211.       <listitem><para><emphasis>JMS:</emphasis> JMS implementations may be easily plugged into
  212.     JOnAS. They run as a JOnAS service in the same JVM or in a separate JVM
  213.     and JOnAS provides administration facilities that hide the JMS
  214.     proprietary administration APIs. Currently two JMS implementations may
  215.     be used: the <ulink url="http://www.objectweb.org/joram/">JORAM</ulink> 
  216.     open source JMS implementation from Objectweb and
  217.     <ulink url="http://www.swiftmq.com/">SwiftMQ</ulink>.
  218.       </para></listitem>
  219.       <listitem><para><emphasis>JTA:</emphasis> The JOnAS platform supports distributed
  220.     transactions that involve multiple components and transactional
  221.     resources. The JTA transactions support is provided by a Transaction
  222.     Monitor that has been developed on top of an implementation of
  223.     the CORBA Transaction Service (OTS).
  224.       </para></listitem>
  225.     </itemizedlist>
  226.   </section>
  227.   <section>
  228.     <title>JOnAS Packages</title>
  229.     <para>JOnAS is available for download with three different packagings:</para>
  230.     <itemizedlist>
  231.       <listitem><para>a simple packaging only contains the JOnAS application server,
  232.     without the associated Web Container implementation. In order to
  233.     use it for J2EE Web applications, you need to have Tomcat or Jetty
  234.     installed (with an adequate version) and to configure it and
  235.     JOnAS so that they can work together.</para></listitem>
  236.       <listitem><para>a JOnAS-Tomcat package contains both JOnAS and Tomcat,
  237.     pre-configured, and with compiled examples. This is a ready to run
  238.     J2EE application server. This package also contains AXIS, thus
  239.     providing pre-configured "Web Services" support.</para></listitem>
  240.       <listitem><para>a JOnAS-Jetty package contains both JOnAS and Jetty,
  241.     pre-configured, and with compiled examples. This is a ready to run
  242.     J2EE application server. This package also contains AXIS, thus
  243.     providing pre-configured "Web Services" support.</para></listitem>
  244.     </itemizedlist>
  245.   </section>
  246. </section>
  247. <section>
  248.     <title>JOnAS Architecture</title>
  249.     <para>JOnAS is architectured in term of services. A service typically
  250.       provides system resources to containers. Most of the components of the
  251.       JOnAS application server are pre-defined JOnAS services. However it is
  252.       possible and easy for an advanced JOnAS user to define its own service
  253.       and to integrate it into JOnAS. J2EE applications do not necessarily
  254.       need all services, it is thus possible to define, at JOnAS server
  255.       configuration time, the set of services that are to be launched at
  256.       server start.</para>
  257.     <para>The JOnAS architecture is illustrated in the figure below, showing
  258.       WEB and EJB containers relying on JOnAS services (all services are
  259.       present on this figure). Two thin clients are also shown on this
  260.       picture, one of them being the JOnAS administration console (called
  261.       Jadmin).</para>
  262.  
  263.       <para>
  264.         <inlinemediaobject>
  265.           <imageobject>
  266.             <imagedata fileref="picture-208-02.gif" format="GIF"/>
  267.           </imageobject>
  268.         </inlinemediaobject>
  269.       </para>
  270.  
  271.   <section>
  272.     <title>Communication and Naming Service</title>
  273.     <para>This service (also called "Registry") is used for launching the
  274.       RMI registry, the CosNaming, the CMI registry, and/or the Jeremie
  275.       registry depending on the configuration of JOnAS (CAROL configuration
  276.       which specifies which communication protocols are to be used). There are
  277.       different registry launching modes, i.e. in the same JVM or not,
  278.       automatically if not already running.</para>
  279.     <para>This service provides the JNDI API to application components and
  280.       to other services, in order to bind and lookup remote objects (e.g. EJB
  281.       Homes) and resource references (JDBC DataSource, Mail and JMS connection
  282.       factories, etc.). </para>
  283.   </section>
  284.   <section>
  285.     <title>EJB Container Service</title>
  286.     <para>This service is in charge of loading the EJB components and their
  287.       containers. EJB containers are composed of a set of Java classes
  288.       implementing the EJB specification and by a set of interposition classes
  289.       interfacing the EJB components with the services provided by the
  290.       JOnAS application server. Interposition classes are specific to
  291.       each EJB component and are generated by the deployment tool called
  292.       GenIC.</para>
  293.     <para>JOnAS configuration allows to specify this service to be launched
  294.       with a set of ejb-jar files to be loaded. Ejb-jar files may also
  295.       be deployed at server runtime using the JOnAS administration tools.</para>
  296.     <para>Enterprise JavaBeans (EJB) are software components implementing
  297.       the business logic of an application (while the Servlets and JSPs
  298.       implement the presentation). There are three kinds of Enterprise
  299.       JavaBeans:</para>
  300.     <itemizedlist>
  301.       <listitem><para><emphasis>Session beans</emphasis> are objects associated to only one
  302.     client, short-lived (one method call or a client session),
  303.     that represent the current state of the client session. They can be
  304.     transaction-aware, stateful or stateless.</para></listitem>
  305.       <listitem><para><emphasis>Entity beans</emphasis> are objects that represent data in a
  306.     database. They may be shared by several clients and are identified by
  307.     means of a primary key. The EJB container is responsible for
  308.     managing the persistence of such objects. The persistence management
  309.     of such an object is entirely transparent to the client that will
  310.     use it, and may be or may not be transparent to the bean provider that
  311.     develops it depending if it is
  312.     <itemizedlist>
  313.       <listitem><para>An enterprise bean with <emphasis>Container-Managed Persistence</emphasis>.
  314.         In such a case, the bean provider does not develop any data access
  315.         code, persistence management is delegated to the container. 
  316.         The mapping between the bean and the persistent storage is provided
  317.         in the deployment descriptor, in an application server specific
  318.         way.
  319.       </para></listitem>
  320.       <listitem><para>An enterprise bean with <emphasis>Bean-Managed Persistence</emphasis>. In
  321.         this case, the bean provider writes the database access operations
  322.         in the methods of the enterprise bean that are specified for data
  323.         creation, load, store, retrieval, and remove operations.</para></listitem>
  324.     </itemizedlist>
  325.       </para></listitem>
  326.       <listitem><para><emphasis>Message-driven Beans</emphasis> are objects that may be
  327.     considered as message listeners. They execute on receipt of a
  328.     JMS (<ulink url="http://java.sun.com/products/jms">Java Message Service</ulink>) message,
  329.     they are transaction aware and stateless. They implement some kind
  330.     of asynchronous EJB method invocation.</para></listitem>
  331.     </itemizedlist>
  332.     <para>For implementing Container-Managed Persistence of EJB 2.0 (CMP2),
  333.       JOnAS relies on the ObjectWeb
  334.       <ulink url="http://www.objectweb.org/jorm">JORM</ulink> (Java Object Repository
  335.       Mapping) framework. JORM supports complex mappings of EJBs to database
  336.       tables, and several kinds of persistency support (relational databases,
  337.       object databases, LDAP repositories, etc.).</para>
  338.   </section>
  339.   <section>
  340.     <title>WEB Container Service</title>
  341.     <para>This service is in charge of running a Servlet/JSP Engine in the
  342.       JVM of the JOnAS server, and of loading web applications ("war" files)
  343.       within this engine. Currently this service may be configured to use
  344.       <ulink url="http://jakarta.apache.org/tomcat/">Tomcat</ulink> or
  345.       <ulink url="http://www.jettyserver.org">Jetty</ulink>. Servlet/JSP engines
  346.       are integrated within JOnAS as "web containers", i.e. such containers
  347.       provide the web components with access to the system resources (of
  348.       the application server) and to EJB components, in a J2EE compliant way.
  349.     </para>
  350.     <para>JOnAS configuration allows to specify this service to be launched
  351.       with a set of war files to be loaded. War files may also
  352.       be deployed at server runtime using the JOnAS administration tools.
  353.       Tomcat and JOnAS users management has been unified. The class loading
  354.       delegation policy (priority to the Webapp classloader or to the
  355.       parent classloader) may be configured.</para>
  356.     <para><ulink url="http://java.sun.com/products/servlet">Servlet</ulink>
  357.       and <ulink url="http://java.sun.com/products/jsp"><trademark>JSP</trademark></ulink> are
  358.       technologies for developing dynamic web pages. The Servlet approach
  359.       allows the development of Java classes (HTTP Servlets) that may be
  360.       invoked through HTTP requests and that generate HTML pages. Typically
  361.       Servlets access the information system using Java APIs (as JDBC or the
  362.       APIs of EJB components) in order to build the content of the HTML page
  363.       they will generate in response to the HTTP request. The JSP technology
  364.       is a complement of the Servlet technology. A JSP is an HTML page
  365.       containing Java code within particular XML-like tags; this Java code is
  366.       in charge of generating the dynamic content of the HTML page.</para>
  367.     <para>Servlets and JSPs are considered as J2EE application components
  368.       responsible of the application presentation logic. Such application
  369.       components are able to access resources provided by the J2EE server 
  370.       (as JDBC datasources, JMS connection factories, EJBs, mail factories,
  371.       ...). As for EJB components, the actual assignment of these resources
  372.       is performed at component deployment time, and is specified in the
  373.       deployment descriptor of each component (the component code use logical
  374.       resources names).</para>
  375.   </section>
  376.   <section>
  377.     <title>Ear Service</title>
  378.     <para>This service is used for deploying complete J2EE applications, i.e.
  379.       applications packaged in EAR files (themselves containing ejb-jar
  380.       files and/or war files). This service will handle the EAR files, and
  381.       will delegate the deployment of the war files, resp. ejb-jar files, to
  382.       the WEB Container service, resp. to the EJB Container service. It will
  383.       take care of creating the appropriate class loaders (as preconised in the
  384.       J2EE specification) in order for the J2EE application to execute
  385.       properly.</para>
  386.     <para>For deploying J2EE applications, JOnAS must be configured to launch
  387.       the EAR service, and the set of EAR files to be loaded may be
  388.       specified. EAR files may also
  389.       be deployed at server runtime using the JOnAS administration tools.</para>
  390.   </section>
  391.   <section>
  392.     <title>Transaction Service</title>
  393.     <para>This is a Java Transaction Monitor called JOnAS JTM. It is a mandatory
  394.       service which handles distributed transactions. It provides transaction
  395.       management for EJB components as defined in their deployment descriptors.
  396.       It handles two-phase
  397.       commit protocol against any number of Resource Managers (XA Resources).
  398.       For J2EE, a transactional resource may be a JDBC connection,
  399.       a JMS session
  400.       or a JCA Resource Adapter connection. The transactional context is
  401.       implicitly propagated with the distributed requests. The JTM may be
  402.       distributed across one or more JOnAS servers; thus a transaction may
  403.       involve several components located on different JOnAS servers. This
  404.       service implements the JTA 1.0 specification, thus allowing to explicitly
  405.       start and terminate transactions from application components or from
  406.       application clients.
  407.       Starting transactions from application components is only allowed
  408.       from Web components or from session beans or message-driven beans
  409.       (and only these two kinds of beans, this is called
  410.       <emphasis>"Bean-managed    transaction demarcation"</emphasis>).</para>
  411.     <para>One of the main advantages of the EJB
  412.       support for transactions is its declarative aspect, which means that
  413.       transaction control is no longer hard coded in the server application,
  414.       but is
  415.       configured at deployment time. This is known as "<emphasis>Container-managed
  416.     transaction demarcation</emphasis>".With "<emphasis>Container-managed transaction
  417.     demarcation</emphasis>" the transactional behaviour of an enterprise bean
  418.       is defined at configuration time, and is part of the deployment
  419.       descriptor of the bean.
  420.       The EJB container is responsible for providing the transaction
  421.       demarcation for the enterprise beans, according to the value of
  422.       transactional attributes associated to EJB methods which can be one of
  423.       the following:</para>
  424.     <itemizedlist>
  425.       <listitem><para><emphasis>NotSupported:</emphasis> if the method is called
  426.     within a transaction, this transaction is suspended during the time
  427.     of the method execution.</para></listitem>
  428.       <listitem><para><emphasis>Required</emphasis>: if the method is called
  429.     within a transaction, the method is executed in the scope of this
  430.     transaction, else, a new transaction is started for the execution of
  431.     the method, and    committed before the method result is sent to the
  432.     caller.</para></listitem>
  433.       <listitem><para><emphasis>RequiresNew:</emphasis> the method will always be
  434.     executed within the scope of a new transaction. The new transaction is
  435.     started for the execution of the method, and committed before the
  436.     method result is sent to the caller. If the method is called within a
  437.     transaction, this transaction is suspended before the new one is
  438.     started, and resumed when the new transaction has completed.</para></listitem>
  439.       <listitem><para><emphasis>Mandatory</emphasis>: the method should always be
  440.     called within the scope of a transaction, else the container will throw
  441.     the <emphasis>TransactionRequired</emphasis> exception.</para></listitem>
  442.       <listitem><para><emphasis>Supports:</emphasis> the method is invoked within
  443.     the caller transaction scope, if the caller does not have an associated
  444.     transaction, the method is invoked without a transaction scope.</para></listitem>
  445.       <listitem><para><emphasis>Never</emphasis>: with this attribute the client
  446.     is required to call the method without a transaction context else the
  447.     Container throws the java.rmi.RemoteException exception.
  448.       </para></listitem>
  449.     </itemizedlist>
  450.     <para>The <ulink url="http://www.objectweb.org/jotm">JOTM</ulink> (Java Open
  451.       Transaction Manager) project from ObjectWeb has been created based
  452.       on the JOnAS transaction service. It has been enhanced to provide
  453.       advanced transaction features, such as nested transactions, "Web
  454.       Services" transactions (an implementation of DBTP is available). JOTM
  455.       will be integrated in JOnAS in a near future.</para>
  456.   </section>
  457.   <section>
  458.     <title>Database Service</title>
  459.     <para>This service is responsible for handling Datasource objects. A
  460.       Datasource is a standard JDBC administrative object for handling
  461.       connections to a database. The Database service
  462.       creates and loads such datasources on the JOnAS server. Datasources
  463.       to be created and deployed may be specified at JOnAS configuration time,
  464.       or they may be created and deployed at server runtime using the JOnAS
  465.       administration tools. The Database service is also responsible for
  466.       connection pooling, i.e. it manages a pool of database connections to
  467.       be used by the application components, thus avoiding many physical
  468.       connection creations which are time consuming operations.</para>
  469.   </section>
  470.   <section>
  471.     <title>Security Service</title>
  472.     <para>This service implements the authorization mechanisms for accessing EJB
  473.       components, as specified in the EJB specification. EJB security is based
  474.       on the notion of <emphasis>roles</emphasis>.
  475.       The methods can be accessed by a given set of roles. In order to
  476.       access the methods, the user <emphasis>must</emphasis> be at least in one of this
  477.       set of roles.
  478.       The mapping between roles and methods (permissions) is done in the
  479.       deployment descriptor using the security-role and
  480.       method-permission elements. Programmatic security management
  481.       is also possible using two methods  of the EJBContext interface, in
  482.       order to enforce or complement security check in the bean code: 
  483.       getCallerPrincipal() and
  484.       isCallerInRole (String roleName).
  485.       The role names used in the EJB code (in the isCallerInRole method)
  486.       are in fact references to actual security roles, which makes the EJB
  487.       code independent of the security configuration described
  488.       in the deployment descriptor. The programmer makes these role
  489.       references available to the bean deployer or application assembler by the
  490.       way of  the security-role-ref
  491.       elements included in the session or entity
  492.       elements of the deployment descriptor.
  493.     </para>
  494.     <para>
  495.       In JOnAS, the mapping between roles and user identification is done
  496.       in the user identification repository. When using Tomcat for user
  497.       authentification, this user identification repository may either be
  498.       stored in files, in a JNDI repository (such as LDAP), or in a relational
  499.       database. This is achieved through a JOnAS implementation of the
  500.       Tomcat Realms, i.e. UserDatabaseRealm, MemoryRealm , JDBCRealm,
  501.       JNDIRealm. These realms are in charge to propagate the security context
  502.       to the EJB container during EJB calls. For Java clients authentification,
  503.       JAAS login modules are provided.
  504.     </para>
  505.   </section>
  506.   <section>
  507.     <title>Messaging Service</title>
  508.     <para>Asynchronous EJB method invocation is possible on Message-driven
  509.       Beans components, as specified in the EJB 2.0 specification.
  510.       A Message-driven Bean is an EJB component which may be considered as
  511.       a JMS (<ulink url="http://java.sun.com/products/jms">Java Message Service</ulink>)
  512.       MessageListener, i.e. which processes
  513.       JMS messages asynchronously, it is associated with a JMS
  514.       destination, its <emphasis>onMessage</emphasis> method will be activated on the
  515.       reception of messages sent by a client application to this destination.
  516.       It is also possible for any EJB component to use the JMS API, and this
  517.       within the scope of transactions managed by the application server.
  518.     </para>
  519.     <para>For supporting Message-driven Beans, and
  520.       JMS operations coded within application components, the JOnAS
  521.       application server relies on a JMS implementation.
  522.       JOnAS makes use of a third party JMS implementation: currently
  523.       the <ulink url="http://www.objectweb.org/joram">Joram</ulink>
  524.       opensource software is integrated and delivered with JOnAS, the
  525.       <ulink url="http://www.swiftmq.com/">SwiftMQ</ulink> product may also be used,
  526.       other JMS provider implementations may easily be integrated. JORAM
  527.       provides several points of interest, in particular reliability (with
  528.       a persistent mode), distribution (it may run as several servers,
  529.       transparently to the JMS client, thus allowing load balancing), the
  530.       choice of TCP or SOAP as communication protocol for transmitting
  531.       messages.</para>
  532.     <para>
  533.       The JMS service is in charge of launching (or establishing connection to)
  534.       the integrated JMS server, that may run in the same JVM as JOnAS or not.
  535.       It also provides connection pooling, and thread pooling (for
  536.       Message-driven Beans).
  537.       Through this service, JOnAS provides facilities to create
  538.       JMS administered objects such as the connection factories and the
  539.       destinations either at server launching time, or at runtime using the
  540.       JOnAS administration tools.</para>
  541.   </section>
  542.   <section>
  543.     <title>J2EE CA Resource Service</title>
  544.     <para>The J2EE Connector Architecture (J2EE CA) allows the connection of
  545.       different Enterprise Information Systems (EIS) to a J2EE application
  546.       server. It is based on the Resource Adapter (RA), an architecture
  547.       component comparable to a software driver, connecting the EIS, the
  548.       application server, and the enterprise application (J2EE components).
  549.       The RA is generally provided by an EIS vendor, and
  550.       provides a Java interface (the Common Client Interface or CCI) to the
  551.       J2EE components  for accessing the EIS (this may also be a specific
  552.       Java interface). The RA also provides standard
  553.       interfaces for being plugged to the application server, so that they can
  554.       collaborate to keep all system-level mechanisms (transactions, security,
  555.       and connection management) transparent from the application components.
  556.     </para>
  557.  
  558.       <para>
  559.         <inlinemediaobject>
  560.           <imageobject>
  561.             <imagedata fileref="picture-208-03.gif" format="GIF"/>
  562.           </imageobject>
  563.         </inlinemediaobject>
  564.       </para>
  565.  
  566.     <para> The application performs "business logic" operations on the EIS data
  567.       using the RA client API (CCI), while transactions, connections
  568.       (including pooling) and security on the EIS is managed by the
  569.       application server through the RA (system contract).
  570.     </para>
  571.     <para>The JOnAS Resource service is in charge of deploying J2EE CA compliant
  572.       Resource Adapters (connectors), packaged as RAR files, on the JOnAS
  573.       server. RAR files may also be included in EAR files, in this case the
  574.       connector will be loaded by the application classloader. Once Resource
  575.       Adapters are deployed, a connection factory instance is available in
  576.       the JNDI namespace to be looked up by application components.
  577.     </para>
  578.   </section>
  579.   <section>
  580.     <title>Management Service</title>
  581.     <para>The Management service is needed in order to administrate a JOnAS
  582.       server from
  583.       the JOnAS Jadmin administration console. Each server running this
  584.       service is visible from the administration console. This service is
  585.       based on JMX. Standard MBeans are defined within the JOnAS application
  586.       server, they expose the management methods of the instrumented JOnAS
  587.       server objects such as services, containers, the server by itself. The
  588.       Management service runs a JMX server (currently the
  589.       MX4J one, the Sun RI one is also available). The MBeans of the JOnAS
  590.       server are registered within this JMX server. The JOnAS administration
  591.       console is a Web application (servlet/JSP based), which accesses the JMX
  592.       server in order to present the managed features within
  593.       the administration console. It is thus possible, through a simple Web
  594.       browser, to manage one or several JOnAS application servers. The
  595.       administration console allows to configure all JOnAS services (and to
  596.       make the configuration persistent), to deploy any kind of applications
  597.       (EJB-JAR, WAR, EAR) and any kind of resources (DataSources, JMS and Mail
  598.       connection factories, J2EE CA connectors), all that without the need to
  599.       stop/restart the server. The administration console shows many
  600.       information allowing to monitor your servers and applications: used
  601.       memory, used threads, number of EJB instances, which component currently
  602.       uses which resources, etc..</para>
  603.   </section>
  604.   <section>
  605.     <title>Mail Service</title>
  606.     <para>A J2EE application component may send e-mails using
  607.       <ulink url="http://java.sun.com/products/javamail/"><trademark>JavaMail</trademark></ulink>.
  608.       The Mail service of the JOnAS application server provides the necessary
  609.       resources to such application components. The same way the database
  610.       service or the JMS service create Datasources or ConnectionFactories
  611.       and register these objects in the JNDI namespace, the Mail service
  612.       creates mail factories and register these resources in the JNDI
  613.       namespace.
  614.       There are two kinds of mail factories: <emphasis>javax.mail.Session</emphasis> and
  615.       <emphasis>javax.mail.internet.MimePartDataSource</emphasis>.</para>
  616.   </section>
  617. </section>
  618. <section>
  619.     <title>JOnAS Development and Deployment Environment</title>
  620.   <section>
  621.     <title>JOnAS Configuration and Deployment Facilities</title>
  622.     <para>Once JOnAS has been installed, in a directory referred by the
  623.       JONAS_ROOT environment variable, it is possible to configure servers
  624.       and to deploy applications into several execution environments. This
  625.       is achieved using the JONAS_BASE environment variable. JONAS_ROOT and
  626.       JONAS_BASE may be compared to CATALINA_HOME and CATALINA_BASE variables
  627.       of Tomcat. While JONAS_ROOT is dedicated to JOnAS installation,
  628.       JONAS_BASE is used to specify a particular JOnAS instance configuration.
  629.       JONAS_BASE designates a directory containing a specific JOnAS
  630.       configuration, and subdirectories containing the EJB-JAR, WAR, EAR, and
  631.       RAR files that may be loaded in this application environment. There is
  632.       an ANT target in the JOnAS build.xml file to create a new JONAS_BASE
  633.       directory structure. So from one JOnAS installation, but just changing
  634.       the value of the JONAS_BASE variable, it is possible to switch from
  635.       one application environment to another. For configuring a JOnAS
  636.       application server and for loading applications, you should use the
  637.       administration console, or edit the configuration files. There are
  638.       also "autoload" directories for each kind of application (EJB-JAR, WAR
  639.       or EAR) that allow the JOnAS server to automatically load the
  640.       applications located in these directories when starting.</para>
  641.     <para>About deployment, JOnAS provides several facilities.</para>
  642.     <itemizedlist>
  643.       <listitem><para>First to write
  644.     the deployment descriptors, plugins for Integrated Development
  645.     Environments (IDE) provide some generation and editing features
  646.     (Eclipse and JBuilder plugins are available). The
  647.     NewBean JOnAS built-in tool generates template deployment descriptors.
  648.     The Xdoclet tool also generates deployment descriptors for JOnAS.
  649.     The <ulink url="http://debian-sf.objectweb.org/projects/apollon">Apollon</ulink>
  650.     ObjectWeb project generates Graphical User Interfaces for editing any
  651.     XML file, it has been
  652.     used to generate deployment descriptor editor GUI. A tool developed
  653.     by the ObjectWeb JOnAS community will also be available to work with
  654.     the JSR88 compliant (J2EE 1.4) deployment APIs provided by the
  655.     ObjectWeb
  656.     <ulink url="http://debian-sf.objectweb.org/projects/ishmael">Ishmael</ulink>
  657.     project.
  658.       </para></listitem>
  659.       <listitem><para>For the deployment by itself, the basic tools are the JOnAS GenIC
  660.     command line tool and the corresponding ANT ejbjar task. The IDE
  661.     plugins integrate the use of these tools for deployment operations.
  662.     The Ishmael project main feature will be the deployment of applications
  663.     on the JOnAS platform.
  664.       </para></listitem>
  665.     </itemizedlist>
  666.   </section>
  667.   <section>
  668.     <title>JOnAS Development Environments</title>
  669.     <para>There are many plugins and tools for making easier the development of
  670.       J2EE applications to be deployed on JOnAS. IDE plugins for JBuilder and
  671.       Eclipse allows to develop, deploy and debug J2EE components on JOnAS. The
  672.       <ulink url="http://xdoclet.sourceforge.net/">Xdoclet</ulink> code generation
  673.       engine is able to generate EJB interfaces, deployment descriptors
  674.       (standard and JOnAS specific ones), taking as input the EJB
  675.       implementation class containing specific JavaDoc tags. The JOnAS NewBean
  676.       tool generates templates of interfaces, implementation class, and
  677.       deployment descriptors for any kind of EJB. Many development tools may
  678.       work with JOnAS, see the
  679.       <ulink url="http://www.objectweb.org/jonas/tools.html">JOnAS tools page</ulink>
  680.       for more details.
  681.     </para>
  682.     <para>Moreover, JOnAS is delivered with complete J2EE examples, providing
  683.       build.xml ANT file with all necessary targets for compiling, deploying
  684.       and installing J2EE applications.
  685.     </para>
  686.   </section>
  687. </section>
  688. <section>
  689.     <title>Clustering and Performance</title>
  690.     <para>Clustering for an application server generally brings three features:
  691.       Load Balancing (LB), High Availability (HA) and Failover.
  692.       Such mechanisms may be provided at the Web container level (by
  693.       dispatching requests to several Servlet/JSP engine instances, at
  694.       the EJB container level (by dispatching EJB requests to several
  695.       EJB container instances), and at the database level by using several
  696.       databases. A replicated JNDI naming is also necessary.</para>
  697.     <para>JOnAS provides Load Balancing, HA and Failover at the WEB container
  698.       level, using the Apache Tomcat mod_jk plugin and an HTTP in memory
  699.       session replication mechanism based on JavaGroup. The plugin dispatches
  700.       HTTP requests from the Apache web server towards Tomcat instances running
  701.       as JOnAS web container. Servers going down and up are automatically taken
  702.       into account. This plugin supports
  703.       round-robin and weighted round-robin load balancing algorithms, with a
  704.       sticky session option.
  705.     </para>
  706.     <para>
  707.       Load balancing and HA is provided at the EJB container level in JOnAS.
  708.       Operations invoked one EJB Home interfaces (EJB creation and retrieving)
  709.       are dispatched on the nodes of the cluster. The mechanism is based on
  710.       a "clustered aware" replicated JNDI registry
  711.       using a Clustered remote Method Invocation protocol (CMI). The stubs
  712.       contain the knowledge of the cluster, and implement the load balancing
  713.       policy, which may be round-robin, and weighted round-robin. In a near
  714.       future, a load balancing mechanism based on the nodes load will be
  715.       available. Failover at the EJB level will be provided by implementing
  716.       a stateful session bean state replication mechanism.
  717.     </para>
  718.     <para>
  719.       The JOnAS clustering architecture is illustrated in the figure
  720.       below.</para>
  721.  
  722.       <para>
  723.         <inlinemediaobject>
  724.           <imageobject>
  725.             <imagedata fileref="picture-208-04.gif" format="GIF"/>
  726.           </imageobject>
  727.         </inlinemediaobject>
  728.       </para>
  729.  
  730.     <para>Apache is used as the font-end HTTP server, Tomcat as the JOnAS web
  731.       container. The JOnAS servers share the same database. The mod_jk
  732.       plug-in provides Load Balancing / High Availability at the
  733.       Servlet/JSP level. Failover is provided through the in-memory
  734.       session replication mechanism. Load Balancing / High Availability is
  735.       provided at the EJB level through the CMI protocol associated with
  736.       the replicated clustered aware JNDI registry.
  737.       Tomcat may run in the same JVM as the EJB container or not. JOnAS
  738.       provides some documentation for configuring such an architecture.
  739.     </para>
  740.     <para>The use of the
  741.       <ulink url="http://www.objectweb.org/c-jdbc/index.html">C-JDBC</ulink>
  742.       ObjectWeb project allows to provide load balancing and high availability
  743.       at the database level. The use of C-JDBC is transparent to the
  744.       application (in our case to JOnAS), as it is viewed as a usual JDBC
  745.       driver. However this "driver" implements the cluster mechanisms
  746.       (reads are load balanced and writes are broadcasted). The
  747.       database is distributed and replicated among several nodes and C-JDBC
  748.       load balances the queries between these nodes. An evaluation of C-JDBC
  749.       using the TPC-W benchmark on a 6 nodes cluster has shown performance
  750.       scaling linearly up to 6 nodes.</para>
  751.     <para>In addition to clustering solutions, JOnAS provides many mechanisms,
  752.       intrinsic to the JOnAS server, for being highly scalable and efficient.
  753.       This includes</para>
  754.     <itemizedlist>
  755.       <listitem><para>Pool of stateless session bean instances</para></listitem>
  756.       <listitem><para>Pool of entity bean instances, configurable for each entity bean,
  757.     within its deployment descriptor</para></listitem>
  758.       <listitem><para>Activation/passivation of entity beans, passivation may be controlled
  759.     through the management console</para></listitem>
  760.       <listitem><para>Pools of connections, for JDBC, JMS, J2EE CA connectors</para></listitem>
  761.       <listitem><para>Pool of threads for message-driven beans</para></listitem>
  762.       <listitem><para>Session bean timeout may be specified at deployment</para></listitem>
  763.       <listitem><para>A "shared" flag in the specific deployment descriptor of an entity
  764.     bean indicates if the persistent representation of this entity bean
  765.     is shared by several servers/applications, or if it is dedicated
  766.     to the JOnAS server where it is loaded. In the last case, the
  767.     optimization done by JOnAS consists in not reloading the
  768.     corresponding data between transactions.</para></listitem>
  769.       <listitem><para>The usual EJB 1.1 "isModified" (or "Dirty") mechanism is available,
  770.     avoiding to store non modified data.</para></listitem>
  771.     </itemizedlist>
  772.     <para>Some benchmarks and JOnAS usecases have already shown that JOnAS
  773.       was highly scalable, see for example the
  774.       <ulink url="http://www.cs.rice.edu/CS/Systems/DynaServer/perf_scalability_ejb.pdf">Rubis</ulink> results, or the
  775.       <ulink url="http://openuss.sourceforge.net/openuss/">OpenUSS</ulink> usecase.
  776.       Rubis is a benchmark for e-commerce J2EE applications, which now belongs
  777.       to the ObjectWeb
  778.       <ulink url="http://www.objectweb.org/jmob/index.html">JMOB</ulink> (Java
  779.       Middleware Open Benchmarking) project. OpenUSS is an operational
  780.       University portal with about 5000 users.
  781.     </para>
  782. </section>
  783. <section>
  784.     <title>Perspectives</title>
  785.     <para>As an open source implementation of a J2EE server, JOnAS is
  786.       continuously evolving to satisfy the user requirements and to follow
  787.       the related standards. The main JOnAS evolutions currently planned
  788.       are the following:
  789.     </para>
  790.     <itemizedlist>
  791.       <listitem><para>A J2EE CA 1.0 Resource Adapter for JDBC is planned for the middle of
  792.     the year. It will replace the current JOnAS database service for
  793.     plugging JDBC drivers and managing connection pools. In addition, it
  794.     will provide JDBC PreparedStatement pooling. At the end of the
  795.     year, a new version of this resource adapter, compliant to J2EE CA 1.5
  796.     (J2EE 1.4), will be available, and will provide JDBC resultsets re-use
  797.     by the EJB container (this optimization reduces the number of SQL
  798.     statements executed by the EJB container).</para></listitem>
  799.       <listitem><para>The support of EJB 2.1 (J2EE 1.4) specification will be provided by
  800.     the end of the year. This will include a "Timer" service.</para></listitem>
  801.       <listitem><para>The support of "Web Services" will be completed, in order
  802.     to support standard deployment, as specified in J2EE 1.4. Tools
  803.     for developing "Web Services" and an open source UDDI implementation
  804.     will be integrated.</para></listitem>
  805.       <listitem><para>Deployment APIs as specified in JSR88 (J2EE 1.4) will be supported
  806.     by the end of the year, thanks to the Ishmael project.</para></listitem>
  807.       <listitem><para>JOnAS administration will be enhanced by introducing the concept of
  808.     management domain.</para></listitem>
  809.       <listitem><para>The ObjectWeb JOTM project  will be integrated within the JOnAS
  810.     Transaction service. This will allow to support nested transactions,
  811.     CORBA transactions and "Web Services" transactions.</para></listitem>
  812.     </itemizedlist>
  813. </section>
  814. <section><title/>
  815.     <para><emphasis>Sun, Java, and all
  816.     Java-based trademarks are trademarks or registered trademarks of Sun
  817.     Microsystems, Inc. in the U.S. and other countries.</emphasis></para>
  818. </section>
  819. </article>
  820.  
  821.