Jakarta ee 如果我的代码在EJB bean中
我有一个奇怪的问题。使用EJBContext的内部方法代替我的方法 这是我的persistence.xml。我使用嵌入式derby作为本地数据库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" >&
<?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;
}
}