there seems to be some confusion here. storage specific is phpcr or for example doctrine orm or possibly some custom storage layer. everything that is phpcr-odm is based on the phpcr api which is provided (among other options) by jackalope-doctrine-dbal and by jackalope-jackrabbit. when you develop against phpcr (resp. doctrine phpcr-odm) you should be able to switch phpcr implementations without problems, that is the point of having the phpcr interfaces to isolate application from storage layer.