Feed aggregator

Post Lunch session -OSGI

Venkat Viswa - Sat, 2009-07-18 03:56
Lunch was extremely good and felt good after eating. Had only less though so as to keep in make.

Now the topic is on OSGI by Sameera Jayasoma . WSO2 is an open source company hased in Srilanka. Their main product is WSO2 carbon,Which is a fully componentized SOA platform based on OSGI. Then there was some PR on their company.

Modular Systems
Break large system into more smaller,understandable units called modules.Benefits of modular systems are reuse,abstraction,division of labour and ease of repair.

Module should be self contained,highly cohesive and loosely coupled.

Java for building Modular systems
--> provides class level modularity(public, non public methods)
--> we need somthing like external packages, internal packages in a jar

ClassLoader hierarchy : Bootstrap classloader (rt.jar) --> extension classloader (ext.jar) --> application classloader (a.jar,b.jar)

Problems with JARs

--> Jar is unit of deployment in Java and typical java app consists of set of jar files

--> no runtime representation for a JAR.

when java loads a class, it tries to load class one by one in the classpath.

--> multiple version of jar files cannot be loaded simultaneoulsy
--> Jar files cannot declare their dependencies on other jars

Java lacks true modularism and dynamism. Java has given flexibility to build system on top of it. This is called OSGI (dynamic module system for java)


--> Bundle is a unit of modularization of OSGi. OSGI app is a collection of Bundle.
Bundle is similar to jar and contains additional metada in Manifest.mf file. In osgi , java package is the unit of information hiding. unlike in jar when class is the
unit of information hiding.

--> bundle can share and hide packages from other bundles.

sample manifest.mf file

Bunle-Name :
Bundle-Version:1.0.0 (major,minor,micro version)

symbolic name and version are unique for a bundle. default value for version is 1.0.0
all packages in bundle are hidden from other bundle by default. if we need to share package explicitly mention the name.

Bundles & Class Loaders
OSGI gives separate classloaders per bundle,thereby eliminating hierarchial classloading in java

System bundle is a special bundle that represents the framework and registers system services

Tooling for osgi : eclipse pde is the best of the lot

osgi provides command line interface

ss -> lists all the bundles in the system

b/bundles - gives the list of informaiton about the bundle.export information.

b 0 --> gives system bundl information

export-hundle and import-bundle
require-bundle : import all exported packages from another bundle. but this is discouraged.

Issues with require bundle
Split packages,bundle changes over time,require bundles chain can occur.

fragment bundles : attached to a host bundle by the framework.Shares parent classloader.

runtime class loading in osgi: order of loadin

1) call parent clas loader (only for java.*)
2)imported packages
3)required bundles
4)load from its own internal classpath
5)Load from fragment classpath

Usage of fragment bundle 1) provide translation files to different locales

OSGI specifications --specifies framework and specificaions

osgi alliance

current version is 4.1

osgi can be considered as a layer on top of java.can also use jni to talk to OS. functionality of framework is deivided into several layers

1)module 2)lifecycle 3(

Lifecyce layer : manage lifecyle of api.
bundle starts --> installed,resolved,starting,active,stopping,uninstalled.

Register a service using bundle service using registerservice on bundlecontext

Using a service --> find a serviceReference,get the object,cast it to a proper type and use the service

Events and Listeners

framework fires serviceevents during registering a service,unregistering a service

services are dynamic. monitor services using service listeners,service trackers,declarative service,iPOJO and blueprint services.

Service Tracker

declarative service

SCR (service component runtime)

Powerful Reporting with BIRT

Venkat Viswa - Sat, 2009-07-18 00:18

This is the sesison that i hope to get the maximum benefits from especially since we have started using BIRT for our projects. The session is by Krishna Venktraman from Actuate, who is the director


--> Most applications have some kind of data visualization need. Real world applications don't consider reporting when they design the application. BIRT provides a framework that manages all the reporting requirements.

Traditional approach :

Buy closed source commercial products or build custom developed solution
With open source based products things become much easier.

Emergence of BIRT Project
BIRT was initiated in 2004 as a top level eclipse project. IBM,Innovent and Actuate are the key members.
Focus was BIRT was to make report development easy.Its open and standards based and provides for rich programmatic control. It has both simplicity and well as Power to create complex reports. BIRT supports of concept of reporting libraries that promotes reuse and reduces changes.

The main audience for BIRT was report developers,advanced report developers who use scripting, runtime integration developers who use birt viewer and engine apis, report design integrator who use design engine apis, extension developers who develop extention points and finally core development who do eclipse development itself.

There were five major releases since project launch with 1.0 ,2.0,2.1,2.2,2.3,2.5 as the versions. It was built from ground up and lot of community feedback was take into account

Key capabilities
--> Simple to complex layouts
--> Comprehensive data access
--> Output formats
--> Reuse and developer productivity
--> Interactivity and linking
--> Multiple usage and productivity aids

Some key features added in 2.x versions
--> ability to join datasets
--> enhanced chart activity
--> multiple master page support
--> Dynamic crosstab support
--> CSS files can be linked
--> Emitters for XLS,Word , PPT and Postscript
--> Webservices can act as datasource
--> Javascript/Java Debugger

BIRT design gallery : some of the displays llok really good.

High level BIRT acrhitecture

Two key components
1) Report Design Engine
2) Report runtime Engine

at the end of design process we get a .rptdesign. report engine then looks at the file, interprets it, fetches the data and goes about the generation process. we get an .rptdocument. Key services of report engine are generation services,data services,charting engine and presentation services.

BIRT exchange is a community site for posting all BIRT related issues.

a) Design Engine API b) Report Engine API c) Chart Engine API

Extension points
--> data source extensibility
--> custom business logic extensibility using scripting and acess java code
--> Visualization extensibility
--> Rendering content for output (emitters)

Deployment options

--> Commercial Report Server
--> J2EE Application server
--> Java application

Actuate provides Actuate BIRT report designer,BIRT report studio, BIRT Viewer,BIRT Interactive Viewer,deployment kits, iServer Express,iServer Enterprise.

Now for the actual report designs...

Just had an overview of the birt tool. Going through the series of demos on basic report, now basic charts, then crosstab/matrix report.

Book Marks and hyper links

Click the element and then pickup bookmark from properties . Now go to the place where you want to place hyperlink and link up the bookmark.

Limit what to display . You can limit at dataset level or at table level.

Sub Reports

Main Report --> Outer table
Sub Report --> nested table
Pass data value from outer table to nested table

In BIRT we need to nest tables in order to create sub reports.
Use Dataset parameter binding on the child set to get the data from parent dataset

BIRT Scripting

Mozilla Rhino script engine is embedded in BIRT.
Scripting = Expressions + Events
It users server side scripting. All the export options will get the same output.

Event Handling
Initialization Report level events (-initalize,-beforeFactory) --> Data source Open (-beforeOpen,-open) --> Data Set Generation (--beforeOpen,--open,fetch) --> Dataset Generation

Generation phase : Report level,datasource level, element level
Render : report level,element level

can implement powerful logic using scripting

Report Libaries
Just use export library by right clicking on the rptdesign file. Then click on use library and say use library.It has all the data sources, data sets and report items.
Library is a container of reporting items.
Can do local overrides on things imported from libraries

File --> New Template.Serves as starting points for speedy report development.
Display a visual image. then register this template with the new wizard.

Last piece was a demo on how to deploy the reports.

One big disappointment was i couldn't get any idea on how to integrate report engine and birt viewer with the custom applications.

On the whole it was a good session.

Keynote II

Venkat Viswa - Fri, 2009-07-17 23:53

Enhancing the developer productivity using RAD for websphere

--> Interesting the two main competitors give the keynotes one after the other

IBM Rational Architecture and construction
--> for solution,software and enterprise architects : Rational Data Architect,Rational Software modeler
--> for architects and designers who code in java,c++,xml --> Rational software architect Standard edition
--> Rational application developer --> for developers

IBM RAtional Applicaiton Developer for websphere

--> accelerates development
--> do even traceablity matrix
--> support for jpa and code generation

Comprehensive JEE5 tools

Unit testing is provided out of box
Visually layout JPA and EJB 3.0 classes
Convert UML to WSDL using RSA product
Provides excellent AJAX support

Enhanced support for Web 2.0
Declare POJOs and make it as REST service. Call Rest service as JSPs.
Javascript editor and debugger

JSF support
visual development of JSF pages
Data abstraction objects for easy data connectivity - SDO
Automatic code generation for data validation,formatting
Integration of third party JSF libraries

Portal development support is also excellent.

One of the very key features is to Automate performance and memory testing . This is built on top of eclipse TPTP.

Automates azpplication testing using WebSphere Application Server 6.0,6.1 and 7.0

IBMs strategy is to deliver high quality solutions by moving towards flexible architecture,automation layer,reduce onboarding

JAZZ platform : is meant for open community.

Mail id of the presenter is :bhrengen@in.ibm.com

Keynote address for the day

Venkat Viswa - Fri, 2009-07-17 23:52

First again a PR from SaltMarch :) .

The topic will be Plug-in to rapid development on Weblogic with Eclipse by Dhiraj Bandari

Dhiraj Bandari is as sales consultant from Oracle, moved on from BEA with the acquisition.

Oracle Enterprise Pack for Eclipse (OEPE) is a plugin that is really useful when we used weblogic application server integration. Provides the following features

--> Weblogic server (start,stop)
--> web services
--> spring
--. JSF + facelets
--> DB tools
--> ORM workbench

ORM workbench

--> creates the entity classes and helps to run all db functionalities
--> supports eclipselink,kodo,openjpa
--> has database schema broswer similar to TOAD

--> provides spring support

Tools for JAX-WS web services
--> New facets for weblogic web service development

Weblogic Server Tools
--> Run/deploy/debug locally or remotely
--> FastSwap ,shared libraries,Deployment plans
--> Migration support

Weblogic deployment descriptor editors

Oracle's strategy is to stop development on weblogic workshop. They will develop & enhance only JDeveloper and Enterprise pack for eclipse.

FastSwap Feature -- for iterative development

Traditional JEE Development cycle is Edit --> Build --> Deploy --> Test

Using Modern IDES it becomes Edit --> Deploy --> Test

FastSwap's goal is to eliminate the Deploy step Edit --> Test

FastSwap detects changes to class files,redfined changed classes,Non invasive and development mode only

Demo on FastSwap operation

How to enable fast swap feature --> go to weblogic application deployment descriptor and ebale fast swap. Then instant chagnes to ejb classes,web classes can be seen.

Day 2 live blogging - EclipseSummit India

Venkat Viswa - Fri, 2009-07-17 23:51
Participants are quiely settling in. Strength has considerably dwindled compared to yesterday. There was unexpected drizzle in Bangalore , causing me to get partly wet and making me feel miserable in an AC room.

Wireless Internet connection does not seem to work as expected :(. Hope to post all these one by one when i am back in the network.

Expectations for today
Today I am eagerly looking forward to attend BIRT workshop in the morning followed by a sumptuous lunch and then another workshop on OSGI.

Writing Non-ASCII Content into MQ

Ramkumar Menon - Fri, 2009-07-17 11:06

I had Arabic characters coming in from a partner webservice that I needed to write out to an MQ.
The default version was not writing out data into the MQ as expected - the Arabic data was being written out as a bunch of unreadable characters.
Following this, I followed the steps mentioned in the document http://download.oracle.com/docs/cd/E12524_01/relnotes.1013/e12523/adapters.htm#CHDDCAGA.
That did the trick!

JPA 2.0 New Features

Venkat Viswa - Fri, 2009-07-17 04:30
JPA 2.0 is releasing 2009 fall. (JSR 317)


--> Fil in ORM mapping gaps
--> Make object modeling more flexible
--> offer simple cache control abstraction
--> allow advanced locking settings
--> JPQL enhancements

More standardized properties
--> some properties are used by each and every driver

Persistent unit properties like javax.persistence.jdbc.driver, javax.persistence.jdbc.url

JPA 2.0 supports join table as well as f key relationships.
Collections of embeddables or basic values.

This is made possible using elementcollection annotation

order is maintained even if you move things around by using an index.

More Map flexibility
Map Keys and values can be : Basic objects,embeddables, entities

Enahcned embedded support
Embeddables can be nested and can have relationships

Access Type options
--> mix access modes in a hierarchy (field or properties)
@Access annotation

Derived Identities
JPA 1.0 relationship field cannot be part of the id

JPA 2.0 @Id + @OneToOne

Second Level Cache
API for operating on entity cache which is accessible from EntityManagerFactory
Supports only ver basic cache operations , which can be extended by vendors

@Cacheable annotation on entity (default is true)

There is also a property by the name shared-cache-mode to denote per PersistenceUnit whether to cache.
--no entities
--only cacheable entities
-- all entities

Properties cacheRetreiveMode and cacheStoreMode per EM method call whether to
read from cache

1.0 allows only for optimistic locking
2.0 provides for optimistinc locking by default
pessimistic locking can be used per entity or query

Lock mode values introducted
Optimistic (=READ)

API Additions
Lockmode parameter added to find,refresh
Properties parameter added tofind,refresh,lock
Other useful additions
void detach(Object entity)
Query API addition
Enhanced JP QL
Timestamp literals
Non-polymorphic queries
IN expression may include collection parameter --> IN (:param)
Ordered List indexing
CASE statement

Criteria API
Similar to eclipselink expressions,hibernate criteria
Criteria API - Canonical Metamodel
--> For every managed class , there is a metamodel class

Load State Detection
JPA can integrate with Bean validation (JSR 303) : Hibernate Validator is an implentation

JPA 2.0 shpped as part of Java EE6 release


Venkat Viswa - Fri, 2009-07-17 04:01
Back after a sumptuous lunch

Tool by Embarcadero technogies : http://www.embarcadero.com/products/j_optimizer/

Available standalone as well as eclipse plugin

--> Detecting excessive object allocation

--> memory leaks

--> detecting bottle necks

--> code coverage/code quality

--> thread debugging

--> Breakdown JEE requests

--> request analyzer

remotely connect and find which layer is causing problems. Can go into any level of detail.

code coverage

how to analyze and find out threading issues ?

--> Detecting deadlocks and visually analyze the deadlocks.


Patterns in eclipse

Venkat Viswa - Fri, 2009-07-17 01:57
Three rules of eclipse

plugin may not change screen,task and create objects unless user asks for it

1) User owns the screen

2) User owns the CPU

3) User owns the memory

--> Do not use singleton pattern.Memory allocation never goes away

Building the UI withoug loading plugins

Decoupling using adapters
--> dynamic implementation of an interface
--> class can be adapted to any interface
--> best example is the properties view

4) most of the items are implemented as services
Located,Scoped and Destroyed

5) Separation of concerns
same class should not do a,b,c,d,e
use handlers
6) scalable UI
browse instead of combo
filters instead of presenting a large set of info
always use group data in relevant sections
provide deselect /select all buttons
differentiate and place common buttons appropriately

Eclipse and Building Data Centric RIA

Venkat Viswa - Fri, 2009-07-17 00:50
Demo of portal type application using flex
Interactive charts --> looked really good with nice drilldowns

Rich Internet Applicaions
1) REal time data push
2) resizable
3) Rich Data entry
4) Chat
5) Data Synchronization
6) Audio and Video
7) Offline

Open Screen platform : Adbobe flash platform

clients --> AIR and flash player

Servers/services --> Blazeds,data services

Flex framework

tools to design and develop : flex builder

Understanding flex

written in mxml markup

flex sdk is free and opensources

flash builder : eclipse based professional IDE

benefits :

UI goes to client only once . after that only data changes..

Approach for Developing RIAs

Design focused
Data focused


Testing and Deployment


Model Driven development


1) Create a new project

2) Create a data model (fml file)

3) Deploy model to LCDS (Live cycle data services)

4) import fml file

5) create mxml and add datagrid.

6) Dnd datamodel to data grid

7) Run application.

Business logic can be written in custom assembler. Normal one is fiber assembler.

Even tomcat is fine. Internally fml creates java classes at runtime during startup.

Data Centric Development using Flash Builder

1) Define Service (CF,php,java,soap,rest)

2) Model Service (flash builder examines service, builds design-time model)

3) Bind Operations to Flex UI Components (data binding,UI generation,Paging,Data-management)

AMF : Action script messaging format used for sending and reciving data , more efficient than json and xml.

Testing and deployment

Network monitor
unit testing framework
Command line builds ( coming soon)

Demo of Ruby service plugin

Data Centric Development Extensibility

Extension points
Key interfaces and classes for custom service
Key interfaces and classes for componentConfigurator

Flash Catalyst

Imports photoshop files and analyzes it. Based on eclipse platform. takes mockups and creates flex application based on them. Generates flex code behind the scenes.

Wow.. thats too good

Require flash builder license and run time license for LCDS


Tour de flex : www.adobe.com/devnet/flex/tourdeflex/

EclipseLink : High Performance Persistence

Venkat Viswa - Thu, 2009-07-16 23:48
I have used eclipselink on one of the key projects lastyear. It was donated by Oracle to Eclipse foundation. Toplink became eclipselink. I was really impressed by its implementation of JPA and customizations such as Criteria Queries. Hoping to learn more from this session.

EclipseLink Architecture

Supports JavaSE,EE,OSGi and Spring

Eclipselink solution comprises JPA implentation,Moxy,EIS,SDO(service data objects),DBWS (database webservice --> want xml from relational data ).

--> supports JPA 1.0 with many advanced features
--> simplified configuration of using annotations and/or xml.
--> Best ORM for Oracle database

Tool Support
-->EclipseLink is a runtime project supported by IDEs.
-->Eclipselink supported by Dali
-->Oracle Jdeveloper 11g,Enterprise Pack for eclipse
--> Netbeans
--> Standalone workbench(Swing project)

Eclipselink distributions
--> Eclipse,Oracle toplink,weblogic,glassfish,spring framework,JOnAS

JPA persistence Provider(eclipselink) sits between Java SE/EE and rdbms

Core JPA Mappings

ID (primary key)
Basic (field mappings)

Mapping Annotations
Query hints
Advanced Mappings
Eclipselink orm.xml

Examples of Advanced Mappings
class level --> @Converter(name="",converterClass="")
field level --> @Convert(name="")

@PrivateOwned (coming in JPA 2.0) : doesnt exist without parent

Caching :

Optimistic locking :

Custom Data type conversions:

Query Framework

5 different ways

Entity Model : JPQL
Native : SQL
Stored Procedures

Customizations in queries
--> Locking,Cache usage
--> Optimizations (batching,joining)
--> Result shaping/conversions
--> Stored Proc support

SQL and Stored Procedure directly hit db.

For other 3 query framework is used. Checks for Cache hit,Cache result is used using Object builder)

Annotations for stored procedures
@NamedStoredProcedureQuery and @NamedStoredProcedureQueries

e.g. @NamedStoredProcedureQuery(name="",procedureName="",parameters={})

eclipselink.read-only : useful in read only screens

Lazy loading & Fetch Groups
Two fetch groups defined automatically --> eagerly loaded fields and lazily loaded fields.Enabled by byte code weaving

Create your own fetch groups and added to query as hint. Overrides default fetch groups.

Caching Advantage :

Shared L2 and persistence context caching
--> Entity cache and not data cache like ehacache that comes with hibernate

Cache Invalidation --> time to live,fixed times, programmable

Cache Coordination --> Messaging,Type specific configuration (invalidate,sync,sync + new,none)

Invalidate is the most used and cheapest one

Annotations for caching : @Cache,@TimeofDay,@ExistenceChecking

Concurrency Protection :
@OptimisticLocking : Numeric,Timestamp,All Fields,Selected fields,Changed field

Pessimistic locking : using hit eclipselink.pessimistic-lock

Dealing with DB Triggers

@ReturnInsert and @ReturnUpdate : efficiently reread modified data in Oracle db.

Change Tracking
@ChangeTracking annotation to configure the way changes to Entities are computed
Attribute level ,object level, deferred ,auto

Performance Options summary
--> ChangeTracking
--> Read only queries
--> parameter binding
--> joining
--> inheritance
--> concurrency
--> dynamic expressions

Moxy : Object XML Binding

JavaApp --> Objects --> EclipselinkOXM --> xml

Rich set of mappings provides complete control to map objects to any XSD.

Eclipselink JAXB2 Annotations , Moxy XML

twice as fast as sun ri and xml beans.

API steps
1) Create factory,context
2) Marshal and UnMarshal

SDO : Xml Centric

Wow.. too fast session .. but left me lots to explore in JPA.

Eclipselink 1.1.2 released as part of Galileo

Eclipselink 2.0 --> Fall 2009 ; implements JPA 2.0

DBWS : Generated JAX-WS from DB

Keynote address - Day 1

Venkat Viswa - Thu, 2009-07-16 23:06
First PR on Saltmarch going on :).

Sponsors : Platinum --> Oracle,IBM and Microsoft
Gold : Actuate,Adobe etc

Key note speaker will be Ramkumar Kothandaram from Microsoft

What is microsoft doing in an eclipse conference !!!

Topic will be interoperability.


--> Microsoft's approach to interoperability
--> Open source & Microsoft platform

Need for interoperability

We have diversified client applications (firefox,ms office,Open office , IE8) and server applications (Jboss,.NEt etc..) , storage(EMC2,netapp) , multiple databases, processors(intel,ibm,sun).

Customers buy heterogeneous hardware/sofware. Painful EAI projects used to take a long time. This resulted in interoperability evolution.

Microsofts approach to Interoperatbility

--> Products : All products natively interoperability
--> Colloboration : with Partners,competitors and open source community
--> Standards : Promote interoperability through new and existing standards
--> Developer resources : msdn,codeplex etc


All products like Windows Vista,.net ,Win server 2008,office 2007 support interoperability.

Can consume and expose webservice endpoints.


Apache stonehenge : Project to test for interoperability between various vendors.

MS part of interoperability alliance. Took leadership in webservices interop.


Participates in over 150 standards bodies

Developer Perspective

PHP on Windows --> PHP FastCGI on IIS

Seems that PHP on windows scales as fast as Apache ..

Then there was introduction to Microsoft Azure which is microsofts cloud computing platform.

Eclipse tools for sliverlight (eclipse4SL) : eclipse plugin for silverlight from soyatech. Looks good to me :). Can build RIA and embed in Html.

Java API for open XML : standard for storing documents. Create a document for server side. http://poi.apache.org

Links to remember


Codeplex : 80000 open source apps on MIcrosoft application.

On the whole it was a good eye opener on microsoft and its contribution to interoperability.

Live Blogging from Eclipse summit - Bangalore

Venkat Viswa - Thu, 2009-07-16 22:57
Here I am back again with live blogging from Eclipse summit Bangalore.

We are minutes away from launch and there seems to be a lot of Java/Eclipse lovers. The ballroom is really full.

The keynote address is set to begin

Connecting with Team Productivity Center

Susan Duncan - Thu, 2009-07-16 04:05
Well, it's been quite a couple of weeks. TPC was featured in the developer tools section of the Fusion Middleware 11g launch and got some good press coverage (for instance eWeek) and the bloggers were our in force. You can watch the launch and see Duncan Mills use TPC in his demo. He has also recorded an Oracle Videocast and Podcast introducing TPC.

My aim is to get as many users to download and use it as possible (actually, that is every Product Manager's aim for their product!) That is going well, but I could do with your help to get the news out there. The ALM repositories we integrate with currently are all leaders in their field. The JIRA integration is a great productivity booster and the more I work with JIRA the more I realise how flexible it is. Microsoft Project Server is widely used in enterprise organisations and Rally Software is a world leader in agile development.

We are working on additional connectors (more news on that when I can divulge more) but there is always room for more. I'd love to hear from you on what ALM repositories you would like to see TPC integrate with. I'd love to hear from you if you have an internal system you would like to write a connector to integrate it with TPC. In fact, I'd love to hear from you in any capacity concerning TPC - and that, of course, includes those of you who have reported bugs too ;-)

John Stegeman, an Oracle Ace Director, is interested in creating a connector to TRAC. He announced this with a JDeveloper forum post saying, " I've been thinking about writing a connector for an issue management system that I use (of course, there had to be a selfish reason), TRAC. I think an ideal way to do this would be with a small team of developers working together on the new sample code site hosted by Oracle (http://www.samplecode.oracle.com). "

I think this is a great idea. It would be about a month of effort and you would get the opportunity not only to get to know our connector framework but to work as part of a small team and gain experience to perhaps go on to creating a connector for something within your own organisation. You can contact John through the forum post. I would highly recommend it (well, I would, wouldn't I?)

So, download, use, report, connect, and code - yep, that about covers it!

2 members JHeadstart Team in Oracle Innovation Showcase

JHeadstart - Thu, 2009-07-16 00:07

We are honored that 2 of our JHeadstart Team members are included in the Conversations with Oracle Innovators of the Oracle Innovation Showcase.

Full credit to Steven, who is the driving power behind the JHeadstart innovations!

Categories: Development

When Reality Does Not Meet Hype: AT&T + iPhone Probably the Worst Customer Experience I've Ever Had

Ken Pulverman - Sat, 2009-07-11 15:33
I know we are all supposed to love these little slippery shiny plastic boxes specifically engineered to drop out of you hand, with batteries and memory that can't be upgraded giving you yet another reason to pay Apple more money.

I've resisted for some time. I was actually given one that I gave away without using it as it didn't have the features I use most often, notably MMS and Bluetooth Stereo. When the newest one launched, I did a bit of research online and decided I'd take the plunge despite my issues with its purposely designed obsolescence.

Unfortunately the experience of trying to get one ordered and working has probably been the worst consumer experience I have ever suffered through. The commercials make it look so easy, and I was actually looking forward to the experience. I had no idea how far from reality the actual consumer experience is.

When the 3Gs came out, I didn't try to rush out and get one. I waited a couple of weeks for the early hiccups to work themselves out and inventory to be replenished. I guess I didn't wait long enough.

About a week ago, I went to an AT&T store in the heart of the financial district of San Francisco. They didn't have any and directed me to the Apple store, but said that only a couple of people they sent there had been successful in getting one.

I decided to order one online through my company. The first order failed for some strange reason after I submitted it through the AT&T Premier site. After calling my bank to make sure I wasn't charged, I processed the order again. It launched a workflow inside my company that showed that service for the year would be almost $1,000. That really is a lot of money, but I use a cell phone a lot for work and also need to demo some of the applications the development group I work with has built for the iPhone.

The phone arrived on Friday. I've been an AT&T customer for many years so this was an upgrade. I was supposed to call a number to process the order. The recording told me that the automatic processing system was down. I waited on hold 30 minutes, and hour, and 30 minutes again and never got through. The last time, AT&T simply hung up. The next time I called they said the "Premier" support would not be open until Monday. One more call dumped me into a voicemail system. I gave up and decided to go to the Apple store.

A portly guy in a giant orange T-shirt with those oversized earings that permanently distort your ear lobes insists that to activate the phone, I just needed to plug it into iTunes. I knew this was rubbish so I pressed some more. "Oh activation, for that you need to go to the AT&T store. I don't know what their hours are though."

I trundle down to the AT&T Store and of course it is closed. I give up and decide I will return the next morning to see what they can do.

At the AT&T store, another forcefully insistent but clearly ignorant employee tells me I need to take the sim card out of my existing phone and put it in the new iPhone. He is adamant that there is no sim card in the new phone. I tell him that certainly AT&T ships a sim card in a phone they are upgrading. He pops it open and out drops a sim card. Having now splayed my phone open, he reassembles it and attempts to activate on his system. He then tells me this is a "Premier" account and thus he can't do anything. I ask him if he can return the phone. Yes, as it turns out, that is the one thing he can do and in this matter he actually seemed eager to help.

I left with my now 24 hour old brick resolving to give up until Monday for another hour or more on the phone.

It is very clear that this undynamic duo needs a little remedial marketing.....

EXPECTATION - Don't set the bar ridiculously high in your ads and commercials if your process is shit. Under promise and try to over deliver.

ALERT SALES - It's in excusable after 3 releases of the product that probably one of the most heavily trafficked Apple stores in the heart of San Francisco doesn't know the process for activating a phone or the hours of the AT&T Store.

SEGMENTATION - "Premier" should not mean an invitation to traipse around San Francisco or climb through the phone tree to get crapped on. I work at one of the largest companies in the world. We spend a lot on voice and data communications because these services are vital to our business. We do have choices though at the employee level and guess what we talk...and blog. We want our company to get good value and we want good service ourselves. It's not a surprise that Apple is blowing it in the corporate market, but AT&T? You should really be ashamed of yourselves. I suggest you work on making Premier actually Premier. And Apple, come on. Even if you think it is cool to ignore the corporate market, at least you could recognize that if the iPhone is the supposed gateway drug to your other products, and someone buys the most expensive version of that product, they probably expect a decent introduction to your world.

EAT HUMBLE PIE - At both stores I sensed a great degree of smugness. Employees who insisted they knew what they were doing when they didn't have a clue. It's very clear this partnership on its third try still has many issues. When I tell you I've been on hold for more than two hours don't brashly insist that you know how to fix my problem only to send me away with nothing. Perhaps this goes back to expectation, but you can't just hire a guy with a bone through his earlobe to show the world you are different you actually have to be different.

It's takes a lot for me to sprint home two miles from the center of San Francisco to crank out such a blog entry. I am way beyond irritated with the myriad of incompetent processes and people I have encountered at this point.

I can assure you, that the only thing that will keep me from talking about this pathetic display forever will be an act of service recovery befitting the crime of the time I've been forced to waste. Apple & AT&T, if someone in your headquarters is listening, unlike your employees in your stores, I plan to waste just one more hour on Monday trying to get this phone to work. After which I will take advantage of evidently the only thing you have collectively (and oddly) mastered - the process of giving my money back.

SQL*Plus, EZCONNECT, Password Prompt, and ORA-12504

Mark A. Williams - Sat, 2009-07-11 12:06
I use SQL*Plus a great deal and I find the "Easy Connect Naming Method" a convenient option.

Before you get any further in this post, let me be perfectly clear that this post only addresses ORA-12504 in the context of using the "Easy Connect Naming Method" with SQL*Plus and password prompting. It does not address ORA-12504 outside of this context. The documentation (see the link above) has several examples of using and configuring this method, so I won't go into them all here. This method is also known as "EZCONNECT" presumably because "Z" in the American dialect is pronounced like "zee" rather than "zed".

You are likely already familiar with the password prompting behavior of SQL*Plus. For example, when using a tnsnames.ora file alias to connect to a database, if the password is not specified, SQL*Plus will prompt you for it (i.e. "Enter password:"):

[oracle@liverpool ~]$ sqlplus hr@orademo

SQL*Plus: Release - Production on Sat Jul 11 11:42:08 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Enter password: 

Connected to:
Oracle Database 11g Enterprise Edition Release - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


Nice and easy.

So, let's try the equivalent using EZCONNECT:

[oracle@liverpool ~]$ sqlplus hr@liverpool:1521/DEMO

SQL*Plus: Release - Production on Sat Jul 11 11:43:20 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

Enter user-name: 

Hmm... well, that's interesting. Rather than getting prompted for the password we get an error (ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA) and then we get presented with the "Enter user-name:" prompt again. Funny that the error is saying the SERVICE_NAME was not specified, but it sure is there - DEMO in this case. This is giving us a clue though...

OK, so let's go ahead and specify the password:

[oracle@liverpool ~]$ sqlplus hr/hr@liverpool:1521/DEMO

SQL*Plus: Release - Production on Sat Jul 11 11:44:02 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


Much better, it works, but what if you (reasonably) don't want to specify the password on the command-line?

Taking a look at the documentation (really - that stuff does come in handy!) for the CONNECT SQL*Plus command we can see this:

username[/password] [@connect_identifier]

Pay particular attention that the "/" precedes the password. In the case of using EZCONNECT we have:

sqlplus hr@liverpool:1521/DEMO

So, in this case the "/" precedes the SERVICE_NAME and not the password. How should we tell SQL*Plus that the "/" is not preceding the password? We quote the connection string!

[oracle@liverpool ~]$ sqlplus hr@\"liverpool:1521/DEMO\"

SQL*Plus: Release - Production on Sat Jul 11 11:45:43 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Enter password: 

Connected to:
Oracle Database 11g Enterprise Edition Release - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


Now that's more like it! Notice that I used "\" (backslash) to escape the double-quote characters on the command-line (I'm using the bash shell for this).

If you are already in SQL*Plus you do not need to use the backslash to escape the double-quote characters:

[oracle@liverpool ~]$ sqlplus /nolog

SQL*Plus: Release - Production on Sat Jul 11 11:46:31 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

SQL> connect hr@"liverpool:1521/DEMO"
Enter password: 

This same technique can also be used for privileged connections:

[oracle@liverpool ~]$ sqlplus sys@\"liverpool:1521/DEMO\" as sysdba

SQL*Plus: Release - Production on Sat Jul 11 11:47:23 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Enter password: 

Connected to:
Oracle Database 11g Enterprise Edition Release - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


If you use SQL*Plus as much as I do, perhaps this will be a handy tip.

vi, Still Relevant

Tahiti Views - Thu, 2009-07-09 23:50
I thought this was a good summary of why vi (or more accurately vim) is still a good choice for editing today:Why, oh WHY, do those #?@! nutheads use vi?One trick I learned from this article that I hadn't known: keep the cursor on the same line, but position that line at the top, middle, or bottom of the script via 'zt', 'zz', and 'zb' respectively. I am always ending up with the cursor at the John Russellhttp://www.blogger.com/profile/17089970732272081637noreply@blogger.com5

Classic MetaLink vs. My Oracle Support

Jared Still - Thu, 2009-07-09 18:01
If you are in any way involved with supporting Oracle products, then you know that the death knell for Classic MetaLink has sounded. MetaLink will be unplugged at the end of July 2009.

The new support site, My Oracle Support, seems to be causing some pain for quite a few people in the Oracle user community.

Some of the complaints regard limited platform support due to the Adobe Flash 9 requirements, navigation and response times.

On the other hand there are some cool new features such as Power View, Configuration Manager and the new Advanced Search options.

How do you feel about it?

Here's a chance to let your opinion be know as a poll has been created where you can vote on it.

At this time 637 voters have voiced their opinion about MetaLink and My Oracle Support.

Current Poll results can be found in this Excel File: MetaLink vs My Oracle Support Results

Categories: DBA Blogs

Microsoft Deprecates OracleClient: Time to Consider Moving to ODP.NET

Christian Shay - Mon, 2009-07-06 22:52
Microsoft recently announced that it will deprecate Microsoft System.Data.OracleClient. For existing Microsoft OracleClient developers, especially those that haven't taken a look at the Oracle Data Provider for .NET (ODP.NET) in some time, this is a good time to look at ODP.NET again for new development or to migrate existing Oracle .NET applications. In recent years, ODP.NET has added lots of new features -- such as performance tuning, user-defined types, advanced queuing, RAC connection pooling, and supporting multiple ODP.NET client versions simultaneously on the same machine.

Alex Keh, who is the product manager for ODP.NET, has put together a special new webhome for developers using OracleClient...its called ODP.NET for Microsoft OracleClient Developers. This web page provides good information about why developers choose to migrate from ODP.NET from Microsoft OracleClient. Alex told me that the page will also provide a step-by-step Microsoft OracleClient to ODP.NET migration tutorial in the near future, which should be extremely useful. If you have questions about what this deprecation means for your company, please contact Alex over at alex.keh [at] oracle [dot] com or post to the ODP.NET Forum (OTN registration required).

In reading various comments on the MSDN post and elsewhere, I noticed a few misconceptions about ODP.NET that I would like to clarify:

Misconception: "This deprecation means I have to pay for an Oracle provider now!"
Fact: ODP.NET is free! You don't need to pay for a third party provider if you don't want to

Misconception: "I have to download a particular version of ODP.NET depending on the version of my database."
Fact: Any version of ODP.NET works with any version of Oracle Database. So you can use the latest version (currently and use it against a 9.2, 10, or 11g database!

Misconception: "I'll have to use the Oracle installer when I deploy my app. Argh!!!"
Fact: At deployment time, you don't have to use the Oracle installer to install ODP.NET if you don't want to. If you so choose you can write your own installer, using scripting or Installshield or whatever you want. All you need to do is download the XCOPY version of ODP.NET. As a bonus, it has a smaller footprint too!

Misconception: "If I need to standardize on/test different apps with different versions of ODP.NET I'm in big trouble!"
Fact:Multiple versions of ODP.NET can live on the same box and your application can target whatever specific one it was tested with. Not everyone has multiple apps that have been tested with different versions of ODP.NET but it happens.

Misconception: "I hit a bug in ODP.NET 9/ODP.NET 10! I can't use ODP.NET because of it!"
Fact: If you hit some nasty bug of some sort with ODP.NET 9 or even 10, make sure to download the 11.1 version and try it as the bug is likely fixed in the years that passed. Again, it does not matter what version of the database you are using, the 11g ODP.NET version will work against them all and over the years we have added tons of new features and bug fixes.

So again, please check out the ODP.NET for Microsoft OracleClient Developers webpage. I'll blog again when the migration step-by-step guide is posted there, so feel free to subscribe to my blog to get an alert when that happens!

Happy coding :)


Subscribe to Oracle FAQ aggregator