technical trends n product reviews n performance benchmarks n application server market Why does the EJB model fail when it comes to enterprise-scale projects? By JeanJean-Christophe Cimetiere - CEO (jcc@techmetrix.com) This Trend Markers’ issue is dedicated to EJBs. We’ll try to make you better understand what exactly is missing in the EJB model. the standard for business object models. We believe that EJB may succeed where CORBA has thus far failed: in providing a standard enterprise component model that is truly embraced by the entire industry (except Microsoft!). However, if this does indeed happen it won’t be overnight. Lots of vendors claim that EJB, or to broaden the issue the J2EE platform, is (Continued on page 2) EJBs from a critical perspective By Philippe Mougin Consultant and Distributed Object Expert (pm@techmetrix.com) Introduction Promoted by SUN and many other major editors such as Oracle and IBM, Enterprise JavaBeans enjoy big technical and marketing investments. In this article we examine EJB’s potential to perform what is commonly called object-oriented modeling, an approach that consists in building IT systems by modeling business entities in the form of software modules called objects. This object-oriented (OO) approach relies on two fundamentals: the Abstract Data Type theory and a technology known as dynamic binding. Is EJB a good choice for business object modeling? Answering this question is extremely important since corporations need to make the strategic choice between using a classical relational approach or OO modeling for their new software development. Hence, the reader should keep in mind that focus of this article is OO modeling with EJB. We agree that EJB technology (especially so-called Session Beans) may be used in other contexts. After an in-depth evaluation of this technology, we think that Enterprise JavaBeans are still too immature to be considered for business object modeling. We be(Continued on page 4) In this issue December 1999 Volume 1, Issue 2 Why does the EJB model fail when it comes to enterprise-scale projects? 1 EJBs from a critical perspective 1 SilverStream 2.5 Performance Review 3 4 2 Why does the EJB model fail when it comes to enterprise-scale projects? (cont.) (Continued from page 1) You're fooling yourself if you think that vendors’ EJB-compliant tools will allow you to move EJB components between application servers. Think back to the client/server era, when vendors claimed that their products were able to jump from one DBMS to another in a wink, without needing to change a line of code… Today vendors are focusing on accompanying you towards OO development… This leap was certainly a tricky technical task for development tool editors, but it was far easier than switching EJB components. You must understand that the “portability” of EJB components in no way constitutes a reason to adopt this standard today. We take a detailed look at this point, among others, in this issue. The knowledge acquired while building an EJB component is the benefit seen the most quickly. Because even if EJB technical implementation differs among editors, the methodology, distributed object modeling, and the language, Java (of course) remain the same. But are you aware of just how much it costs to hire EJB experts (if you can find them) or to train your “Cobol-comfortable” staff? Offering reliable application servers has been the main concern of vendors over the past three years. Today vendors are focusing on accompanying you towards OO development by providing a high-level development tool, which hides the complexity from beginners, is productive for non-OO developers and quenches OO experts’ “thirst for adventure.” To illustrate this last point, we can take the example of SilverStream. This editor takes care of non-OO programmers while actively following the path of distributed objectmodeling programming. In order to help their customers and educate people, SilverStream recently opened “SilverStream DevCenter” (http:// devcenter.silverstream.com). The DevCenter focuses a large part of its discussion on J2EE, one of the key points in the soon-tobe-released version 3.0 of the company’s principal product. To get a little taste, read the excerpt of our recent performance benchmark conducted with SilverStream Application Server, version 2.5.n Coming next month... Get the millennium off to a good start by being up-to-date on the hottest new technology issues. Here’s a glimpse at the January 2000 TrendMarkers: www.trendmarkers.com • A look under the hood of IRMs • WebSphere Performance Review December 99 4 3 SilverStream 2.5 Performance Review By Franck Gonzales and Nicolas Farges Consultants (fg@techmetrix.com; nf@techmetrix.com) With the launch of a new series of Product Reviews, TechMetrix Research goes beyond rough performance results. In order to provide information about application server behavior, these new reviews include a Performance Benchmark and detailed information gathered during intensive use of the products. SilverStream version 2.5 is the second in our series. the same machine (a multi-process mode would have been preferable). Performance SilverStream proves reactive to workload; it presents a high transaction rate. Server performance decreases when faced with intensive loads (from 358 to 295 pages/second with 50 and 200 robots, respectively), but performance remains more than acceptable. With SilverStream installed on our platform, 200 robots simulate a load equivalent to that generated by roughly 1000 concurrent users. The debasement in response time is linear, according to the number of robots. This shows that server resources are used optimally no matter the load.n 295: This is the number of dynamic HTML pages delivered per second by the SilverStream application server during the running of a "mixed" scenario (stringing together of 8 modules) with concurrent use of the application by 200 robots. Reliability The TMBench-compliant application proved to be entirely reliable running on the SilverStream Application Server, even as the intensive workload placed on the server increased during the tests. Server configuration was rather particular: three servers functioned in cluster mode on Test platform used for evaluation. Related links on www.techmetrix.com: www.trendmarkers.com • 50-page Product Review about SilverStream 2.5 is available. This article is an excerpt of this document. • FREE product profile of SilverStream is also available in our Application Server Directory. December 99 4 4 EJBs from a critical perspective (cont.) (Continued from page 1) lieve this for two reasons. Firstly, the EJB implementations on the market today are immature: they do not offer the functions needed to develop business systems and they provide the developer with very low productivity. Secondly, the specification in itself suffers from some terrible technical and theoretical problems. Is EJB a good choice for business object modeling? Answering this question is extremely important since corporations need to make the strategic choice between using a classical relational approach or OO modeling for their new software development. SUN is pushing its platform, Java 2 Enterprise Edition (J2EE), which brings together Servlets and JDBC and other technologies such as Java Server Pages (JSP) and JavaMail. In this context, Enterprise JavaBeans (EJBs) play a very important role: relying on other J2EE elements, EJBs form a business component model. In short, one can say that EJBs would like to surpass the basic Java object model by integrating new functions that are important to business systems. In particular, EJBs provide functions in terms of: • • • • • These problems are looked at in greater detail after a quick introduction regarding the EJB specification and the technical context. Objectives and position of Enterprise JavaBeans In the business world, Java is ever more present server-side while HTML dominates client side. Java development tools and application servers multiply and it is commonplace to choose Java as development language rather than C/C++, PL-SQL, Smalltalk or Visual Basic. This breakthrough was in most part due to two technologies: frameworks that allow Java programs to access relational databases, and dynamic production of HTML. Today, Java application servers integrate new functions allowing us to go even farther when developing business systems. www.trendmarkers.com • Object naming: how to obtain a handle on a service. Object security: who can use which object and how? Object persistence: how are objects stocked in a lasting manner? OTM: how can one implement ACID transactions, with the possibility of Rollback, while manipulating objects and not relational base tables? Distribution: how to allow access to objects from remote applications in the most efficient and transparent manner as possible. Workload support, by implementing various technologies. This component system must allow business object modeling. For example, in the case of an airline we can imagine the EJBs representing planes, passengers, reservations, etc. All of these components should be portable on the different environments that support EJB technology. From the developer’s point of view, an EJB is presented as a file group bringing together: • • • • Java classes Java Interfaces Deployment information Metadata (Continued on page 5) December 99 4 5 EJBs from a critical perspective (cont.) (Continued from page 4) It is important to know the particular EJB concepts and vocabulary to understand this evaluation. It is particularly helpful to specify the notions of Session Bean and Entity Bean, which describe two possible EJB types: • • Session Beans represent objects, whose access supports the security, transaction and distribution models. The Session Bean framework integrates the idea of context management, which enables external conversational interactions to be established in the case of multiple-client access. Session Beans can implement “ business services ”. Entity Beans also integrate security, transaction and distribution frameworks. Unlike Session Beans, they support persistence. EJBs are used to implement what are commonly called “ business objects ”; they are designed to allow business entity modeling. Therefore, Entity Beans are of the most interest to us in this evaluation because we want to explore EJB technology’s capacity to implement business object modeling into an information system. EJB implementations In order to judge EJB implementations of the leading tools in the field, we tried to implement a simple object model in collaboration with the editors of the following EJB solutions: • IBM WebSphere 2.0.2 Advanced Edition • BEA WebLogic Application Server 4.0.2 (we then updated our evaluation using WebLogic Server 4.5.1) • Gemstone/J 3.0 • Oracle Application Server 4.07 • Inprise Application Server www.trendmarkers.com We relied on several development tools that are specifically adapted to EJB creation: • IBM VisualAge for Java Enterprise Edition 2.0 • Symantec VisualCafe 3 Database Edition, Visual Cafe Enterprise Suite 3.1 • Inprise JBuilder 2 for Application Server As seen in the following diagram, the object model to implement is very simple: Automobile * 1 Model idModel : String manufacturer : String description : String -----------------------idModel () : String manufacturer() : String description() : String setIdModel(String idModel) setManufacturer(int manufacturer) setDescription(string description) idAut: String model: Model cylinder: int price: int slogan: String ------------------------idAut() : String model(): Model cylinder (): int price():int slogan():String setIdAut(String id) setModel (Model model) setCylinder (int cylindr) setPrice (int prix) setSlogan(String slogan) lengthGarantee():int Inheritance AutomobileNew LengthGuarantee():int AutomobileUsed condition : String -----------------lengthGarantee():int state() :String setState(string state) The object model includes inheritance and association between different classes of objects. The model had to support the four following points: • • • • persistence OTM distribution referential integrity The verdict: Having previously worked on several projects using OO modeling, we have experienced just how difficult it is to succeed without a good tool. The high standards of appreciation that we set during our evaluation were thus justified. We noticed that the EJB implementations evaluated do not allow implementation of this very simple model. None of these four points is satisfactorily supported by the EJBs tested. (Continued on page 6) December 99 4 6 EJBs from a critical perspective (cont.) (Continued from page 5) Of course, this does not cast doubt over the global quality of these products, known for other technologies such as servlets, relational database access and JSPs. However, since none of the four points was supported, we maintain that EJB technology is still immature. Note: A complete description of this evaluation is available in TechMetrix Research’s Java Application Server Report and Product Reviews. Gemstone/J Contrary to a widespread idea, Gemstone/J does not satisfactorily support Entity Beans, which makes it impossible to implement our object model using EJB. In fact, Gemstone recommends using its non-EJBbased PCA architecture (Persistent Cache Architecture). This PCA architecture functions and allowed us to implement the model. It is thus possible to use a part of EJB technology, Session Beans, to present clients with an EJB facade. Session Beans can then manipulate the business model, which is implemented via the PCA. In terms of productivity, Session Bean development, deployment and administration prove to be extremely cumbersome with Gemstone, especially since the documentation is also insufficient. However, Gemstone offered excellent technical support during our evaluation. WebLogic Application Server The EJB implementation proposed by WebLogic Application Server is insufficient, as is the one offered in the new version 4.5.1. WebLogic, which is based on the 1.0 specification, offers poor support for Entity Beans (especially concerning object/ persistence associations), development is cumbersome and there are important malfunctions of EJB-associated utilities. As was the case with Gemstone, the product’s editor BEA provided great technical support and allowed us to attend internal training sessions for WebLogic consultants. Inprise Application Server JBuilder, Inprise’s development tool, allowed us to develop EJBs, but the Inprise Application Server was not able to run them because it doesn’t have an EJB Container. The next release of the product should offer wider support. At the beginning of October 1999, during the Internet World conference, Inprise announced that this draft of the product is currently in beta version. WebSphere/VisualAge for Java WebSphere 2’s EJBs do not allow for implementation of even a very simple business object model either. The tools appear to propose persistence and transactions, but since integration between VisualAge and WebSphere is not perfect, in the end it’s a failure. WebSphere users indicate that IBM engineers confirmed that the WebSphere 2 EJB implementation is still at a preliminary stage. It is interesting to read more about this subject in the IBM Redbooks (www. redbooks.ibm.com). Oracle Application Server We could not implement our model because Oracle Application Server does not offer support for Entity Beans. On this point, Oracle’s position must be examined carefully. Indeed, even though Oracle is an Enterprise Java Bean supporter, the company does not share SUN’s vision about this technology. In particular, Oracle is fiercely opposed to Entity Beans as a general model for business objects. In the future, it is likely that Oracle will integrate Entity Bean support into its application server to be in sync with EJB specification, but will not recommend using it for general and large-scale object modeling. Other products We also looked into other products such as (Continued on page 7) www.trendmarkers.com December 99 4 7 EJBs from a critical perspective (cont.) (Continued from page 6) Persistence PowerTier from Persistence Software, which wished to wait for the next version of its product before taking part in our evaluation (note: this release is now available). In some cases, the situation is surprising. For example, Haht Software announced that EJBs were integrated into its application server HahtSite. In reality, its last version HahtSite 4.0 offers nothing of the sort. Product conclusions In conclusion, we maintain that, generally speaking, the following problems remain: • • • Almost totally impossible to implement even a simple object model Cumbersome development Complex deployment, non-portable EJBs , non-portable clients EJB specification The EJB specification is destined for editors of application servers or development environments. This specification describes the different element interactions that need to be present in an EJB-compatible implementation. This specification ensues from the fact that programs using EJBs must be portable. The editors of EJB-compatible servers must therefore conform to some very strict rules. The specification is a document of more than 300 pages and is currently in version 1.1 (EJB specification of 8/11/99). The specification is classified as “ preliminary ”. Even though it has been globally improved since version 1.0, considering its objectives, the specification still has some considerable technical and theoretical problems. There are two reasons for this. First of all, numerous points of the specification are incomplete; consequently EJB semantics are under-specified. This results in incompatibility of EJB environments and a lack of The EJB specification is destined for editors of application servers or development environments. This specification describes the different element interactions that need to be present in an EJBcompatible implementation. important functions. Secondly, in its current state, some points of the specification create real problems for object model implementation. One must keep in mind that today there are object technologies that have the same objectives, but that have already proved themselves and do not have these problems (object databases, object/ relational-mapping frameworks, OTM). Below are several prominent problems of the current specification: Limited function of large-grain objects For each instance of an EJB business object, there are a certain number of system object instances ("EJB object", "EJB context" and often other helper or wrapper objects). In this way, at runtime system layers encapsulate each business object instance. A business object in the form of an EJB must never be directly referenced, but always via these layers, which ensure security functions, transaction management, object distribution, thread management, etc. Even in non-distributed mode, these objects reference one another by passing through this layer. For each object interaction, each method call, all the security and (Continued on page 8) www.trendmarkers.com December 99 4 8 EJBs from a critical perspective (cont.) (Continued from page 7) distribution transactional machinery is used. Moreover, it is common to transfer the control between threads since EJBs are often executed within several threads. All of these mechanisms take a lot of time and require memory resources. Business Object Transaction, security, distribution etc. Business Object Transaction, security, distribution etc. ber of objects, these objects having to communicate between each other by sending messages in order to complete tasks. Reentrant communication is not uncommon. For example, it is common that an object A send a message to object B and that the latter also sends a message since it needs to communicate with A in order to accomplish its task. Many objectprogramming design patterns use this type of function. Object A Object B Each business object is encapsulated within several service layers. Method calls must pass by these layers. Method Call Because it is so cumbersome, this system is not adapted to the development of finegrained business objects, in other words, business objects with a large number of instances and methods that are often called. The EJB specification is very clear: “ The overhead of an inter-component call will likely be prohibitive for object interaction that are too fine-grained. ”. This considerably limits the application field of EJB technology. It is thus recommended to use EJBs only for “ big ” objects, whose methods are not often called. These objects are obviously made up of smaller (fine-grained) objects, which shouldn’t be implemented in EJB form. But we cannot specify within the EJB framework how these fine-grained object relationships must be managed or how they must be saved in the database (persistence). The current situation is thus problematic in relation to the original goal of EJBs, which is to provide a business component model. Indeed, such a model must include fine-grained support. We cannot imagine how the problem could be resolved without radical evolution of the specification. No Support for Reentrancy An application developed with object technology is constituted at runtime by a numwww.trendmarkers.com Waiting Nested Call (reentrancy) Code executed Waiting Nested call returned Waiting Call returned Example of reentrancy call But, the manner in which EJB technology, particularly in terms of threading, functions make it a programming mode that is difficult to implement. Thus, the EJB specification indicates that programming such callbacks is illegal for Session Beans and extremely dangerous for Entity Beans. If such programming cannot be avoided, the specification points out that programmers need to be extremely prudent. However, there is a more specific guide in neither the specification nor in any product that we have tested; this renders the situation intolerable. Under-specification of object associations Although version 1.1 of the EJB standard improves on this point in comparison to version 1.0, the notion of association be(Continued on page 9) December 99 4 9 EJBs from a critical perspective (cont.) (Continued from page 8) tween objects remains considerably underspecified. Critical aspects are not supported, for instance, management of referential integrity and partial loading of object graphs in memory. Incompatibility with the standard Java model The specification introduces incompatibilities between the EJB component model and the standard Java object model. In some cases, this makes it impossible to use frameworks designed for the standard Java object model with EJBs. This is why the EJB model does not ensure ascending compatibility with the Java object model. Here is an example of incompatibility concerning the concept of object identity. In order to determine if two Entity Beans are identical, the specification indicates that one must always use the method isIdentical(). Use of the operator "==", the equals() method and the hashcode()method is not allowed. The problem stems from the fact that here we get away from the standard Java model, which uses these methods in a traditional manner. The numerous existing frameworks that are based on this model for the notion of object identity cannot easily be used with EJBs. Under-specified distribution model The specification remains extremely blurry on the semantics of remote access to EJBs, which in itself will inevitably create problems in practice. Nonetheless, it often mentions RMI/IIOP (RMI on the IIOP protocol instead of the traditional JRMP). It is also mentioned that EJB-compatible servers can use RMI/IIOP to handle distributed object service. This technology must allow Java objects to communicate remotely between one another, for example, communication between a client and a server. It must also www.trendmarkers.com handle communication between Java objects and non-Java objects that are implemented according to the CORBA model, which permit, for example, a CORBA C++ or Smalltalk client to invoke EJB services. The problem is that RMI/IIOP technology is very young. It is just beginning to be diffused, even if some products have included its preliminary version. RMI/IIOP is often presented as offering the same semantics as RMI, but this is not exactly the case. Indeed, RMI/IIOP and RMI semantics diverge on several points, the most important being without a doubt object life cycle management. While RMI is based on a distributed Garbage Collection system, RMI/IIOP offers nothing of the sort. The manner in which the object life cycle and application connections are managed has a strong impact on development. This is why, generally speaking, RMI/IIOP programming cannot be the same as RMI programming. Moreover, it is obvious that on this point RMI/IIOP will have to provide a solution. Client Client Client Client RMI/IIOP EJB Client Client An EJB can be referenced by several remote objects. EJB life cycle management must take these references into account. Furthermore, RMI/IIOP is based on a recent OMG specification regarding the transfer of object by value (OBV). In practice, this OBV specification is not sufficient since binding with most of the CORBA-supported languages is not adopted yet (for some, propositions haven’t even (Continued on page 10) December 99 4 10 EJBs from a critical perspective (cont.) (Continued from page 9) been made). This means that multilanguage interoperability is merely theoretical for the moment. Even more serious, the current OBV specification is extremely complex and suffers from significant technical problems (see Steve Vinoski’s “New Features for CORBA 3.0”, Communications of the ACM, Volume 41, No.10). Vinoski writes, “The OMG is currently reviewing its technology a d o p t i o n procedures with the goal of preventing similar hasty and illadvised addition to CORBA in the future.” No support for inheritance at the component level The component model defined by the EJB specification does not support inheritance. During development, a component is presented as a package made up of classes and Java interfaces, XML files full of information, and metadata about the package. During runtime, a component can be instantiated several times. Each instance of a component is presented in the Java virtual machine as a group of Java-class instances interacting between one another. This group includes the classes that are automatically generated by the EJB environment during component deployment. An EJB component is thus much more than a standard Java object. It integrates rules concerning security, transactions, persistence, etc. Although inheritance exists between Java classes and can still be used, there is no inheritance between EJB components. This point may not pose a serious problem, but it helps us have a better global understanding of EJB technology. Non-portability EJBs are often presented as a portable component model, meaning that it would be possible to create or buy an EJB and make it work straight away on any environment that is compatible with the specification. www.trendmarkers.com Enterprise JavaBeans do deserve merit for separating portable aspects from nonportable aspects, while trying to reduce the latter as much as possible. This is misleading. Indeed, the norm clearly leaves many technological issues to the discretion of each editor of an EJB environment. It’s customary that, for each environment, the EJB be configured in a specific manner (for example, which concerns object/relational mapping). This configuration described by the specification as the “ deployment ” step can be quite complex. Enterprise JavaBeans do deserve merit for separating portable aspects from nonportable aspects, while trying to reduce the latter as much as possible. Nonetheless, the non-portable aspects have not disappeared. We should note that this point is not necessarily crippling and that concurrent component models are not more portable than EJBs, and are often less portable. Nevertheless, it would be rash to present EJBs as portable components. Static glue Note: We begin this section with an explanation of static and dynamic glue. We then provide the EJB specification’s chosen solution. In order to ensure proper functioning of different services (security, transactions, distribution, etc.) EJB technology is based on the use of “ systems ” objects, which encapsulate, or even mix with, business objects. The goal of these objects is to offer the services mentioned above in the most transparent manner possible. For example, for calls between distributed objects, one uses intermediary objects (stubs and skele(Continued on page 11) December 99 4 11 EJBs from a critical perspective (cont.) (Continued from page 10) tons [or remote interface]), which automatically handle network message routing and many other service tasks. All these objects make up what we call the “ glue ”. They permit business objects that one develops to function together, by following the semantics defined by the EJB model. They do not need to be programmed by the application developer, but are provided by the system. This glue technique has been widely used for a long time in object technologies. One finds it for example at the core of COM/ MTS, CORBA, RMI and in object/relational mapping frameworks, object databases and parallel programming models. One can define two types of glue: static and dynamic. Static glue, a technique adopted by the EJB specification is ad hoc glue, for which the code is generated in relation to the application classes. Dynamic glue is generic glue that can adapt to any new class. One of the consequences is that with a static glue system, one will have as many “ Stub ” classes to deploy client-side as there are EJB components server-side. However, with a dynamic glue system, there is only one “ Stub ” class, which can adapt to all situations, client-side or serverside. Business Object Transaction, security, distribution etc. Each business object is encapsulated within several service layers. The code of these layers is specific to the business object class: the code must be generated for each business class. With EJBs, for each component, a group of classes is generated to handle different services. This code must be generated at each addition and often each time a component is modified. The resulting code must be deployed at adequate places in the system, which often includes client stawww.trendmarkers.com tions. Furthermore, sometimes one would like server-side EJB components to call client-side object methods. In this case as well, code generation, followed by deployment must take place. Java includes ways of making this step somewhat automatic. Nonetheless, experience proves that in practice, this deployment poses some very serious problems. In addition, static glue weighs down the system and makes it more complicated for EJB-server implementers and application developers. Indeed, the glue is never transparent for the latter. The choice of a static glue system for EJB technology will largely determine, in the long term, the technical capacities and ease-of-use of this technology. If one can, with reason, argue that some basic characteristics of Java language push in favor of this choice, the fact remains that it is an aspect that will have tremendous influence on the success of Enterprise JavaBeans as a standard component model for businesses. Our experience with projects using object technology incites us to think that the cumbersomeness and complexity brought about by static glue is a very serious obstacle to large-scale enterprise use. CORBA runs into this same problem and we think it is one of the main reasons that it hasn’t been more widely adopted. Recent OMGadopted technologies like IDLScript, which are based on dynamic glue, may change the situation for CORBA. Microsoft COM suffers from the same problem and has thus far managed to deal with it using its Automation interfaces (as illustrates the success of VB in corporations). We strongly believe that dynamic glue is going to be one of the next big trends and that EJB will have a hard time challenging these dynamic component systems to come. (Continued on page 12) December 99 4 12 EJBs from a critical perspective (cont.) (Continued from page 11) In the future, there are two possibilities. Firstly, problems within this technology cannot be overcome and EJBs, in particular the use of Entity Beans, remain marginal. Does this signify the failure of J2EE? Yes, in terms of one of J2EE’s initial goals. But this would not affect the other technologies that make up the platform (servlet, JDBC, RMI, etc.) because these technologies, which are quite likely be adopted, do not depend on EJBs. In the second case scenario, the specification and the products evolve in response to companies’ needs in terms of the object approach. EJBs could thus become the principal component models of the market. Other issues There are many other issues that will have to be addressed by the specification, for instance, problems with transaction isolation levels and polymorphic use of finder methods. Conclusion We have presented a critical report about the current state of EJBs. It is easy to find documents that present this technology’s assets and it would be very useful to consult them in order to get a global idea of the question. We think that choosing this technology for the implementation of a serious object model could lead to considerable disappointment, notably due to the technology’s immaturity. The worrying gap between marketing material and the reality of EJB technology today increases this risk. In any case, when making such a choice the elements highlighted in this report should be taken into account. Within the framework of object modeling, alternatives such as some object databases or object/ relational frameworks can be considered. We will continue to follow the development of this technology very closely in coming months.n Related Links • The best EJB information can be found on: http://archives.java.sun.com/archives/ejbinterest.html • Sun’s EJB forum: http://forum.java.sun.com/forum • Also check out: http://www.ejbnow.com http://www.ejbportal.com TrendMarkers is a publication of: TechMetrix Research 6 New England Executive Park, #400 Burlington, MA 01803 Phone: 781-270-7486 Fax: 781-270-7487 E-mail: trendmarkers@techmetrix.com www.trendmarkers.com December 99