Jakarta ee 如果我的代码在EJB bean中

Jakarta ee 如果我的代码在EJB bean中,jakarta-ee,ejb,derby,dbcontext,embedded-database,Jakarta Ee,Ejb,Derby,Dbcontext,Embedded Database,我有一个奇怪的问题。使用EJBContext的内部方法代替我的方法 这是我的persistence.xml。我使用嵌入式derby作为本地数据库 <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <persistence-unit name="JFPersistenceUnit" >&

我有一个奇怪的问题。使用EJBContext的内部方法代替我的方法

这是我的persistence.xml。我使用嵌入式derby作为本地数据库

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="JFPersistenceUnit" ><!--transaction-type="JTA" —>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-jta-data-source>jdbc/javafiddle__pm</jta-data-source-->

    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>ru.javafiddle.jpa.entity.Access</class>
    <class>ru.javafiddle.jpa.entity.File</class>
    <class>ru.javafiddle.jpa.entity.Group</class>
    <class>ru.javafiddle.jpa.entity.Hash</class>
    <class>ru.javafiddle.jpa.entity.Library</class>
    <class>ru.javafiddle.jpa.entity.LibraryToProject</class>
    <class>ru.javafiddle.jpa.entity.Project</class>
    <class>ru.javafiddle.jpa.entity.User</class>
    <class>ru.javafiddle.jpa.entity.UserGroup</class>
    <class>ru.javafiddle.jpa.entity.Status</class>
    <class>ru.javafiddle.jpa.entity.Type</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:derby:/User/mac/simpledb;create=true"/>
        <property name="javax.persistence.jdbc.password" value="app"/>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
        <property name="javax.persistence.jdbc.user" value="app"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        <property name="hibernate.transaction.jta.platform"       value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform" />
    </properties>

</persistence-unit>

你能用
UserBean
类更新你的问题吗?@aribero,我已经添加了这个类,但在我看来,上下文或容器有问题。你是否使用glassfish embedded all作为依赖项?@aribero,是的,org.glassfish.main.extrasglassfish嵌入了所有4.1,您提到的行为只在调试时发生?通过命令行执行Maven构建工作正常吗?
import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import ru.javafiddle.core.ejb.UserBean;
import ru.javafiddle.jpa.entity.User;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
import javax.naming.NamingException;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class test {

    EJBContainer ejbContainer;
    Context context;

    @Before
    public void setUp() {
        Map<String, Object> properties = new HashMap<String, Object>();
        //properties.put(EJBContainer.MODULES, new File("target/classes");
        properties.put("org.glassfish.ejb.embedded.glassfish.installation.root",
            "/Users/mac/glassfish4/glassfish");
        ejbContainer = EJBContainer.createEJBContainer();
        System.out.println("Test EJBContainer is created");
        context = ejbContainer.getContext();
    }

    @After
    public void tearDown() {
        ejbContainer.close();
        System.out.println("Test EJBContainer is closed" );
    }

    @Test
    public void testUserOperations() {
        UserBean userBean = null;
        try {
            userBean = (UserBean) context.lookup("java:global/JavaFiddle-ejb/UserBean");
        } catch (NamingException ex) {
            System.out.println("Unable to initialize UserBean instance: " + ex);
        }
        Assert.assertNotNull(userBean);

       // User uu = userBean.register("Nastia", "Ruzh", "skotti", "aa", "12345",);
        User uu = userBean.register("Nastia", "Ruzh", "skotti", "aa", "12345");

       // User u = userBean.getUser("atsanda");

        //System.out.println(u.getFirstName());
    }
}
package ru.javafiddle.core.ejb;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.ws.rs.client.Entity;

import ru.javafiddle.jpa.entity.*;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 *
 * @author mac
 */
@Stateless
public class UserBean {

private static final int DEFAULT_USER_STATUS = 1;

@PersistenceContext(name = "JFPersistenceUnit")
EntityManager em;

public UserBean(){}

public User register(String firstName, String lastName, String nickname, String email, String passwordHash) {

    //search for registered class
    Status st = em.find(Status.class,DEFAULT_USER_STATUS);
    User user = new User();


    user.setFirstName(firstName);
    user.setLastName(lastName);
    user.setNickName(nickname);
    user.setEmail(email);
    user.setPasswordHash(passwordHash);

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();
    user.setRegistrationDate(dateFormat.format(date));

    //em.getTransaction().begin();
    em.persist(user);
 //       em.flush();
   // em.getTransaction().commit();

    User uBase = getUser(nickname);
    return uBase;

}

public User getUser(String nickName) {

    User user;

    try {
        user = (User)em.createQuery("SELECT u FROM User u WHERE u.nickName =:nickname")
                .setParameter("nickname", nickName)
                .getSingleResult();
    } catch (NoResultException noResult) {

        return null;
    }

    return user;

 }

 public User setUser(String nickName, String firstName, String lastName, String newNickName, String email, String passwordHash) {

    User user;

    try {
        user = (User)em.createQuery("SELECT p FROM User p WHERE p.nickName = :nickName")
                .setParameter("nickName", nickName)
                .getSingleResult();
    } catch (NoResultException noresult) {

        return null;
    }

   // user = this.setFields(user, firstName, lastName, newNickName, email, passwordHash);

    return user;

}


//we need to delete all entries from usergroup table too for this user
public User deleteUser(String nickName) {

    User user;

    user = (User)em.createQuery("SELECT p FROM User p WHERE p.nickName =:nickName")
            .setParameter("nickName", nickName)
            .getSingleResult();

    UserGroup u = (UserGroup)em.createQuery("SELECT u from UserGroup u WHERE u.userId=:userid")
                        .setParameter("userid", user.getUserId())
                        .getSingleResult();

   /* for(Iterator<UserGroup> i = u.iterator(); i.hasNext(); ) {
        UserGroup u1 = i.next();

        em.getTransaction().begin();
        em.remove(u1);
        em.getTransaction().commit();
    }*/


    em.getTransaction().begin();
    em.remove(user);
    em.getTransaction().commit();
    return user;

}


public List<String> getUserProjects(String nickName) {

//        List<String> hashes = new LinkedList<String>();
//        User user = (User)em.createQuery("SELECT u FROM User u WHERE  u.nickName=:nickname")
//                .setParameter("nickname", nickName)
//                .getSingleResult();
//        List<Group> groups = user.getGroups();
//
//        for (Group g:groups) {
//
//            List<Project> projects = group.getProjects();
//            for (Project p:projects) {
//                hashes.add(p.getHash().getHash());
//            }
//        }
//
//        return hashes;
    return null;
}


public User setFields(User user, String firstName, String lastName, String  newNickName, String email, String passwordHash) {

    if(!firstName.equals(""))
        user.setFirstName(firstName);
    if(!lastName.equals(""))
        user.setLastName(lastName);
    if(!newNickName.equals(""))
        user.setNickName(newNickName);
    if(!email.equals(""))
        user.setEmail(email);
    if(!passwordHash.equals(""))
        user.setPasswordHash(passwordHash);

    em.getTransaction().begin();
    em.persist(user);
    em.getTransaction().commit();

    return user;
}


}