I'm not super familiar with OrientDB as I have just started developing with it. However, I have successfully used the OPartitionedDatabasePool. That should be thread safe and provide a way to get your connections. I think the OPartitionedDatabasePoolFactory is only used if you want to create multiple OPartitionedDatabasePool instances.
Also, I think ODatabaseRecordThreadLocal.INSTANCE.set(db) is no longer used in 2.1, only db.activateOnCurrentThread().
This is what I'm doing...
A static instance of OPartitionedDatabasePool:
OPartitionedDatabasePool myPool = new OPartitionedDatabasePool(dbUrl, user, password);
And then anytime a thread needs a connection:
ODatabaseDocumentTx dbConnection = MyClass.myPool .acquire();
That's it. The pool should automatically handle getting a database connection that will function on your thread. You should not have to worry about setting the "ThreadLocal" or activating on "CurrentThread".