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 - [email protected]
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.
Descargar

Title: Arial 28pt.