Arsitektur Aplikasi Perangkat Enterprise #5 Antonius Rachmat C, S.Kom, M.Cs Enterprise Demand Company A Mobile Employees Consumers, Partners Company B Mobile Employees Consumers, Partners Customers Partners Suppliers Enterprise Application Inside Application Platforms Today Browser Apps GUI Services Web Services Apps Transaction Services Local Apps Web Scripting Data Access Standard Library Runtime Environment Operating System Other Apps More What is Microsoft .Net? .NET is microsoft technolgy and platform for developing and integrating services in the digital world To unify Desktop, Web, and Mobile programming Diperkenalkan oleh Microsoft sejak Feb 2002 .NET FRAMEWORK Bersifat independen dalam hal bahasa Aplikasi dapat dikembangkan di beberapa bahasa yang didukung oleh .NET: C# Managed Extensions for C++ Java - Visual J# .NET JavaScript - JScript .NET Perl Pascal, Delphi PHP Smalltalk Programmer dapat memilih salah satu bahasa yang paling dikuasainya. Mampu dijalankan beberapa platform (tidak semua) Keuntungan .NET .NET Blueprint Sales Data Service Corporate Fullfilment Service Visual Studio.NET Applications Using Your Service Smart Clients .NET FW Windows Smart Devices .NET FW Simple Browsers Your Internal Services Your application and web service .NET Framework Windows CE, XP, 2000, .NET Open Internet Protocols XML, XSLT, XSD, SOAP, DISCO, UDDI, XHTML, HTTP, SSL, WAP .NET Enterprise Servers SQL Server BizTalk Server Application Center Commerce Server Host Integration Server Internet Security and Acceleration Exchange Server .NET FW Windows Building Block Services Passport – Identity Service Calendaring Service … [myServices] 3rd Party Web Services Geographic Mapping Service Credit Card Statement Service … [ActiveX Paradigm] .NET Framework in General .NET Framework 4.0 .NET Framework class System.Web Services Description UI HtmlControls Discovery WebControls System.WinForms Design ComponentModel System.Drawing Protocols Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data ADO.NET Design System.Xml SqlClient OleDB, odbc, Oracle XmlDocument Serialization Xslt/XPath Reader/Writers System Collections IO Configuration Runtime InteropServices Security Net ServiceProcess Text Reflection Diagnostics Remoting Globalization Resources Threading Serialization .NET Compact Framework class System.Web Services Description UI HtmlControls Discovery WebControls System.WinForms Design ComponentModel System.Drawing Protocols Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data System.Xml ADO.NET SqlClient XmlDocument Serialization Design SqlServerCe Xslt/XPath Reader/Writers System Collections IO Configuration Runtime InteropServices Security Net ServiceProcess Text Reflection Diagnostics Remoting Globalization Resources Threading Serialization Common Language Runtime Bagian utama dari framework yang akan mengkompilasi dan mengeksekusi program yang ditulis dengan bahasa yang mendukung .NET Compilation process Pertama program di compile menjadi Microsoft Intermediate Language (MSIL) / Common Intermediate Language (CIL) Mendefinisikan instruksi untuk CLR Kemudian MSIL code diterjemahkan kedalam machine code Machine code untuk platform yang khusus Mengapa dua proses kompilasi ? Agar platformnya bersifat independence .NET Framework dapat diinstal di platform berbeda Mengeksekusi program .NET tanpa modifikasi kode-nya Language independence .NET program tidak terikat dengan bahasa tertentu Komponen yang lama dan baru dapat terintegrasi MSIL HelloWorld: .assembly hello {} .assembly extern mscorlib {} .method static public void main() il managed { .entrypoint .maxstack 1 ldstr "Hello World from IL!" call void [mscorlib]System.Console::WriteLine(class System.String) ret } Common Language Runtime Keuntungan lain dari CLR Execution-management features Manages memory Programmer lebih berkonsentrasi pada program logic CLR menyediakan JIT compilation. JIT hanya akan mengkompilasi method-method yang memang digunakan dalam suatu bagian aplikasi pada saat tertentu, dan hasil kompilasi ini sendiri di cache di dalam mesin dan akan dikompile kembali jika memang ada perubahan pada kode aplikasi kita. Jadi tidak semua method diload ke-memori pada saat yang sama CLR disimpan pada file: mscoree.dll C:\windows\System32 Common Language Runtime Base Class Library Support Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debug Engine IL to Native Compilers Code Manager Class Loader Garbage Collector CLR Execution Model VB Native Code C# Install time Code Gen Script ... Assembly: MSIL + Metadata Development Deployment Common Language Runtime JIT Code Gen Native Code Compiling & Executing Managed Code Compilation Source Code Language Compiler Microsoft Intermediate Language (MSIL) The first time each method is called Native Code JIT Compiler Execution Data Types in the CLR The CLR mendefinisikan Common Type System (CTS) All languages built on the CLR use the CTS (managed code) Ada 2 kategori: Value types: Relatively simple types Allocated on the stack Reference types: More complex types Allocated on the heap Destroyed through garbage collection Illustrating the Common Type System Object Class Interface ValueType Byte Int16 UInt16 Single Char Int32 UInt32 Double String Int64 UInt64 Delegate Decimal Structure Others Boolean Others Array Reference Types Value Types Enum CTS Data Type .NET Class Library Sering disebut sebagai Base Class Library. Class library bersifat berorientasi objek yang akan menyediakan types dan fungsi-fungsi managed code. Dengan BCL kita dapat membuat: Aplikasi Aplikasi Aplikasi Aplikasi Aplikasi console berbasis windowd (Windows Form) ASP.NET (berbasis web) Web Services XML berbasis Windows Services .NET Class Library (2) Tampilan ILDASM – assembly view .NET assembly Private assemblies are required to be located in application’s directory or subdirectory The disadvantage is that each time a copy of the Assembly is created which in turn occupies more memory and reduces the performance Output: .dll Must be imported Shared assemblies installing an assembly: gacutil.exe –i MyAssembly.dll Two or more assemblies of the same name can coexist in the GAC (must have different versions) the end of "DLL hell" Adding external assembly to ur application (on C#) Obfuscation Entity renaming changing names of namespaces, classes, methods, properties, fields, enumerations Control flow obfuscation modifying the original code (e.g. transforming if or while statements by using goto statement) Removal of unused members String encryption Breaking IL Disassembler injecting code into the obfuscated assembly that is designed to break IL Disassembler so that it won’t open the assembly at all Compiling into native code Hasil Obfuscation C++ .NET C++ with Managed Extensions can be used to create .NET applications Managed C++ provides: Garbage collection support Built-in support for interfaces, properties, and events Access to all other CLR features C++ can still create native binaries if desired All other Visual Studio.NET languages produce only MSIL Database Access in .NET In .NET there is ADO.NET “connectionless” Client DataSet Data Adapter Command DataSetCommand Connection Data Source DataReader Managed Provider ASP.NET (Server-Side Scripting) ASP.NET Architecture: (1) get a.apx Client (4) HTTP file IIS Web Server (2) process (3) result .NET Assembly Other Assemblies .NET Engine Database .NET framework .NET Framework 1.1 was included in Windows Server 2003 and was an optional component of Windows XP Service Pack 1 Redistributable packages (dotnetfx.exe) .NET Framework 1.1 23.1 MB Windows 98/Me/NT/2000/XP/2003, IE 5.01 .NET Framework 2.0 22.4 MB Windows 98/Me/NT/2000/XP SP2/2003, IE 5.01 Windows Installer 3.0 disk space: 280 MB (x86), 610 MB (x64) .NET 3.5 -> 197 MB MONO Mono project (http://www.mono-project.com) support for .NET client and server applications on Linux, Solaris, Mac OS X, Windows and Unix sponsored by Novell LGPL (Lesser General Public Licence) supported systems: GNU/Linux, NetBSD, FreeBSD, 120,000 lines of C code and 600,000 lines of C# code. Cygwin/Mingw32, Mac OS X, Solaris, AIX GPL (General Public Licence) Official international standards: ECMA-334: The C# Language Specification ECMA-335: The Common Language Infrastructure (CLI) Mono Architecture ASP.NET ADO.NET Windows.Form MySQL/Postgress Evolution# Mozilla Novell iFolder Apache Mono Gtk# Novell LDAP Gnome# Java Compatibility ZipLib Microsoft Compatibility Libraries Mono Libraries Mono Runtime (Implementation of ECMA #335) Windows Phone 7 Architecture Java 2 Platform Dimulai tahun 1995 pada browser HotJava – Netscape Platform diperkenalkan pada June, 1999 WORE – Write Once Run Everywhere Java 2 Platform J2SE Platform Java system overview Yang dibutuhkan? J2RE untuk menjalankan Java. J2RE akan berisi Java Virtual Machine. J2SDK untuk mendevelop Java. J2SDK akan berisi JVM dan SDK J2ME untuk mendevelop aplikasi Mobile J2EE untuk mendevelop aplikasi Enterprise J2EE berisi seluruh komponen Java 2 Platform Proses Kompilasi Pada kompilasi Java, terdapat 2 bagian penting yaitu: Java Compiler dan Java Interpreter Java compiler mengenerate bytecode (sekumpulan instruksi yang me-ressemble kode mesin, tetapi tidak spesifik pada prosesor) yang bersifat “cross-platform intermediary, halfway between source code and machine language”. Java interpreter akan meng-interpret Java bytecode yang ada untuk eksekusi program. Kekurangan dari bytecode terletak pada kecepatan eksekusi, karena tidak bersifat native Proses Kompilasi Win32 Kode Java Java bytecode HP-UX Intermediate compilation Runtime VM Intepretation Solaris Mac The Java Virtual Machine An abstract computing machine that executes bytecode programs An instruction set and the meaning of those instructions An algorithm to verify the class file Interpreter Simple, compact Slow Just-in-time compilation Hanya mengkompilasi “bagian” yg dibutuhkan saja A Bytecode Example public class X { public static void main(String[] args) { add(1, 2); } public static int add(int a, int b) { return a+b; } } public static void main(java.lang.String[]); Code: 0: iconst_1 1: iconst_2 //Method add:(II)I 2: invokestatic #2; 5: 6: return public static int add(int,int); Code: 0: iload_0 1: iload_1 2: iadd 3: ireturn pop Introduction to the JVM JVM is a component of the Java system that interprets and executes the instructions in our class files. Memory configuration by the JVM. Introduction to the JVM (Cont’d) Each instance of the JVM has one method area, one heap, and one or more stacks - one for each thread When JVM loads a class file, it puts its information in the method area As the program runs, all objects instantiated are stored in the heap The stack area is used to store activation records as a program runs Introduction to the JVM (Cont’d) Content of Memory Blocks at runtime. The Class Loader Subsystem The class loader performs three main functions of JVM, namely: loading, linking and initialization The linking process consists of three sub-tasks, verification, preparation, and resolution Class loading process. Tahap Compile & Execute Loading means reading the class file for a type, parsing it to get its information, and storing the information in the method area. Verification is the process of ensuring that binary representation of a class is structurally correct In preparation, the JVM allocates memory for the class (i.e static) variables and sets them to default initial values. Resolution is the process of replacing symbolic names for types, fields and methods used by a loaded type with their actual references. Class initialization, This is the process of setting class variables to their proper initial values - initial values desired by the programmer. J2EE Stands for “Java 2, Enterprise Edition” Superset of Java 2 Standard Edition (J2SE) J2EE (1.4+) is an infrastructure specification for: Components ("Beans") Data Source Connectivity XML and Messaging Web Pages and Web Services Class-class Java Java Servlets (menggunakan Apache-Tomcat): javax.servlet JSP (menggunakan Apache-Tomcat): javax.servlet.jsp EJB (menggunakan JBoss): javax.ejb.* JMS: javax.jms.* JDBC (J2SDK): java.sql.*, javax.sql.* JNDI (J2SDK): javax.naming.* JTA / JTS: java.transaction.* JavaMail (Java MailAPI): javax.mail.* XML: javax.xml.* JavaNet: java.net J2EE Architecture 4 Aplikasi Java Applications: program standalone di komputer, dari aplikasi console sampai dengan GUI yang kompleks yang menggunakan javax.swing Applet: program Java yang dijalankan di web browser dengan menggunakan HTML. Servlet: program yang melakukan generating isi webpage namun berjalan di java-enabled web server yang kemudian akan dikirimkan hasilnya ke client. JSP / JSF: aplikasi web yang berjalan di sisi server. J2EE Server Technologies Servlets Server side Java code Java Server Pages (JSP) dan Java Server Faces Server side Java code Enterprise JavaBeans (EJB) Java server components that encapsulate business logic to be shared across the enterprise Database Access in Java Java provides JDBC to access relational data Application Statement Resultset Prepared Statement Callable Statement Connection Driver Manager JDBC/ ODBC Bridge ODBC Driver ODBC DB Java Server Pages and Servlets Java also allows for server-side scripting JSPs are based on Servlets (1) get a.jsp Client (5) HTTP file Web Server (2) process Other Components JSP (3) gen. Servlet Servlet Impl. (4) result Servlet Database JVM Perbandingan J2EE dan .NET Framework A typical .NET Enterprise Solution IIS on W2k Server Browser Windows Client ASP .NET .NET managed component SQL Server A typical J2EE Enterprise Solution Java App Server Servlet EJB JSP Browser Java Client DB Server The .NET Framework Browser Apps Windows Forms Web Services Apps Enterprise Services ASP.NET Local Apps Other Apps ADO.NET More .NET Framework Class Library Common Language Runtime Windows The Java Environment Browser Apps Swing Web Services Apps Enterprise JavaBeans JavaServer Pages Local Apps JDBC Standard Java Packages Java Virtual Machine (VM) Windows, Solaris, Linux, others Other Apps More RMI Client IIOP Client HTTP Client JMS EJB Container HTTP Engine .NET App SOAP Client HTTP Client RDBMS EJB Container IIS – HTTP Engine JSP Servlet Servlet Container J2EE Server Component Component Component CLR Host Component Component Component Comp. Services CLR Host ASMX Controls ASPX ASP.NET CLR Platform Message Queue CORBA Server Other Resource RDBMS Message queue Other Server Other Resource J2EE Solutions vs Microsoft .Net Solutions Both multi-tiered, similar computing technologies Both support “standards” Both offer different tools & ways to achieve the same goal. Very difficult to compare and qualify the comparison because each has its own advantages & disadvantages. Comparing the stacks Enterprise solutions … … Third party extensions Extensions: P&P blocks Phoenix, Tiles, Java Faces ASP.Net JSP Base Class Library J2EE Class Library CLR Java runtime Win32 / Linux J2EE App Servers Websphere, Weblogic, Tomcat, etc. VB MSMQ, COM+, IIS, WMI, AD, ADAM, Indexing, UDDI, etc. JMS Apache Win32, Unix, Linux BEA Weblogic C++ JDBC Java C# ADO.NET Webshpere Studio Servlets Eclipse Perl Visual Studio.net / Mono Python Struts CLR vs JVM C# VB .Net Managed Lots of other C/C++ Languages Java MSIL Byte Codes CLR CTS GC Security Runtime Services JRE (JVM) GC Security Runtime Services Windows OS Mac Win Unix Linux Both are ‘middle layers’ between an intermediate language & the underlying OS JVM vs. CLR JVM CLR Managed execution environment X X Garbage Collection X X Metadata and Bytecode X X Platform-abstraction class library X X Runtime-level security X X Runs across hardware platforms X ? Choosing between Java/J2EE and .Net The ultimate choice usually depends not on technical superiority, but on: cultural/”religious”/political preferences Customer preference Vendor relations Skill set of your developers You are most likely to be developing in both environments for the foreseeable future Look out for “The third way”: Linux, Apache, MySQL, PHP, … NEXT Database for Enterprise: JDBC, ADO.NET dan LINQ