Microsoft Visual J# .NET Tony Goodhew Product Manager Visual J# .NET Microsoft Corporation. Product Goals. Provide a Java language for the Microsoft® .NET Bring the power and richness of the .NET Frameworks to programmers using Java Carry forward existing skill and code investments
01 / 55Microsoft Visual J# .NET Tony Goodhew Product Manager Visual J# .NET Microsoft Corporation
1 / 17
Télécharger la présentation
Microsoft Visual J# .NET Tony Goodhew Product Manager Visual J# .NET Microsoft Corporation
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
Product Goals • Provide a Java language for the Microsoft® .NET • Bring the power and richness of the .NET Frameworks to programmers using Java • Carry forward existing skill and code investments • Seamless upgrade path for Visual J++® developers • Full integration with Visual Studio® .NET
Visual Studio .NET VB C++ C# JScript J# Common Language Specification ASP.NET Web Forms Web Services Windows Forms ADO.NET and XML Base Class Library Common Language Runtime Operating System .NET Framework
J# Compiler J# IDE in VS Visual Studio.NET JBIMP J# Class Libraries (JDK Subset) COM Inter-op and WFC .NET Frameworks (ADO.NET, ASP.NET, Windows Forms, Web Services …) Common Language Runtime Operating System Visual J# .NET
Technology Overview • Java language • Microsoft Visual J#™ .NET compiler • Support for .NET CLS • Properties, events, and delegates • Class libraries • Subset of JDK 1.1.4 class libraries • Base libraries, collection classes • AWT, JDBC, Beans • Visual J++ support: Java/COM, J/Direct, WFC
Technology Overview (2) • Binary converter • Class files to .NET assemblies • Full access to the .NET Framework • ASP.NET, ADO.NET, Windows Forms, and so forth • Integrated with Visual Studio .NET • IntelliSense®, designers, debugger • Usability improvements
Visual J# .NET Compiler • Compiles Java-language sources to Microsoft intermediate language (MSIL) • Supports all key features of the Java language • Fully supports consuming .NET Framework • Preserves Java language, scoping, and class hierarchy semantics • Supports extensions in Visual J++ • J/Direct • Attributes
CompilerLanguage Support • Classes • Inner classes, nested classes, anonymous classes, local classes • Throws clause and checked exceptions • Static initializer blocks, synchronized blocks • .NET CLS compliance • Full CLS consumer • Limited CLS extender
Compiler CLS Consumer • Natural Java-language syntax for accessing • Properties – through property accessor methods • Delegates – permits creation of delegates over any Visual J# method • Events – through event accessor methods • Enums • Value types • Attaching attributes
Consuming .NET Meta Data • Properties – use property accessors form.set_Text(“Hello”); form.get_Text(); • Delegates – just create the delegate over a Visual J# method myHandler = new EventHandler(OnClickOK); • Events – use event accessors okButton.add_Click(myHandler); okButton.remove_Click(myHandler);
Consuming .NET Meta Data Value Types and Enums • Using value types • Automatic boxing and unboxing DateTime dt = new DateTime(); dt = DateTime.Parse(“01/01/2002 12:00”); System.Object obj = dt; // This boxes value type dt DateTime dt2 = (DateTime) obj; // This unboxes obj • Using enums • Casting to underlying primitive type int iStyle = (int) AnchorStyle.Left; AnchorStyle style = (AnchorSytle) iStyle; • Using bitwise operations AnchorStyles style = AnchorStyle.Left | AnchorStyle.Bottom;
Using Other .NET Primitive Types • ubyte ubyte [] bytes = new ubyte[100]; File.Read(bytes); • Unsigned types not in Visual J# System.UInt32 uint = (System.UInt32) 100; • Managed pointer type System.IntPtr intPtr = System.IntPtr.Zero; // null • Boxing and unboxing of primitive types System.Object obj = 10; // Won’t work // Will work and will box the integer 10 to a Sysem.Object. System.Object obj = (System.Int32)10; int j = (int)(System.Int32) obj; // Unbox
Code Sample for IntPtr import System.Runtime.InteropServices.*; public class A { public static void main(String [] args) { byte [] barray = new byte[20]; GCHandle gch = GCHandle.Alloc(barray, GCHandleType.Pinned); System.IntPtr iptr = gch.AddrOfPinnedObject(); test(iptr); } /** @attribute DllImport(“sample.dll") */ static native void test (System.IntPtr iptr); }
Using Delegates J# class: class Consumer { public static void main() { CreateDelegate del = new CreateDelegate(); // Consume the .NET Delegate in J# del.myD.Invoke(); } } C# class: using System; public class CreateDelegate { // Declare a delegate for a method that takes no params and returns void public delegate void myDelegate(); // Define a method to which the delegate can point public void myMethod() { Console.WriteLine("Delegate called"); } public CreateDelegate() { // Create a delegate for above method myD = new myDelegate(myMethod); } public myDelegate myD; }
Code Sample for Boxing Primitives int i = 10; System.Object obj = (System.Int32) i; // Boxes i to an object int j = (int)(System.Int32) obj; // Unboxes obj to an integer
Compiler CLS Extender • Supports authoring .NET properties, events, and delegates • No new keywords: uses @ directives to mark members as properties, events, delegates • Accessor methods follow CLS naming conventions (get_, set_, add_, remove_) • Can be consumed from other languages • No support for enums or value types • In Beta 2, use the /extender option
Authoring Properties // A property ‘Size’ of type int /** @property */ public int get_Size(){…} /** @property */ public void set_Size(int size){…} // An indexed property ‘Item’ of type // System.Object; the index type is a string /** @property */ public System.Object get_Item(System.String key){…}; /** @property */ public void set_Item(System.String key, System.Object value){…}
Authoring Events And Delegates // Creates an Event called PropertyChanged // PropertyChangedEventHandler is the handler, // (a delegate) /** @delegate */ delegate void PropertyChangedEventHandler(); /** @event */ void add_PropertyChanged(PropertyChangedEventHandler eventHandler){…} /** @event */ void remove_PropertyChanged(PropertyChangedEventHandler eventHandler){…}
Object and String in Visual J# • Base objects (object, string, exception) • Seamless mapping • All semantics are maintained • Cross-language Interop automatically maps these object types • java.lang.Object(JLO) can be used instead of System.Object to access .NET Frameworks • java.lang.String(JLS) is exposed as ‘string’ data type in MSIL
Using .NET Framework • Strings • Auto marshaling of Java String and .NET Strings System.String hello = “Hello”; String helloJava = hello; • Calling methods that take by ref parameters String str = “Hello” callMethodThatAppendsWorld(str); // by ref parameter Console.WriteLine(str); // prints “Hello World” • Getting the System.Type for a class class sampleClass = Sample.class; System.Type sampleType = Sample.class.ToType(); // Calling sampleClass.ToType() will be slower
Using .NET Framework (2) • Keywords as identifiers – use @<keyword> class @class {} // class defined in J# int i = obj.@synchronized // accessing field named synchronized • Signing assemblies /** @assembly AssemblyKeyFile(“key.snk”) */ • Declarative security /** @attribute FileIOPermission(SecurityAction.Demand) */ ReadFile(); // demands for the permission before allowing // the call
Java-byte-code class file (.class, .jar, .zip) Java-language source file (newcode.jsl) .NET Framework JBIMP Binary Converter VJC J# .NET Compiler Subset of JDK Class Libraries .NET Assembly (MSIL) convclass.dll .NET Assembly (MSIL) newcode.dll .NET Framework Common Language Runtime Win32 Binary Converter .Class (Byte-Code) to MSIL
Binary Converter (JbImp) • Converts .class files to MSIL • Reports unresolved references • And permits you to automatically find them • /usestubrefs option • Creates stub types for unresolved references • Useful for unused unresolved references • J/Direct • Supports archive files - zip/jar/cab format • Signed assemblies • Use /keyfile, /keycontainer, /delaysign
Class LibrariesJDK Subset • Visual J# Redistributable includes subset of JDK 1.1.4 class libraries in MSIL • JNI and RMI are not supported • Key functional areas are: • Base libraries • (lang, util, math, io, net, text, ...) • AWT • JDBC • Beans • Collection APIs (AP subset) • Set, Map, List, Collection, and so forth
Visual J++ Style Java-COM Interop • Visual J# supports most key Java/COM Interop scenarios of Visual J++ • Applications using COM components • @com.class, @com.interface, @com.method, and so forth • Applications hosting Microsoft ActiveX® controls • Exposing components to COM • Must have @com.register
Visual J++ Style Java-COM Interop (2) • Support for this is layered on .NET Framework COM Interop • In most cases, existing Visual J++ applications using Java/COM will not need any changes to run • The Upgrade Wizard fully automates all steps of the upgrade • Newly written Visual J# applications must directly target .NET Framework COM Interop semantics and tools
WFC • WFC is supported in Visual J# • Existing Visual J++ WFC applications • Hosting of WFC controls • No source code changes required • New Visual J# applications must target Windows Forms instead
Integration with Visual Studio .NET • Full integration in the Visual Studio shell • Project system • Editor, Solution Explorer • Compile/build, execute/debug • Project wizards • Language services • Designers – Web Forms, Windows Forms, XML Web Services • IntelliSense, Colorizer • Debugger • Java-language exceptions • Java-language expression evaluator
Visual Studio .NET Power • Well integrated designers for rapid application development • Using HTML, Data, XML, server-side components • End-to-end application debugging support • Web applications • Cross language • Across processes, machines, and stored procedures • Customizable and extensible IDE components • Using macros
Visual Studio .NET Power (2) • Deployment support for packaging and installation • Deployment projects • Merge modules, setup, Web setup • International-ready application development • Localization projects, localized setup projects • Resource files with full unicode support
Environment Tips and Tricks • Solution Explorer • IntelliSense • Class view • Object browser • Outlining • Toolbox • Command window • Displaying miscellaneous files • Task list
Productivity • Dynamic Help • Microsoft Visual SourceSafe® Integration • Automating the build process • Command-line switches • Build macros • Batch builds • Command-line tools • VJC – Visual J# command-line compiler • JBIMP – Java byte-code to MSIL converter
Debugging • Cross language • .NET, Unmanaged, ASP, SQL • Cross process and machine • Rich debugger automation • Windows • Autos, Locals, Watch, Memory, Call Stack • Exceptions dialog • Expand your types automatically • Vjsee.dat
Visual J# Redistributable Package • Installs on .NET Redist • Complete runtime for deployment of Visual J# applications • Compiler • Class libraries • Deployment support for packaging
.NET Power in Visual J# – Frameworks • ADO.NET • XML/relational views, in-memory cache • ASP.NET • Authoring controls in Visual J#, • Data binding using ADO.NET and XML • Multiple client support
.NET Power in Visual J# – Frameworks (2) • Web Services • Proxy generation, UDDI integration • Support for HTTP – GET, POST, and SOAP wire formats • Windows Forms • Performance, GDI+, rich platform integration • Controls can be hosted in Internet Explorer 5.x
Native Interop Using PInvoke • Use .NET PInvoke attributes • DllImportAttribute, MarshalAsAttribute, StructLayoutAttribute, and so forth /** @attribute DllImport("USER32") */static native int MessageBox( int hwndOwner, System.String text, System.String title, int MyStyle);
.NET COM Interop • Supports native .NET Framework semantics for COM Interop • Newly written Visual J# applications must directly target .NET Framework COM Interop semantics and tools • Tools: TlbImp, AxImp, TlbExp, RegAsm • Attributes and classes in System.Runtime.InteropServices package • Visual J# enables all scenarios that are supported by other languages on .NET Framework • For example: • Using COM or ActiveX controls • Exposing WinForms components as ActiveX controls
Web Control Authoring VJSControl.ascx file: <%@ Control Language="VJ#" AutoEventWireup="false" Codebehind=“VJSControl.ascx.jsl" Inherits="WebApplication1.VJSControl"%> Codebehind file: // VJSControl.ascx.jsl public abstract class VJSControl extends System.Web.UI.UserControl { private System.String customername = ""; /**@property*/ public System.String get_customerName() { return customername; } /**@property*/ public void set_customerName(System.String s) { customername = s; } }
Web Control Authoring (2) Using a Web Control in a Web Forms page: <%@ Page language="VJ#" Codebehind="WebForm1.aspx.jsl" AutoEventWireup="false" Inherits="VJSWebApp.WebForm1" %> <%@ Register TagPrefix="uc1" TagName="VJSControl" Src="VJSControl.ascx" %> ... <uc1:VJSControl id="VJSControl1" customerName="Thomas" runat="server"> </uc1:VJSControl>
Data Binding in Web Applications <%@ Page language="VJ#" Codebehind="WebForm1.aspx.jsl" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %> ... <asp:DataGrid id="DataGrid1" runat="server" DataSource='<%# DataBinder.Eval(dataSet11, "get_Tables().get_Item(Customers). get_DefaultView()") %>'> </asp:DataGrid>
Web Service Proxy Generation <%@ WebService Language="VJ#" Class="VJSWS1.Service1" %> Package VJSWS1; ... public class Service1 extends System.Web.Services.WebService { /** @attribute WebMethod() */ public int AddOne(int x) { return x+1; } }
Proxy Generation Command line for proxy generation: wsdl.exe /l:"Microsoft.VJSharp.VJSharpCodeProvider, VJSharpCodeProvider, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" http://localhost/VJSWS1/Service1.asmx Generated File: // Service1.jsl public class Service1 extends System.Web.Services.Protocols.SoapHttpClientProtocol { ... /** @attribute System.Web.Services.Protocols.SoapDocumentMethodAttribute(...)*/ public int AddOne(int x) { System.Object[] results = this.Invoke(("AddOne").ToString (), new System.Object[] {(System.Int32)x}); return ((int)(System.Int32)(results[0])); } ...
Upgrading from Visual J++ Visual J++ to Visual J# • Upgrading is as simple as pressing F5 in most cases • Upgrade Wizard in IDE • Opens Visual J++ solutions and projects • Automatically detects missing references • Class files – and locates them if present • COM references – runs Tlbimp and adds managed wrapper • Upgrade Report lists issues with prescriptive links • JBIMP to convert class files to MSIL
J/Direct • Visual J# compiler fully supports J/Direct • @dll.import, @dll.struct, @dll.structmap • Callbacks • All existing Visual J++ applications using J/Direct can be compiled and run without change • Binary Converter (JbImp) supports converting classes that use J/Direct • The com.ms.dll and com.ms.win32 packages used with J/Direct are fully supported
Upgrading Visual J++ Projects Using Java/COM – Calling COM from Java • Two simple steps: • Generate managed wrappers for the type library of the COM component using TlbImp tool TlbImp COMComponent.tlb • Compile the Visual J++ application together with the JActiveX wrappers, referencing the managed wrapper generated by TlbImp vjc <AppSources> <JActiveXWrappers> /reference:managedWrappers • Full debugging support
Upgrading Visual J++ ProjectsUsing Java/COM – Calling Java from COM • As simple as recompiling the Visual J++ component and registering it!! • For components implementing JActiveX templates (/c2j option): • Generate managed wrappers for the type library of the COM component using the TlbImp tool TlbImp COMComponent.tlb • Compile the VJ++ component while referencing the managed wrapper generated by Tlbimp vjc <AppSources> /reference:ManagedWrappers • Register the component using the RegAsm tool • COM clients are transparent to the fact that the Visual J++ component is now hosted in the common language runtime
Unsupported Visual J++ Java/COM Features • Custom marshaling • Monikers • Exposing components to COM as ActiveX controls • Exposing components to COM that do not have the @com.register attribute • Conversion of class files that use Java/COM
Connexion au compte
Connectez-vous pour publier votre contenu sur SlideServe.