I'm quit familiar with EJB/CMP but new to JBoss. I have a primary key class, which has two fields. When I use findByPrimaryKey(ProductPK key), I'm very curious how the key get translated into two fields and map to two columns in database table.
The key fields in your ProductPK are public and found via reflection by the container trying to find a match from the CMP fields you declared in your ejb-jar.xml. CMP fields are mapped per column as usual.