Hi und danke dir für deine Antwort.
Prinzipiell habe ich das Konzept mit den Entity- und Session-Beans schon verstanden und das erste Beispiel lokal auch zum Laufen bekommen. (mit dieser HSQLDB).
Mein aktuelles Problem ist, dass ich eine existierende MaxDB ansprechen muss und die Beans auf einen JBoss deployt werden sollen. Ich habe dazu eine Entity-Bean für die Tabelle angelegt die wie folgt aussieht.
Code:
package de.fhzw.portal.bean;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name="fv_firma")
@SequenceGenerator(name="fv_firma_sequence" , sequenceName="sq_fv_firma")
@NamedQuery(name = "FvFirma.findAll", query = "select o from FvFirma o")
public class FvFirma implements Serializable {
private Integer fid;
private String fname;
private String str;
private String stadtname;
protected FvFirma() {
super();
}
public FvFirma(Integer fid, String fname, String str, String stadtname) {
super();
this.fid = fid;
this.fname = fname;
this.str = str;
this.stadtname = stadtname;
}
@Override
public String toString() {
return "FvFirma: " +getFid() + " Name: " + getFname() + " Straße: " +getStr() +
" Stadt: " +getStadtname();
}
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "fv_firma_sequence")
public Integer getFid() {
return fid;
}
public void setFid(Integer fid) {
this.fid = fid;
}
@Column
public void setFname(String fname) {
this.fname = fname;
}
public String getFname() {
return fname;
}
@Column
public void setStr(String str) {
this.str = str;
}
public String getStr() {
return str;
}
@Column
public void setStadtname(String stadtname) {
this.stadtname = stadtname;
}
public String getStadtname() {
return stadtname;
}
}
Desweiteren habe ich für die Stateless Session Bean 2 Interfaces für lokal und remote sowie die dazugehörende Klasse erstellt
Code:
@Stateless
public class FvFirmaTestbean implements FvFirmaTestbeanLocal,
FvFirmaTestbeanRemote {
@PersistenceContext
EntityManager em;
public static final String RemoteJNDIName = FvFirmaTestbean.class.getSimpleName() + "/remote";
public static final String LocalJNDIName = FvFirmaTestbean.class.getSimpleName() + "/local";
public void test() {
System.out.println("A list of some companies");
List someCompanies = em.createQuery("from Fv_Firma f where f.stadtname=:stadt").setParameter("stadt", "Hamburg").getResultList();
for(Iterator it = someCompanies.iterator(); it.hasNext();){
FvFirma element = (FvFirma) it.next();
System.out.println(element);
}
System.out.println("A list of all companies");
List allCompanies = em.createQuery("from Fv_Firma").getResultList();
for(Iterator it = allCompanies.iterator(); it.hasNext();) {
FvFirma element = (FvFirma) it.next();
}
}
}
Der Client soll nix anderes machen, als über Remote die Methode "test()" aufzurufen
Code:
public class FvFirmaClient {
public static void main(String[] args) {
Context context;
try {
context = new InitialContext();
FvFirmaTestbeanRemote beanRemote = (FvFirmaTestbeanRemote) context.lookup(FvFirmaTestbean.RemoteJNDIName);
beanRemote.test();
}
catch(NamingException e) {
e.printStackTrace();
}
}
}
Zuguter Letzt habe die Beans auf den JBoss deployt (und der hat nicht mal gemeckert, welch Wunder ;-) ) Wenn ich nun aber den Client ausführe kommt folgende Exception
javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: org.jboss.ejb3.JBossProxy (no security manager: RMI class loader disabled)]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at de.fhzw.portal.client.FvFirmaClient.main(FvFirmaClient.java:19)
Caused by: java.lang.ClassNotFoundException: org.jboss.ejb3.JBossProxy (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:531)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
at java.i

bjectInputStream.readProxyDesc(ObjectInputStream.java:1494)
at java.i

bjectInputStream.readClassDesc(ObjectInputStream.java:1457)
at java.i

bjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
at java.i

bjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.i

bjectInputStream.readObject(ObjectInputStream.java:339)
at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
at org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:72)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:652)
Hat jemand nen Plan, was ich da schon wieder falsch mache?
Danke schon mal vorab
Cullen