Sybase Tools Technology Preview John Strano – Technology Evangelist May 2006 Sybase Confidential Propriety. PowerBuilder 10.5 Overview Sybase Confidential Propriety. Microsoft’s Modified Release Schedule PowerBuilder’s .NET Compiler Takes advantage of ASP .NET 2.0 features Originally slated for PowerBuilder 11 release Q4 2005 Visual Studio .NET 2005 (ASP .NET 2.0) Release date moved by Microsoft from Summer 2005 to Q4 2005 Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements Decimal data type upgrade Provide support for 30 digits versus current 18 Position for support of .NET which handles 28 digits DataWindow expression support Currently all numerics converted to double before calculations Add Decimal() DataWindow function for conversion Implementation will replace current 3rd party implementation but should be completely transparent to user Byte data type Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements DateTime Picker Wrapper for Microsoft Common Control New control and/or enhancement to EditMask New DataWindow edit mask style Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements Menu Enhancements Styles Traditional Contemporary Style attributes Shadow Bitmaps (16x16 and 32x32) Titles Main background color Bitmap background color Highlight color Relies on GDI+ (GDIPLUS.DLL) Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements Toolbar Enhancements Styles Traditional Contemporary Style attributes Titles Main background color Bitmap background color Highlight color Text color Allow toolbars to be attached to top-level non-MDI Windows Relies on GDI+ (GDIPLUS.DLL) Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements New Rich Text Edit control PB10 investigation of Microsoft control found it lacking in features necessary to support DataWindow TX Text Control http://www.textcontrol.com/ Minimal (if any) loss of current functionality New functionality including saving as Microsoft Word DOC format Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements Updated bitmaps and icons Provide updated look to IDE Allow use in application Potential sources 3rd party Reuse from Sybase Workspace Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements Autosize Height for All DataWindow Bands All Bands Supported (not just detail band) Band will resize for Nested DataWindows Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements Treeview Presentation Style Designed similar to group DataWindow Property support Node lines Icons Grid style Indention size Event support Expanding / Expanded Collapsing / Collapsed Function support Expand (multiple variations) Collapse (multiple variations) Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements – TreeView Presentation Style Properties CollapsedTreeNodeIconName DefaultExpandToLevel ExpandedTreeNodeIconName Indent ShowConnectLines ShowLeafNodeConnectLines ShowTreeNodeIcon StateIconAlignMode TreeNodeIconName Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements – TreeView Presentation Style Functions Expand Collapse ExpandAll CollapseAll ExpandAllChildren CollapseAllChildren ExpandLevel CollapseLevel IsExpanded Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements Infrastructure refactoring (continuing past PB 11) DataWindow “rewrite” to support growth Processing Styles Crosstab Graph Grid Label Nested Ole RichText Functions Load / Save Parse / Generate / Info Describe / Modify Expression Table Import Export Painting / Printing Control Edit Style Event Function Dialog External Development of generic Data Source Interface (DSI) Abstract layer above current DBI layer Designed to support access of non-SQL based data .NET DataSet EJB Web Services Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements – Database Enhancements ASE 15.0 native driver support ADO.NET for ASE support ADO.NET for Oracle support DBI refactoring (not a visible enhancement) Sybase Confidential Propriety. PowerBuilder 10.5 Enhancements – Web Services Enhancements Adding .NET’s Web Services SDK Better data type support Security and Authentication EasySOAP Implementation Will be left intact, but not enhanced Sybase Confidential Propriety. Demonstration PowerBuilder 10.5 in action. Sybase Confidential Propriety. PowerBuilder 10.5 Q&A Sybase Confidential Propriety. -Sybase WorkSpace – Web Application Development & The JSF Web DataWindow Sybase Confidential Propriety. AGENDA Introduction to JavaServer Faces What is JavaServer Faces? Architecture Overview Key Concepts Why JavaServer Faces? Sybase WorkSpace - Web Application Development Tooling Objectives Architecture Overview Features Integration with DataWindow DataWindow Designer JavaDatastore Demonstration Sybase Confidential Propriety. JavaServer Faces: In General Sybase Confidential Propriety. BACKGROUND Building high-quality web application user interfaces is hard HTTP request/response model HTML dialect(s) and browser capabilities Need to support multiple client devices types Sybase Confidential Propriety. WHAT IS JAVA SERVER FACES? JavaServer Faces (JSF) is a component user interface (UI) framework for Java web applications. It is designed to significantly ease the burden of writing and maintaining applications that run on a application server and render their User Interfaces back to a target client. Sybase Confidential Propriety. WHY JSF? MVC (Model-View-Controller) for Web applications Clean separation of roles Easy to use Extensible component and rendering architecture Support for client device independence Offers finer-grained separation of behavior and presentation Component and web-tier concepts without limiting you to a particular scripting technology or markup language Sybase Confidential Propriety. COMPONENT MODEL Maintaining a reference to model objects Driving the event-handling Rendering is separate from the component JSF implementation provides a set of UI component classes Standard Component classes, for example Commandbutton, Form, Graphic, Input Output, Panel, Parameter SelectBoolean, SelectMany, SelectOne Sybase Confidential Propriety. RENDERING MODEL Renderers – Adapt components to a specific markup language Encoding – Create markup to represent value Decoding – Retrieve request parameters and create new value RenderKits – Library of Renders Extensible at runtime For JSP pages, represented as a custom tag library Basic HTML RenderKit part of the standard Component command_button command_hyperlink Sybase Confidential Propriety. Rendered As NAVIGATION MODEL Sybase Confidential Propriety. Sybase WorkSpace Web Application Development Sybase Confidential Propriety. OBJECTIVE Provide a life-cycle support including design, develop, debug/test, and deploy a web application utilizing JavaServer Faces technology. Visual Development Environment Allows building Web pages in a manner very similar to : PowerBuilder Visual Basic A flavor of 4GL experience. Sybase Confidential Propriety. OBJECTIVE Provides a component model Allows users to think about components, events and scripting instead of the detail of HTTP request / response Leverages standards JavaServerFaces runtime Uses Java DataStore to make data access easy Reuse existing Datawindows in your Web applications Make service and EJB invocation in the Web application easy Sybase Confidential Propriety. ARCHITECTURE Integration Web Application Development Tool DataWindow Painter Graphical Editing Framework (GEF) Eclipse Modeling Framework (EMF) Web Tool Platform (WTP) Eclipse Sybase Confidential Propriety. WorkSpace Service Framework Java Datastore COMPONENTS of the WAD IDE Web Application Development Perspective Creation wizards (application, page and resources) Web Page Designer (graphical editor) Tab-based Properties View Databinding View Resource Bundle Editor (tabular-based editor) Faces-config Editor (graphical editor…navigation rules) Web.xml Editor (form-based editor… Deployment to runtime container DataWindow Designer DataWindow Library Importer Sybase Confidential Propriety. WEB APPLICATION DEVELOPMENT PERSPECTIVE WorkSpace Navigation View Tree view of components in the application Editors view All editors will be displayed in this view Properties view Properties and attributes of each widget Databinding view Data and managed beans used by the page Service Explorer, Enterprise Explorer Service Explorer displays a tree view of available services Enterprise Explorer displays server connection profiles available Sybase Confidential Propriety. FEATURE SET : In the Interest of Time… Just One Sample Databinding View Resource Bundle Binding: use key to bind to UI component; Service Binding: generate managed bean to wrap service invocation; Java Class Binding: generate managed bean with getter/setter EJB Binding: generate bean to lookup ejbs and create bean instances Database Binding: support JSF DataWindow, or hibernate Sybase Confidential Propriety. Building JSF Web App Demo Sybase Confidential Propriety. JSF DataWindow Sybase Confidential Propriety. DATAWINDOW AND THE JSF TECHNOLOGY Java DataStore. A pure java package which provides the DataWindow functionality to the Java world. JSF DataWindow Component. A custom UI component written to fit the JSF model. DataWindow Java Bean. A Java Bean non-UI component written to fit the JSF model. JSF DataWindow tag library A tld file containing the attributes of the DataWindow for a JSP page. Sybase Confidential Propriety. DATAWINDOW AND THE JSF TECHNOLOGY DataWindow JSF tag library DataWindow JSF Component JSF Web Application DataWindow Bean FacesConfig.xml Sybase Confidential Propriety. Java Datastore JAVA DATASTORE INTERFACE Pure Java package. Distributed as jdatastore.jar. Non-visual Java Wrapper for DataWindow Server. Can be used by the Java programmer for non-UI DataWindow functionality. A JNI based interop layer to the DataWindow Server. The DataWindow Server. Java Datastore Sybase Confidential Propriety. JNI Interop Layer Marshalling and Event Handling Management DataWindow Server + Database Interface Layer + XML Support + PDF Support JAVA DATASTORE Sample Code Sybase Confidential Propriety. JSF DATAWINDOW IN DESIGN TIME The DataWindow object and DataWindow painter. Exposed as plugins in Eclipse environment. Maintained in pbl files. Imported as an Eclipse resource. Sybase Confidential Propriety. JSF DATAWINDOW IN DESIGN TIME JSF DataWindow designed using Sybase Web Application Development page designer. Drag and Drop from pallete. Sybase Confidential Propriety. JSF DATAWINDOW IN DESIGN TIME Drag and Drop DataWindow object from the navigator. JSF DataWindow design time properties. Sybase Confidential Propriety. JSF DATAWINDOW IN DESIGN TIME JSF DataWindow design time properties. dataWindowObject displayOnly enableDataCaching jndiDataSource libraryList objectLink onLoadHandler rendered rowsperPage Sybase Confidential Propriety. JSF DATAWINDOW IN DESIGN TIME Creating relationship between multiple JSF DataWindows in a MasterDetail type scenario. Add Text Sybase Confidential Propriety. JSF DATAWINDOW PROPERTIES,METHODS AND EVENTS The Rich DataWindow API is accesible through the JSF DataWindow. More than 100 methods are available. Categorized as Dynamic DataWindow creation function. Retrieve functions Search functions Get / Set functions Import / Export Functions Sybase Confidential Propriety. JSF DATAWINDOW PROPERTIES,METHODS AND EVENTS Access and Modify DataWindow object metadata at runtime. Use the describe and modify methods. Sybase Confidential Propriety. JSF DATAWINDOW PROPERTIES,METHODS AND EVENTS JSF DataWindow generated server events. RetrieveEvents (BeginRetrieve,EndRetrieve,RowRetrieved) UpdateEvents (BeginUpdate, EndUpdate) SqlPreview Events (SQLPreviewEvent) Print Events (BeginPrint,EndPrint,PrintPage) DWLoadedEvent JSF DataWindow server event listeners RetrieveListener UpdateListener SqlPreviewListener PrintListener DataWindowOnLoadListener Sybase Confidential Propriety. JSF DATAWINDOW PROPERTIES,METHODS AND EVENTS Sybase Confidential Propriety. JSF DATAWINDOW PROPERTIES,METHODS AND EVENTS JSF DataWindow client events. Sybase Confidential Propriety. JSF DATAWINDOW TRANSACTION MANAGEMENT JNDI datasource as the database connection information. Configure the JNDI datasource in the respective App Server. Use that JNDI name in the jndiDataSource property of the JSF DataWindow UI component. JNDI DataWindow JSF Component DataSource “jndiDataSource” tag Sybase Confidential Propriety. Extract JDBC connection from the DataSource Bind the Connection to a DataWindow Transaction object Database Connection JSF DATAWINDOW TRANSACTION MANAGEMENT Sharing of Transaction information among multiple JSF DataWindows on a page. The user can persist the Transaction information in a JSF “session variable” and share it between multiple DataWindows. This can be accomplished in the DWLoadedEvent Handler. Sybase Confidential Propriety. JSF DATAWINDOW TRANSACTION MANAGEMENT User Controlled Transaction Management. Manage the Transaction information through the DWLoadedEvent handler. Sybase Confidential Propriety. JSF Web DataWindow Demo Sybase Confidential Propriety. JSF Web DataWindow Q&A Sybase Confidential Propriety. PowerBuilder Application Server Plug-In Sybase Confidential Propriety. What is it? • A Deployment Tool that wraps PowerBuilder NVOs as EJB Session Beans (optionally as J2EE 1.4 Web Services) for deployment into a J2EE 1.3+ compliant application server. • A Server Runtime Library that integrates the PowerBuilder Virtual Machine with the EJB container and transaction and connection managers of the application server. • A Remote Debugging Component that permits debugging from the PowerBuilder IDE. • A Web DataWindow Component that permits browser-based clients to utilize DataWindow functionality. • A Proxy Server that permits PB clients to call deployed PB NVOs without the use of a client side Java virtual machine. Sybase Confidential Propriety. Architecture Diagram Developer Machine PowerBuilder IDE Application Server Web Container Server Machine (EJB Web Services) EJB Container PowerBuilder VM PB Components (EJB Session Beans) Web Clients Server Runtime Library Deployment Tool (JaguarCompiler) EJB Clients Remote Debugging Component Proxy Server PB Clients Web DataWindow Component Client Machine Sybase Confidential Propriety. Supported Application Servers • • • • JBoss 4.0 WebLogic 8.1 (9.0 at GA) WebSphere 6.0 Post-1.0 Geronimo 1.0 Oracle 10 (OC4J) • Others may work, but are not tested by Sybase and configuration instructions may vary from what we document. Sybase Confidential Propriety. Supported Operating Systems • Development environment Windows • Server runtime environment - same as the supported platforms for PBVM with Sybase EAServer. Windows Solaris AIX HP/UX Sybase Confidential Propriety. PowerBuilder IDE Integration • This deployment tool runs on your application server machine, and emulates the Sybase EAServer PB NVO deployment API. • To create a component (in PowerBuilder IDE) New -> Target -> EAServer Component, or New -> Project -> EAServer Component, or New -> Project -> EAServer Component Wizard • To deploy a component (in project painter) “Deploy Button”, or Design -> Deploy Project • No changes to PowerBuilder IDE are needed! Sort of… Sybase Confidential Propriety. Installation • The PB server plugin is installed on the application server host. • This does not need to be the same machine where the PowerBuilder IDE is running. • The PowerBuilder server VM (or full IDE for Windows) must also be separately installed on the application server host. Sybase Confidential Propriety. Development – Components • Develop components as if you were writing NVOs for deployment to Sybase EAServer. • Check the PowerBuilder documentation for general instructions. • The deployment tool will wrap your PB NVOs as standard EJB session beans. Target-specific deployment descriptors are generated to automate the binding of JNDI names and JDBC data source resource references. Sybase Confidential Propriety. Development – Data Access • PowerScript (in NVO source code): sqlca.dbms = “JDBC” sqlca.dbparm = “CacheName=’DefaultDS’” connect; // check error code ... // use embedded SQL or DataStore disconnect; // check error code • Use your application server’s facilities to define JDBC data sources and assign JNDI names to them. • The %PB_SERVER_HOME%/config/pb-server-XXX.xml can be edited to map PB “cache names” to JNDI names for JDBC Data Sources. This applies even when using native drivers. Sybase Confidential Propriety. Data Sources – ODBC • PowerScript (in NVO source code): sqlca.dbms = ‘ODBC’ sqlca.dbparm=“CacheName=’OdbcDS_JCM’” ... • When setting up your data source, use: JDBC driver class: com.sybase.jaguar.jcm.OdbcDriver Database URL: jcm:TBD;... • If you need XA (2 phase commit), use JDBC. • You don’t need to use the cache name OdbcDS_JCM. You can define custom cache names in config/pb-server-XXX.xml. Sybase Confidential Propriety. Development – Data Types This table shows the mapping of PB data types to Java data types that is applied when an NVO package is wrapped as an EJB module. Sybase Confidential Propriety. PowerBuilder type Java type Boolean boolean Char char Integer, UnsignedInteger short Long, UnsignedLong int LongLong long Real float Double double Decimal java.math.BigDecimal Blob byte String java.lang.String Date java.sql.Date Time java.sql.Time DateTime java.sql.Timestamp ResultSet java.sql.ResultSet NVO Class EJB remote and home interfaces Array Type Java array Structure Type Java class with public fields Development – Array Results • PowerBuilder does not permit methods to directly return arrays. • To return an array, embed it inside a PB structure type. • PB structure types are mapped to Java classes with public instance fields. Sybase Confidential Propriety. Development - DataStore • The PB DataStore type, in combination with the ResultSet return type, is particularly useful for PB NVOs running in an application server. • For improved performance, use PB NVO instance variables and create the DS and assign the “dataobject” in your NVO constructor. But check application server memory usage! Sybase Confidential Propriety. PB ErrorLogging Class • Writes to plugin log file. %PB_SERVER_HOME%\logs\pb-server.log • PowerScript Usage: ErrorLogging logger getContextService(“ErrorLogging”, logger) logger.log(“My Message”) Sybase Confidential Propriety. PB TransactionServer Class • Supported methods: CreateInstance, DisableCommit, EnableCommit, IsCallerInRole, IsTransactionAborted, SetAbort, SetComplete. • CreateInstance notes (for NVO to NVO inter-component calls): Use the two argument form and specify full JNDI name of target component, e.g. (error checking code omitted for brevity) TransactionServer ts getContextService(“TransactionServer”, ts) pbtest_MyComp comp // remember to generate and use proxies ts.createInstance(comp, “pbtest/MyComp”) // call methods on comp If the target NVO is not in the same EJB-JAR as the calling NVO, you might encounter issues with your application server’s class loader (e.g. ClassCastException). Sybase will NOT support NVO inter-component calls across EJB-JAR boundaries if you encounter class loader issues. Consult your application server vendor for assistance with class loader issues across EJB-JAR boundaries. Sybase Confidential Propriety. Development – EJB Clients • For EJB clients, use your application server’s facilities for EJB client access. • If your package is named “MyPackage”, and your component is named “MyComp”: The generated EJB home interface is named ejb.components.mypackage.MyCompHome The generated EJB remote interface is named ejb.components.mypackage.MyComp The Java package for home and remote interfaces can be overridden. See “Deployment – Java Packages”. The JNDI name is “MyPackage/MyComp”. Sybase Confidential Propriety. Development – PB Clients • PowerBuilder has built in facilities for calling EJBs in third party application servers. • Check the PowerBuilder documentation for the EJBConnection class and your application server documentation for general instructions. • Alternatively, we provide a proxy server to permit native IIOP communication (without client-side JVM) from PB clients to NVOs running in your EJB server. Sybase Confidential Propriety. Web DataWindow • Supports browser-based clients using XML, XHTML, HTML. See DataWindow Programmer's Guide. http://sybooks.sybase.com/onlinebooks/group-pb/pbg1000e/dwprgug • Note change - to configure (generate and deploy EJB-JAR): cd %PB_SERVER_HOME%\bin configure web-data-window • Note change - to instantiate (from JSF, JSP, servlet etc.): import com.sybase.pb.datawindow.*; … InitialContext nc = new InitialContext(); HtmlGenerator100Home home = (HtmlGenerator100Home)javax.rmi.PortableRemoteObject.narrow (nc.lookup(“DataWindow/HTMLGenerator100”), HTMLGenerator100Home.class); HTMLGenerator gen = home.create(); Sybase Confidential Propriety. Deployment – General • In the PB Project Painter, for your component project(s), use the “EAServer Host” tab in the “Project Properties” dialog: Host name: TCP host name for server machine Port - 9000 Login ID - admin@system Login password - (remember, you set it!) • You can override the host name and port number that the server uses for its deployment listener by changing the iiopListeners property in config/pb-server.xml. Sybase Confidential Propriety. Deployment – Web Services • Not generated by default. • In the Project Painter Properties dialog, General tab, use the Comments box to specify which components must be generated as webServices, e.g. javaPackage=“...”;webServices=“MyComp1,MyComp2”; • Remember the semicolon at the end of this entry. • Your application server must support J2EE 1.4. • The ResultSet return type is not supported for web services. Use array and structure types instead. • Don’t use the WebService tab, or the “wizard” option to expose a component as a web service. These are only for Sybase EAServer (with Web Services Toolkit). Sybase Confidential Propriety. Deployment – Naming Conventions • PowerScript identifiers with underscore are mapped to Java “camel case” for structure fields and NVO methods, e.g. “my_simple_method” maps to “mySimpleMethod”. • A leading capital is used for structure types e.g. “my_structure” maps to “MyStructure”. • Component names are not changed from what you specify in the Project Painter. We recommend using the Java class naming conventions (e.g. “MyComp”). • Your NVO implementation class can use any name. Sybase Confidential Propriety. Deployment – Validation Test • Using the PowerBuilder IDE, define a component with package name “pbtest” and component name “MyComp”. • Add some business methods of your choice. You might want to try some methods with database access. • Deploy to your application server. • Run the following commands: cd %PB_SERVER_HOME% bin/pb-server-test • The test program will try to call all methods of your component with “fake” parameter values (e.g. 1, 2, “S1”, S2”, …) • If you have a method named “perftest”, the test program will call it repeatedly to provide basic performance metrics. • Source code for the test client program can be found in src/java/com/sybase/pb/server/PbServerTest.java. Sybase Confidential Propriety. Remote Debugging • Use the “Start Remote” button in the PowerBuilder debugger to start a remote debugging session, as if debugging a component in Sybase EAServer. • Check the PowerBuilder documentation for detailed instructions. Sybase Confidential Propriety. Troubleshooting • PB application server plugin log: %PB_SERVER_HOME%\logs\pb-server.log • Your application server log file(s). • Your application server console window (if applicable). Sybase Confidential Propriety. Licensing, Pricing, Release… • • • • Licensing model: TBD Packaging: TBD Pricing: TBD Release date: August 2006 • PowerBuilder IDE Accomodating Enhancements Replacement of semicolon-delimited string in Comments field of General tabpage of Project Properties Post PowerBuilder 10.5 EBF Sybase Confidential Propriety. Sybase Tools Thank You Sybase Confidential Propriety.