IMS Continued Modernization - IMS UG May 2013 Philadelphia

257 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
257
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Many of the most important companies in the world have relied on IMS for decades. IMS is integral to your business, it’s integral to our daily lives, it is absolutely vital to the infrastructure of how we work and—more importantly--how we live.
  • As you know, IBM recently celebrated its Centennial. One of the commemorative campaigns was to identify IBM’s top 100 “Icons of Progress” – “complex tales of big risks, lessons learned and discoveries that have transformed the way we work and live.” One of the first icons highlighted was IMS. The story behind the origins of IMS is worthy of a feature film. The history is noteworthy – but our focus lies in what is ahead for both IMS and for IBM. So what has happened in the years that have intervened? The most compelling industry in history—IT—emerged, with IMS at its center. Let’s take a look at how IMS evolved, beginning with the Apollo moon shot in 1968.
  • Let’s start back in 1968. The first release of IMS on System 360 is architected with multiple regions . What did this mean? The easy answer is that it means that IMS online application programs can run in their own partition, region, or address space. It sounds like Computer Science 101 now, but remember that in 1968, this was very atypical ; it was, in short, a very advanced idea. What the original IMS development team did was to separate the definition of the database (data sets and files) from the application program. By moving definitions out of the program, significant benefits (performance, availability, reliability—all of the IMS hallmarks you depend on today) would be derived when multiple programs access the same database. A similar idea was applied to the communications. The sending and receiving of input and output messages was removed from programs. IMS's queues were likewise critical to its initial design and to its ongoing success. Consider highlighting some of the marquis additions, e.g. MFS, MSC, Fast Path, IRLM, DASD Logging……..
  • Another major reason for the success of IMS has been its commitment to compatibility. Applications written to the original interface still work. Interestingly, IMS does not even require its users to recompile or rebind (link-edit) programs when migrating to new releases. Similarly, IMS is committed to database compatibility. When you migrate to a new release of IMS, the databases do not have to be converted. They are usable in their old form. Soooo…. this commitment to compatibility makes IMS users more productive. They can migrate to new IMS releases which take advantage of new hardware and software capabilities without spending time on application or database upgrades.
  • But as technology advances, so does IMS. IMS continues to support communications using IBM’s proprietary VTAM protocols but also provides a socket server capability to allow IMS to be a key player in evolving environments.
  • When you start with an architecture that ensures stability, flexibility, and performance…….. When you make downward compatibility a priority, thus ensuring that investments made now will continue to provide value in the decades to come…… When your programming interface ensures that application programs can almost be categorized under “develop once, run forever ”……… When all of those together enable you to maintain a high degree of adaptability in the face of monumental change…… It’s almost impossible not to thrive!
  • IMS still drives a huge percentage of worldwide mission-critical business processes. Stress that these metrics are “business as usual” for IMS. But when you get right down to it, numbers are interesting only to mathematicians, actuaries, and gamblers. American Airlines can say that it logged a total of 766 million miles last year; to you, if you are a customer of AA, what is most important is not the 766M metric—it’s knowing that the airplane will get you from here to there….. safely . The metrics around IMS are legendary. They are a testament to IMS’s ability to adapt and thrive. But our excitement lies in what is ahead for IMS. We know that IMS can help you get your business from here to there—from now into the future—safely.
  • Installation Setup and customization One-time configuration Operations and Database Management Day-to-day operations and security Application Development and Maintenance Deployment, test, etc Integrated access to IMS resources Leverage common processes & tools Environment Capabilities Priorities Policies Parameters SLAs Business Rules Events . SQL & DLI Command Processor (for Tools)
  • 05/29/13 21:11 Over the last few releases of IMS, we have systematically rearchitected the design and delivery of this product. That focus on IMS EVOLUTION will continue moving forward. Change the way we talk to IMS More intuitive Consistency with CICS, DB2, z/os, Omegamon…. RDz unit test (save MIPS) JCL generation (save MIPS) A/D focus: (feedback from CAC) - test RDz unit test (used to be zPDF), BTS modernization, simplifying debug - Impact of change (Rational Asset Analyzer) i.e. change a segment in the DB, see all apps that use that segment - Enhance existing apps. (search segment arguments) -
  • IMS Open Database – IMS Open Database is a new function in IMS 11 taking on the challenge of modernizing IMS DB access and application development. IMS Open Database offers direct distributed access to IMS database resources. The distributed nature is two-fold. At the IMSplex level, it allows cross-LPAR access to any IMS database in the IMSplex. At the pure distributed level, it allows non-mainframe (e.g., Windows OS) access directly to IMS database resources through industry standard interfaces. This enhancement extends IMS Connect as the gateway to IMS DB. It adds a new Common Service Layer address space which manages connections to the IMS ODBA interface. This enhancement improves application access to IMS. It addresses two significant bottlenecks for business growth: Connectivity – IMS DB has been historically grounded to the mainframe…certainly there are ways to get to it but none straightforward and simple. Programmatic access – even when connectivity isn’t an issue – the skills aren’t readily available to develop new application workload. DLI isn’t industry standard and skills aren’t plentiful. With IMS 11 we are rolling out a complete suite of Universal drivers in support of IMS database connectivity and programmatic access. The intent is to access IMS in a uniform way using the most relevant industry standards from any platform and from within the most strategic runtimes. A standards-based approach opens a lot of growth and expansion opportunity. The fundamental communication protocol we will use to communicate with IMS Connect will be the industry standard Distributed Relational Database Architecture (DRDA) protocol. Single Universal driver in support of both type-4 and type-2 connectivity in all supported runtimes – there’s no need to learn another driver’s semantics to toggle between environments and desired connectivity – it’s all built in to the framework. Distribution of resources within an IMSplex is included. The idea is to extend the reach of IMS by extending the data. IMS DB metadata is exposed via the standard JDBC API and therefore can be consumed and visualized by JDBC tooling. By allowing inspection of metadata, the next step is query. Query syntax uses standard query language syntax.
  • Copyright IBM Corp. 2009 IMS 11 - Easier than Ever! The universal drivers for JDBC implement JDBC 3.0. They include local commit and rollback support. They implement standard SQL for the subset that they support. This includes the use of foreign keys for segments in an IMS hierarchy. The keys of parent segments are treated as foreign keys in the table for the segment type. This makes it easier for those familiar with SQL and JDBC to work with IMS databases. In previous IMS versions a JDBC INSERT of a dependent segment required a WHERE clause for positioning in the IMS database. This is not standard JDBC or SQL. IMS 11 changes this. The WHERE clause is not required for these inserts. Foreign keys are used instead. Like other implementations of JDBC the result set is updatable. The metadata generated by the DLIModel utility may be treated as if it were catalog data. This allows JDBC tooling to work with IMS databases in the same way it works with DB2. For example, the tooling can interrogate which columns are in a table and which column is the key.
  • Copyright IBM Corp. 2009 IMS 11 - Easier than Ever! The Open Database Manager is a z/OS address space. It is an addition to the Common Service Layer (CSL) of IMS. Previous versions of IMS have provided the Operations Manager (OM), the Resource Manager (RM), and the Structure Call Interface (SCI) address spaces. These are also part of CSL. ODBM manages the connections to ODBA in IMS. These connections may be from JEE, non-JEE, IMS Connect, or an address space using the Assembler macro interface. ODBM receives database connection requests and passes them to IMS. It translates database requests from the DDM protocol of DRDA into DL/I calls. When IMS returns the result of a DL/I call, ODBM translates the response into the DDM protocol used by DRDA. ODBM provides isolation of application containers from IMS. This prevents the IMS control region U0113 abends that would otherwise occur when the container abends while in a DL/I call. Two phase commit is supported, but optional, with ODBM. Two phase commit requires the use of RRS on z/OS along with XA for distributed. RRS is optional with ODBM, but it is the default. When RRS is used, ODBM uses the ODBA interface in IMS. If RRS is not used, ODBM uses the Database Resource Adapter (DRA) interface in IMS. The DRA interface is the interface that is used by CICS for DBCTL services.
  • Copyright IBM Corp. 2009 IMS 11 - Easier than Ever! This diagram shows other capabilities added with Open Database. Since Open Database uses DRDA when communicating via TCP/IP, a roll-your-own (RYO) application on any platform using any programming language has access to IMS databases by using the DRDA interface. Open Database provides Assembler macros that may be used by applications running on the same LPAR with IMS for access to IMS databases. The RYO and Assembler interfaces are provided primarily to facilitate the development of tools which need access to IMS databases; however, they are open for anyone to use. This diagram also shows a second z/OS LPAR. This illustrates that IMS Connect may communicate with an ODBM address space on another LPAR. This is supported since SCI has a multi-LPAR communications capability.
  • The IMS Catalog is new in IMS 12. It contains information about IMS program resources, database resources, and relevant application metadata that IMS controls. It is a High Availability Large Database (HALDB) that can be accessed by DL/I calls or SQL statements to look at data in the catalog in the same way that you retrieve data from any other HALDB. It is a trusted source of metadata which is derived from the database descriptions (DBDs) and program specification blocks (PSBs). Additionally, the ability to code the elements described by an application program metadata in a DBD provides the ability to consolidate the data requirements of your application programs into the IMS Catalog. You can populate the IMS Catalog when you generate the ACB members or you can populate the IMS catalog in a separate job after the ACB generation process is complete. IMS ensures that the catalog contains accurate information.
  • The IMS Catalog is new in IMS 12. It contains information about IMS program resources, database resources, and relevant application metadata that IMS controls. It is a High Availability Large Database (HALDB) that can be accessed by DL/I calls or SQL statements to look at data in the catalog in the same way that you retrieve data from any other HALDB. It is a trusted source of metadata which is derived from the database descriptions (DBDs) and program specification blocks (PSBs). Additionally, the ability to code the elements described by an application program metadata in a DBD provides the ability to consolidate the data requirements of your application programs into the IMS Catalog. You can populate the IMS Catalog when you generate the ACB members or you can populate the IMS catalog in a separate job after the ACB generation process is complete. IMS ensures that the catalog contains accurate information.
  • The IMS Enterprise Suite V2R1 is a separate, no charge product that provides IMS application development and integration. It is a collection of IMS middleware functions and tools that simplify your use of IMS applications and data while supporting your IMS on demand systems and your distributed IMS application environment. It also delivers innovative new capabilities for connectivity to your IMS environment, expands application development, extends standards and tools for a Service Oriented Architecture (SOA), eases installation, and provides simplified interfaces. It includes the Java Message Service (JMS) API used for the IMS Java application Callout function, the Connect API for Java and for C - providing a simple API to interact with IMS Connect, the IMS SOAP Gateway for connectivity to/from IMS applications and data along with its open source , WS-Security and Business Events, the Explorer for Development for application development, and the DLI Model Utility plug in for local Java metadata development. Also provided is the Installation Manager and SMP/E support to ease installation and management on the distributed and z/OS platforms.
  • The IMS ES Explorer can be used to simplify of IMS application development tasks.
  • IMS is a powerful z/OS engine for database management and transaction processing. For anyone new to this environment, developing and maintaining application programs for IMS using the traditional ISPF interface can be time consuming and challenging. The IMS Explorer addresses some of these challenges by providing an easy-to-use interface to simplify common IMS application development tasks, and by being able to integrate w/ other IBM solutions (see comment **). What is the IMS Explorer? It’s a graphical tool, based on the Eclipse Platform** , that offers capabilities to import, visualize, and edit IMS database and program definitions (DBDs and PSBs). Its graphically-driven editors allow the user to display the segment hierarchy for any IMS database, including logical relationships and secondary indexes. It provides user assistance in the form of rich GUI controls and contextual help to reduce IMS development effort. The IMS Explorer leverages the Universal JDBC driver (available since IMS v11) allowing users to easily access and manipulate data stored in IMS using standard SQL queries. The IMS Explorer is part of the IMS Enterprise Suite and a tech preview will be available soon. ** It has the same look and feel and can be in integrated w/ other IBM solutions which are also based on Eclipse (RDz/RAD, Optim Data Studio, CICS Explorer). IMS Explorer is one piece of the puzzle. Integrated w/ other IBM Products we can have and end-to end solution regarding IMS Application Development Simplification.
  • IMS Continued Modernization - IMS UG May 2013 Philadelphia

    1. 1. © 2012 IBM CorporationIMS Continued ModernizationNancy Stein – IBM IMS ATSPhilly IMS User Group Meeting – May 2013
    2. 2. © 2012 IBM Corporation2More than 75%of the world’sTop 25 companieslisted in theFortune 100entrust theirbusiness to IMSevery second100
    3. 3. © 2012 IBM Corporation3IMS – an IBM Icon of Progress
    4. 4. © 2012 IBM Corporation4IMS – from Apollo to XRFIMS 3601972 - 2.2 + 2.31968 - 1.0Multi-regionarchitecture1971 - 1.2 + 2.0Scheduling byintent onsegment type1973 - 2.4.1MFS3270sIMS VSVSAMSecondary IndexProgramIsolation1974 – 1.01975 – 1.1Parallel DLIGSAMAppl. Chk/RestartVSAM Buffer Pools1975 – 1.1.3MSCSMP1977 – 1.1.4Fast PathDBRC1978 – 1.1.5FP Mixed ModeAOI and CMD callsIMS VS1980 – 1.1.631 Dependent regionsISCMSC VTAM1981– 1.2Data SharingIRLMPROCOPT GON/GOT1984 – 1.3DASD LoggingDLI SAS1986 – 2.1VSCR1987 – 2.2XRF1970 - 1.1Scheduling byintent ondatabase
    5. 5. © 2012 IBM Corporation5IMS – from DBCTL through the present dayIMS ESA1989 - 3.1DBCTL1995 - 5.1Parallel SysplexOTMA1998 - 6.1Shared Queues999 DependentRegionsIMSHALDB2000 – 7.12002 – 8.1Common ServiceLayerGlobal OnlineChange2004 – 9.1HALDB OLRIntegratedIMS Connect2007– 10DRDMSC BandwidthGlobal StatusManagement2009 – 11Open DBDB QuiesceACBLIC DynamicAllocationTransaction ExpirationIMS Web 2.0 Solutions1993 - 4.1APPCETO1998 - 4.9PRPQ for Y2KSupport2011 – 12IMS Catalog64-bit FP BufferManagementIMS-to-IMS TCPIP SupportFast Path Secondary IndexIMS Enterprise Suite
    6. 6. © 2012 IBM Corporation6Compatibility• Application compatibility– Programs written in 1969 still work– IMS does not require recompiles for new IMS releases• Database compatibility– Databases do not require upgrades for new IMS releases• IMS has allowed users to grow their applications in lieu of forcing majorconversions
    7. 7. © 2012 IBM Corporation7Adaptability• And yet IMS also keeps up with technological trends– Provides a TCP/IP socket server – IMS Connect• Access to both IMS transactions and databases– Allows IMS applications to be either clients or servers– Delivers adapters that run in JEE, SOAP, etc. environments• Pluggable components that provide easy interfaces to IMS resources– Supports type-2 and type-4 Universal Drivers for access to IMS DB• Provides application programming interfaces– Unique to IMS• DL/I calls to access IMS resources: message queues and data• IMS applications can be written in: COBOL, PL/I, Assembler, C/C++,Pascal, ADA, REXX, Java– Portable – Java classes and JDBC
    8. 8. © 2012 IBM Corporation8And …• That is why IMS continues to be current– Application programs that were written for IMS 5, 10, 15, 20, 40…years ago can continue to run today• Even when they are now invoked from the web– Or continue to be invoked from older 3270 devices or emulators– The same application, without change, can be accessed from anytype of connection mechanism or network that can access IMS• The IMS architecture allows communication components and evendatabase components to be exchanged or replaced– Without affecting the application in IMS
    9. 9. © 2012 IBM Corporation9How does a 44-year old software product continue to thrive?• Revolutionary Architecture– Multiple regions– Separate database definitions from applications– Separate communication management fromapplications• Persistent Compatibility– An application program written in 1969 still runs onIMS 12– No application recompile or rebind is required aftermigrating– No database conversion required after migrating• Programming interface– Database definitions maintained in DBDs– Application views and access limitations maintainedin PSBs– DLI calls used for both database access andinput/output messaging• Adaptability“You buildsophisticatedstructures aroundIMS……whenyou lift the coverson those IMStransactions, theyare incrediblysophisticated inwhat they do…..”Steve Mills, Senior VP and Group Executive Software& Systems, at IBM IMPACT 2012 Conference Keynote
    10. 10. © 2012 IBM Corporation1015 million gigabytes of production data managed by IMS$3.0 trillion ($US) per day transferred through IMS, by one customer200+ million users served every day375 million accounts…..for one customer46,000 transactions per second…..on a single IMS system
    11. 11. © 2012 IBM Corporation11IMS Evolution StrategyIMS interfaces IMSNew IMS interfacesand modelsInstallationandOperationsInstallationandOperationsApplicationDevelopmentApplicationDevelopmentReportingandAnalysisReportingandAnalysisReduce the need for special, in-depth IMS skillsJCLISPFSDSFJESUser ModsUser ExitsDBDGENPSBGENACBGENOLCDRDDLISQL / JDBCIMS ToolsRationalOptimCognosQMFInfoSphereJ2EEpureQueryIMSTMandDBDatabasesCatalog
    12. 12. © 2012 IBM Corporation12IMS Evolution / Simplification• Deliver more intuitive UIs and interfaces to talk to IMS– Eclipse-based tooling for Application Development – IMS Explorerand IMS 12– SQL support from Java with Open Database in IMS 11– More operational consistency with z/OS, CICS, DB2, RDz, andOmegamon for IMS• Reduce planned outages and manual tuning– Dynamic Database Buffer Pools – IMS 12– Database Quiesce – IMS 11– Dynamic allocation of ACBLIB data sets – IMS 11– Dynamic Resource Definition – IMS 10– Online Reorganization – IMS 9
    13. 13. © 2012 IBM Corporation13Rapid IMS Application Development• Extending IMS Application Development to Business Analysts– Make decisions based on up-to-the-minute data• Business Rules– ILOG BRMS support – code generation• Mashups– IMS Web 2.0 Solutions for Mashup Center– Available in V10 for IMS TM feeds, IMS 11 for IMS Data feeds– Ability to easily integrate multiple RESTful services, widgets, data• COGNOS– Real time query of IMS data– Business analyst with no IMS skill can make decisions based on datasupplied by IMS• QMF– Real time query and reporting of IMS data– Extended for business intelligence and analytics
    14. 14. © 2012 IBM Corporation14IMS 11: Distributed Access to IMS Data• IMS Open Database enables access to IMS databases anywhere in theIMSplex, directly from z/OS and distributed Java clients !!!– Using industry standard Distributed Relational Database Architectureto communicate with IMS Connect– Universal DB Resource Adapter• JEE environments (e.g. WebSphere Appl. Server) - JCA 1.5• SQL Calls– Universal JDBC Driver• Non-JEE and JEE environments• SQL Calls– Universal DLI Driver• Non-JEE and JEE environments• DL/I call concepts (SSA, command codes)– RYO (Roll Your Own)• Program sends DRDA commands directly to IMS ConnectIMS Connect becomes the gateway to IMS transactions and data !Makes Application development and Connectivity much simpler !
    15. 15. © 2012 IBM Corporation15IMS JDBC Support• JDBC 3.0• Standard SQL implementation for the SQL subset– Keys of parent segments are included in tables as foreign keys• Updatable results set• Local commit/rollback support• Metadata discovery API implementation– Uses metadata stored in the IMS Catalog– Enables JDBC tooling to work with IMS DBs as with DB2 DBs
    16. 16. © 2012 IBM Corporation16IMS Open Database and DRDAODBMIMS Universal DB DriversApplicationRequestorTCP/IPClientz/OSTCP/IPDDMIMS ConnectTCPIPDRDAPORTIMSSCIDRDA DLICallsDRAorODBADRDAIMS Application ServerIMSDB’s IMS Connect and Open Database Manager work together as a DRDA server forIMS data Allows distributed access to IMS databases via TCP/IP using the IMS UniversalDatabase Drivers Enables use of SQL database query language for access to IMS databasesIMSCAT
    17. 17. © 2012 IBM Corporation17Open Database Manager - ODBM• z/OS address space– Common Service Layer component• Functions– Receives database connection requests from IMS Connect– Translates incoming database requests from DDM protocol to DL/I calls– Manages ODBA or DRA interface to IMS– Sends/receives byte string to/from IMS– Translates responses into DDM protocol for the client– Send results set back to client• Provides isolation of application containers from IMS– Abend of container during DL/I call does not cause IMS U0113 abend• Distributed Syncpoint (global transaction) requires RRS on z/OS• Use of z/OS Resource Recovery Services with ODBM is optional– If RRS=Y (default), ODBM uses ODBA interface– If RRS=N, ODBM uses DRA interface (like the DBCTL interface)
    18. 18. © 2012 IBM Corporation18IMS Open DatabaseIMSWAS for z/OSTraditional ODBAODBASCIAppl.Java Appl.DRADBODBMSCIODBAorDRATraditional ODBAJava Appl.JEEJava Appl.Non-JEEIMSIMSConnectSCIDRADBODBMSCITCP/IPLPARODBASCITCP/IPLPARRYO DRDA Appl.RYO DRDA Appl. TCP/IPODBAorDRACICSCCTLAppl.Java Appl.Traditional DRADRACICSCICSAppl.Java Appl.TCP/IPCCTLWASWASAppl.Java Appl.JEEz/OS or distributedTCP/IPODBAODBATCP/IPAssembler Macro Appl.Assembler Macro Appl.Non-JEE (DB2 SP) CATCAT
    19. 19. © 2012 IBM CorporationIMS 12: IMS CATALOG• Metadata about IMS database and program resources, and applicationinformation stored in an IMS PHIDAM/OSAM HALDB database• Database Metadata– describes a physical database (ie. organization, segments, keys)• Program Metadata– describes a programs view of the database (ie. access, authority)• Application Metadata– describes an applications view of the data in the database• Fields not defined in DBD• Arrays and Structures• Field data types and data type conversion• Field redefines• Alternative Field maps for a segment• New ACBGEN– Generates ACB member & populates the catalog metadata in asingle UOW19
    20. 20. © 2012 IBM CorporationIMS Catalog• The IMS catalog is a key component of the IMS growth strategy:– Trusted IMS source for IMS database, program and applicationinformation– All Universal drivers leverage the IMS catalog• Direct access to IMS metadata in the catalog• No need for separate Java metadata classes on clientplatforms• Metadata no longer file-system dependent• Catalog metadata is kept up-to-date via new ACBGEN– Scalable Open Database solutions– Metadata discovery and exchange via IMS Open Database andthe IMS Explorer for Development– Broad IMS integration with the IBM and ISV portfolio of tools(Optim Development Studio, Rational Asset Analyzer, InfoSphereData Architect, etc)20
    21. 21. © 2012 IBM CorporationIMS Enterprise Suite• IMS Enterprise Suite is a product within the IMS SOA Integration Suite– IMS Enterprise Suite DLIModel utility plug-in– IMS Enterprise Suite SOAP Gateway– IMS Connect APIs– Java Message Service (JMS) API– IMS Enterprise Suite Explorer for Development• IMS Explorer V2.1.1.3 download available as of 06-22-2012• IMS Explorer V2.2 download available as of 11-02-2012• Supported with SMP/E and the IBM Installation Manager• Supports IMS 10, 11 and 1221
    22. 22. © 2012 IBM CorporationIMS Enterprise Suite Explorer for Development• Visualization and editing of IMS DBD and PSB definitions– Provides graphical editors to:• Display IMS database hierarchical structures• Display/create/edit PSBs• Change/add fields on a DBDs– Import Cobol CopyBooks and PL/I Structures to a database segment*– Generate DBD and PSB source• Easily access IMS data using SQL statements– Leveraging IMS Universal JDBC driver• Access the IMS Catalog for metadata discovery• Connectivity to the z/OS system– Browse a Data Set and submit JCLs– Import / export DBD and PSB source from a data set to IMS Explorer• Supports cross-product integration:– IBM® Rational® Developer for System z®– IBM Optim™ Development Studio– IBM Problem Determination Tools Plug-ins for EclipseSimplify IMS application development tasks*Requires IMS-ES 2.2 or RDz 822
    23. 23. © 2012 IBM Corporation23IMS Explorer: Revolutionizing IMS application developmentGraphical interfaceto easily access andmanipulate IMSdata using standardSQLGraphically-driveneditors to display andupdate IMS program anddatabase definitionsGenerate SQL toaccess IMS dataSee databaserelationshipsChange DBD andPSB definitions
    24. 24. © 2012 IBM CorporationIMS EXPLORERHANDS-ON LAB24

    ×