Glassfish 如何使EntityManager可注射?
我有以下代码: MonsterEJB.java:Glassfish 如何使EntityManager可注射?,glassfish,nosql,java-ee-6,code-injection,entitymanager,Glassfish,Nosql,Java Ee 6,Code Injection,Entitymanager,我有以下代码: MonsterEJB.java: package model; import java.util.List; import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.inject.Inject; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.EntityMan
package model;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
@Stateless
@LocalBean
@Named
public class MonsterEJB
{
@PersistenceUnit(unitName="mongo")
private EntityManager em;
@Inject
private Monster injectableMonster;
public MonsterEJB()
{
}
public void create()
{
em.getTransaction().begin();
Monster en = new Monster();
en.setDescription(injectableMonster.getDescription());
em.persist(en);
em.getTransaction().commit();
}
public List<Monster> getList()
{
Query query = em.createQuery("Select m from Monster m");
List<Monster> Monsters = query.getResultList();
return Monsters;
}
public void remove()
{
em.getTransaction().begin();
Monster en = em.find(Monster.class, injectableMonster.getId());
em.remove(en);
em.getTransaction().commit();
}
public void update()
{
em.getTransaction().begin();
Monster en = em.find(Monster.class, injectableMonster.getId());
en.setDescription(injectableMonster.getDescription());
em.getTransaction().commit();
}
}
package model;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.persistence.*;
import org.eclipse.persistence.nosql.annotations.*;
@Entity
@Named
@RequestScoped
@NoSql(dataFormat = DataFormatType.MAPPED)
public class Monster implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Field(name = "_id")
private String id;
@Version
private long version;
@Basic
private String description;
public Monster()
{
}
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
@Override
public String toString()
{
return "Monster [id=" + id + ", version=" + version + ", description="+ description;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="mongo" transaction-type="RESOURCE_LOCAL">
<class>model.Monster</class>
<properties>
<property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform"/>
<property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec"/>
<property name="eclipselink.nosql.property.mongo.port" value="27017"/>
<property name="eclipselink.nosql.property.mongo.host" value="localhost"/>
<property name="eclipselink.nosql.property.mongo.db" value="MonsterDatabase"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
persistence.xml:
package model;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
@Stateless
@LocalBean
@Named
public class MonsterEJB
{
@PersistenceUnit(unitName="mongo")
private EntityManager em;
@Inject
private Monster injectableMonster;
public MonsterEJB()
{
}
public void create()
{
em.getTransaction().begin();
Monster en = new Monster();
en.setDescription(injectableMonster.getDescription());
em.persist(en);
em.getTransaction().commit();
}
public List<Monster> getList()
{
Query query = em.createQuery("Select m from Monster m");
List<Monster> Monsters = query.getResultList();
return Monsters;
}
public void remove()
{
em.getTransaction().begin();
Monster en = em.find(Monster.class, injectableMonster.getId());
em.remove(en);
em.getTransaction().commit();
}
public void update()
{
em.getTransaction().begin();
Monster en = em.find(Monster.class, injectableMonster.getId());
en.setDescription(injectableMonster.getDescription());
em.getTransaction().commit();
}
}
package model;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.persistence.*;
import org.eclipse.persistence.nosql.annotations.*;
@Entity
@Named
@RequestScoped
@NoSql(dataFormat = DataFormatType.MAPPED)
public class Monster implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Field(name = "_id")
private String id;
@Version
private long version;
@Basic
private String description;
public Monster()
{
}
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
@Override
public String toString()
{
return "Monster [id=" + id + ", version=" + version + ", description="+ description;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="mongo" transaction-type="RESOURCE_LOCAL">
<class>model.Monster</class>
<properties>
<property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform"/>
<property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec"/>
<property name="eclipselink.nosql.property.mongo.port" value="27017"/>
<property name="eclipselink.nosql.property.mongo.host" value="localhost"/>
<property name="eclipselink.nosql.property.mongo.db" value="MonsterDatabase"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
问题:
如何让我的MonsterEJB.java使用NoSQL注入EntityManager?我不确定这是否正是导致异常的原因,但是您的
MonsterEJB
类同时被注释为@Named
和@Stateless
@Named
用于定义JSF管理Bean
,而@Stateless
用于enterprisejavabean
,它们是不同的东西
使用一个或另一个注释
此外,Monster
类同时被定义为:一个实体
,一个通过@命名
注释管理的bean,以及一个通过javax.enterprise.context.RequestScoped
注释管理的CDIBean。这也没有道理
我建议学习一些Java EE 6教程(如),以澄清这些概念。我不确定这是否正是您异常的原因,但是您的MonsterEJB
类同时被注释为@Named
和@Stateless
@Named
用于定义JSF管理Bean
,而@Stateless
用于enterprisejavabean
,它们是不同的东西
使用一个或另一个注释
此外,Monster
类同时被定义为:一个实体
,一个通过@命名
注释管理的bean,以及一个通过javax.enterprise.context.RequestScoped
注释管理的CDIBean。这也没有道理
我建议学习一些Java EE 6教程(比如)来澄清这些概念。尝试使用@PersistenceContext而不是@PersistenceUnit尝试使用@PersistenceContext而不是@PersistenceUnit那么Monster.Java和MonsterEJB应该如何正确注释呢?我在JavaEE6应用程序中使用java服务器面。给我的印象是,我需要它才能正常工作。在你学习了一个教程之后,你可以实现Adam Bien的博客中的这个,如果你想要更完整的东西,那么是一个使用JPA和其他Java EE 6功能的完整web应用程序……那么Monster.Java和MonsterEJB应该如何正确注释呢?我在JavaEE6应用程序中使用java服务器面。给我的印象是,我需要这个来正确工作。在你学习了一个教程之后,你可以实现Adam Bien的博客中的这个,如果你想要更完整的东西,那么是一个使用JPA和其他Java EE 6功能的完整web应用程序。。。