CMT определяется декларативно с использованием аннотаций, которые оцениваются контейнером Java EE, которые затем обеспечивают прозрачную обработку транзакций. Pojos не управляется контейнером, поэтому CMT не может применяться.
Что касается вашего вопроса об объектах. Вы должны создать слой DAO, чтобы абстрагировать технические детали вашей логики персистентности. вы можете использовать одну общую реализацию dao для поддержки JPA. Это в основном единственная часть, которая должна быть разной для двух сред. В контейнере вы получите свои транзакции бесплатно, как указано в аннотации. Если вы работаете в стандартном java se, вы должны начинать/совершать/откатывать свои транзакции самостоятельно.
Я предлагаю вам создать общую реализацию dao, которая декларирует транзакции декларативно и ожидает выполнения внутри контейнера. Для использования в java se у вас есть декоратор для этого dao, который заботится о правильной обработке транзакций, чтобы подражать тому, что на самом деле сделал бы контейнер.
Я думаю, что вы на самом деле не нужно ничего менять в persistence.xml, но, может быть, я не прав здесь
Как сессионный компонент не может быть частью единицы сохранения? И что вы на самом деле имеете в виду? Только сущности beans являются частью единицы персистентности, не так ли? – bennidi
Также: тип транзакции RESOURCE_LOCAL/JTA отличается от CMT/BMT – bennidi
права, я смешал оба, поскольку я никогда не использовал ejb в одиночку, для меня JTA datasource и CMT собрались вместе, но, похоже, это не так cf. http://stackoverflow.com/questions/3217586/difference-between-a-jta-datasource-and-a-resource-local-datasource – Gab