persistent.xml 文件配置:
<persistence-unit name="test" transaction-type="JTA">
   <jta-data-source>java:/mysqlDS</jta-data-source>
   <class>entity.Person</class>
   <exclude-unlisted-classes>true</exclude-unlisted-classes>
   <properties> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.show_sql" value="true" />
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties> 
</persistence-unit>

<persistence-unit name="test1" transaction-type="JTA">
   <jta-data-source>java:/mysqlDS1</jta-data-source>
   <class>entity.Group</class>
   <exclude-unlisted-classes>true</exclude-unlisted-classes>
   <properties> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.show_sql" value="true" />
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties> 
</persistence-unit>  PersonDAOImpl类:
 import java.util.Date;
import java.util.List;import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import entity.Group;
import entity.Person;
@Stateless(name="personBean")
@Remote
public class PersonDAOImpl implements PersonDAO { @PersistenceContext(unitName="test")
private EntityManager em;

@PersistenceContext(unitName="test1")
private EntityManager em1;

public void testjta() throws Exception {
Person p=new Person();
p.setUsername("张三");
p.setAge(22);
p.setBirthday(new Date());
p.setAddress("武汉");
em.persist(p);

Group group=new Group();
group.setName("李四");
em1.persist(group);
}}ejbweb工程调用: <%
        Context context=new InitialContext();
       PersonDAO personDAO=(PersonDAO)context.lookup("personBean/remote");
         personDAO.testjta();
       %>ejbweb工程调用ejb的时候报错 
执行em1.persist(group) 出错..
javax.transaction.SystemException:
java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: a1c2a56:b54:4d5b28bb:6f status: ActionStatus.ABORT_ONLY >

解决方案 »

  1.   

    你用的 MySQL 创建库时是否采用了 InnoDB 引擎?只有这个引擎才能支持事务,如果你用 MyISAM 的话就不支持事务了。
      

  2.   

    我使用的是jboss服务器 .innoDB  MYISAM 是神马东东。
      

  3.   

    就是MYSQL有InnoDB和Myisam两种类型,
    InnoDB支持事务,而默认MYISAM是不支持的。你可以照着火龙果说的,看看以InnoDB类型建表看看。
    具体两者的差别,你百度一下就知道了。我在这也学习了
      

  4.   

    我查看了表结构,我建的表默认的引擎是engine=InnoDB
      

  5.   

    你em没问题?
    只是em1不对?如果你只保留em1的话,可以吗?
      

  6.   

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void testjta() throws Exception {试试