Lucifer002
Grünschnabel
Hallo zusammen,
ich bin gerade dabei mich in EJB3 einzuarbeiten und irgendwie komme ich nicht voran.
Ich habe ein Stateless Session Bean welches mit @PersistenceContext einen EntityManager haben sollte, jedoch ist dieser immer leer und ich bekomme am Client eine NullPointerException
Das Interface
Die Beanklasse
meine application.xml
jboss-app.xml
persistence.xml
client
Das ganze ist bei mir in einer EAR-Datei, welche die janubis.server.jar beinhaltet. Verwenden tu ich jetzt den JBoss5.0.1GA - default
Ich komme absolut nicht drauf was es da haben sollte
Hoffe es weiß jemand Rat und schon mal vielen Dank!
LG Lucifer
ich bin gerade dabei mich in EJB3 einzuarbeiten und irgendwie komme ich nicht voran.
Ich habe ein Stateless Session Bean welches mit @PersistenceContext einen EntityManager haben sollte, jedoch ist dieser immer leer und ich bekomme am Client eine NullPointerException
Code:
11:59:16,336 INFO [EJBContainer] STARTED EJB: at.janubis.ServerBean ejbName: Server
11:59:16,368 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
janubis.Server - EJB3.x Default Remote Business Interface
janubis/Server/remote-at.janubis.Server - EJB3.x Remote Business Interface
11:59:16,415 INFO [SessionSpecContainer] Starting jboss.j2ee:ear=janubis.ear,jar=janubis.server.jar,name=UserCluster,se
rvice=EJB3
11:59:16,430 INFO [EJBContainer] STARTED EJB: at.janubis.bean.UserDAOBean ejbName: UserCluster
11:59:16,446 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
janubis.User - EJB3.x Default Remote Business Interface
janubis/UserCluster/remote-at.janubis.bean.UserDAO - EJB3.x Remote Business Interface
janubis/UserCluster/local - EJB3.x Default Local Business Interface
janubis/UserCluster/local-at.janubis.bean.UserDAOLocal - EJB3.x Local Business Interface
Das Interface
Code:
package at.janubis.bean;
import java.rmi.Remote;
import java.util.List;
import at.janubis.entity.User;
public interface UserDAO extends Remote
{
/** Removes this Cluster Instance */
public void close();
/** Store User */
public void store();
/** Cancel changes */
public void cancel();
/** Load User */
public User getUser(String name);
/** Load User */
public User getUser(long id);
/** Sets User Object */
public void setUser(User user);
/** Returns List of Users */
public List<User> getUsers();
/** Returns List of Users */
public List<User> getUsers(List<String> condition);
}
Die Beanklasse
Code:
package at.janubis.bean;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Remove;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NamedQuery;
import javax.persistence.PersistenceContext;
import at.janubis.EJBConstants;
import at.janubis.entity.User;
import at.janubis.util.Logging;
@Stateless(name=EJBConstants.USER_CLUSTER_NAME, mappedName="janubis.User")
@Remote(UserDAO.class)
@Local(UserDAOLocal.class)
//@Interceptors(UserDAOCallback.class)
@NamedQuery(name="User.findByName", query="SELECT u FROM User u WHERE u.name LIKE :name")
public class UserDAOBean implements UserDAO, UserDAOLocal, Serializable
{
private static final long serialVersionUID = -8723547684825655263L;
@PersistenceContext(name=EJBConstants.PERSISTENCE_CONTEXT_NAME)
// @PersistenceUnit(name=EJBConstants.PERSISTENCE_CONTEXT_NAME)
private EntityManager em;
@Resource private SessionContext sessionContext;
public UserDAOBean() {
super();
}
public void cancel() {
em.clear();
}
public void setEntityManager(EntityManager em){
Logging.getLogger(getClass()).info("Get EntityManager: "+em);
this.em = em;
}
public EntityManager getEnityManger(){
return em;
}
@Remove
public void close() {
Logging.getLogger(getClass()).info("REMOVE()");
cancel();
}
public User getUser(String name)
{
return (User)em.createNamedQuery("User.findByName").setParameter("name", name).getSingleResult();
}
public User getUser(long id)
{
return (User)em.find(User.class, id);
}
public List<User> getUsers() {
return (List<User>)em.createQuery("SELECT u FROM User u ").getResultList();
}
public List<User> getUsers(List<String> condition_) {
StringBuilder sb = new StringBuilder().append("SELECT u FROM User u WHERE u.id = > -1 ");
String[] condition = condition_.toArray(new String[]{});
for(String cond : condition){
sb.append("AND ").append(cond).append(" ");
}
return (List<User>)em.createQuery(sb.toString()).getResultList();
}
public void store() {
return;
}
public void setUser(User user) {
if(null != user)
em.merge(user);
}
}
meine application.xml
Code:
<application>
<display-name>EJB3 Ear janbuis</display-name>
<module>
<ejb>janubis.server.jar</ejb>
</module>
</application>
jboss-app.xml
Code:
<jboss-app>
<loader-repository>
janubis:archive=janubis.ear
</loader-repository>
</jboss-app>
persistence.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/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_1_0.xsd">
<persistence-unit name="janubis" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
</properties>
</persistence-unit>
</persistence>
client
Code:
package at.janubis.test;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import at.janubis.bean.UserDAO;
import at.janubis.entity.User;
import at.janubis.util.Logging;
public class Main
{
private static final Logging logging = Logging.getLogger(Main.class);
/**
* @param args
*/
public static void main(String[] args) throws Exception {
logging.info("Starting....");
if (System.getSecurityManager() == null) {
System.setSecurityManager(new java.rmi.RMISecurityManager());
}
Context ctx;
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","jnp://localhost:1099");
ctx = new InitialContext(properties);
UserDAO uc = null;
Object o = ctx.lookup("janubis.User");
System.out.println(o.getClass());
uc = (UserDAO)o; //PortableRemoteObject.narrow(o,UserDAO.class);
//Hier wird eine NullPointerException geworfen
//Caused by: java.lang.NullPointerException
// at at.janubis.bean.UserDAOBean.getUsers(UserDAOBean.java:69)
//
System.out.println(java.util.Arrays.toString(uc.getUsers().toArray()));
User u = new User();
u.setId(1);
u.setName("Matthias");
u.setDisplay("Matthe");
u.setPassword("hallo");
uc.setUser(u);
uc.store();
System.out.println(java.util.Arrays.toString(uc.getUsers().toArray()));
uc.close();
}
}
Das ganze ist bei mir in einer EAR-Datei, welche die janubis.server.jar beinhaltet. Verwenden tu ich jetzt den JBoss5.0.1GA - default
Ich komme absolut nicht drauf was es da haben sollte

Hoffe es weiß jemand Rat und schon mal vielen Dank!
LG Lucifer
Zuletzt bearbeitet: