Hallo ich möchte ein Programm auf JavaEE Ebene programmieren. Hab mich mich mit einigen Bücher auseinandergesetzt und komme einfach nicht weiter.
1. Hab ich ein Objekt mit den Annotationen erstellt.
2. Es wurde ein (Remote) Interface und die dazugehörige Bean erstellt.
3. Eine Klasse zum Testen erstellt.
4. Eine JDBC Resource im Application Server erstellt (Glasfish). Als Pool wird der DerbyPool verwendet. jdbc/PersonDB
5. Es wurde eine persistence.xml im META-INF erstellt.
6. Es werden alle Klassen compiliert und mit der persistence.xml in eine jar gepackt. Diese wird dann in eine ear gepackt und in den autodeploy-folder kopiert.
Im Server.log ist keine Fehlermeldung.
[#|2008-06-21T19:17:51.342+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|[AutoDeploy] Selecting file C:\Sun\SDK\domains\domain1\autodeploy\person.ear for autodeployment.|#]
[#|2008-06-21T19:17:51.343+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|Autoundeploying application
erson|#]
[#|2008-06-21T19:17:51.428+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|[AutoDeploy] Successfully autoundeployed : C:\Sun\SDK\domains\domain1\autodeploy\person.ear.|#]
[#|2008-06-21T19:17:51.525+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|deployed with moduleid = person|#]
[#|2008-06-21T19:17:51.568+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|[AutoDeploy] Successfully autodeployed : C:\Sun\SDK\domains\domain1\autodeploy\person.ear.|#]
Beim Ausführen der main-Methoden kommt eine NamingException.
de.datenbanktest.bean.PersonDBManager
__SYSTEM : com.sun.enterprise.naming.TransientContext@2f1e75
jdbc : com.sun.enterprise.naming.TransientContext@4eeaaf
UserTransaction : com.sun.enterprise.distributedtx.UserTransactionImpl@19a37a
ejb : com.sun.enterprise.naming.TransientContext@135daf
--Bis hierhin ist die normale Ausgabe.---
Exception in thread "main" javax.naming.NameNotFoundException: de.datenbanktest.bean.PersonDBManager not found
at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
at com.sun.enterprise.naming.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:129)
at sun.reflect.GeneratedMethodAccessor829.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
Ich weiss einfach nicht warum. Bin echt am verzweifeln. Kann da einer helfen?
1. Hab ich ein Objekt mit den Annotationen erstellt.
Code:
package de.datenbanktest.bean;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="person")
public class Person {
private int id;
private String vorname, nachname;
protected Person(){
}
public Person(String nachname){
this.nachname = nachname;
}
public Person(String nachname, String vorname){
this.nachname = nachname;
this.vorname = vorname;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
public int getId() {
return id;
}
protected void setId(int id) {
this.id = id;
}
@Column(name="vorname", length=50)
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
@Column(name="nachname", nullable=false, length=50)
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
}
2. Es wurde ein (Remote) Interface und die dazugehörige Bean erstellt.
Code:
package de.datenbanktest.bean;
import javax.ejb.Remote;
@Remote
public interface PersonDBManager {
public abstract Person create(String nachname, String vorname);
public abstract Person getByName(String name);
}
Code:
package de.datenbanktest.bean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
public class PersonDBManagerBean implements PersonDBManager {
@PersistenceContext(name="person")
EntityManager em;
@Override
public Person create(String nachname, String vorname) {
Person p = new Person();
p.setNachname(nachname);
p.setVorname(vorname);
System.out.println(p.getNachname());
System.out.println(p.getVorname());
em.persist(p);
return p;
}
@Override
public Person getByName(String name) {
Person p = null;
Query q = em.createNamedQuery("Select t from Peron t where nachname=:n");
q.setParameter("n", name);
p = (Person) q.getResultList().get(0);
return p;
}
}
3. Eine Klasse zum Testen erstellt.
Code:
package de.datenbanktest.bean;
import javax.naming.Binding;
import javax.naming.InitialContext;
import javax.naming.NamingEnumeration;
public class Ausführung {
public static void main(String[] args) throws Exception{
String jndiName = PersonDBManager.class.getName();
InitialContext ctx = new InitialContext();
System.out.println(jndiName);
NamingEnumeration<Binding> list = ctx.listBindings("");
while(list.hasMore()){
Binding binding = list.next();
System.out.println(binding.getName() + " : " + binding.getObject());
}
PersonDBManager remote = (PersonDBManager) ctx.lookup(jndiName);
remote.create("Name", "Vorname");
}
}
4. Eine JDBC Resource im Application Server erstellt (Glasfish). Als Pool wird der DerbyPool verwendet. jdbc/PersonDB
5. Es wurde eine persistence.xml im META-INF erstellt.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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" version="1.0">
<persistence-unit name="person" transaction-type="JTA">
<jta-data-source>jdbc/PersonDB</jta-data-source>
<properties>
<!--
see http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-extensions.html#Java2DBSchemaGen
-->
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
<!-- <property name="toplink.ddl-generation.output-mode" value="both"/> --> <!-- sql-script -->
</properties>
</persistence-unit>
</persistence>
6. Es werden alle Klassen compiliert und mit der persistence.xml in eine jar gepackt. Diese wird dann in eine ear gepackt und in den autodeploy-folder kopiert.
Im Server.log ist keine Fehlermeldung.
[#|2008-06-21T19:17:51.342+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|[AutoDeploy] Selecting file C:\Sun\SDK\domains\domain1\autodeploy\person.ear for autodeployment.|#]
[#|2008-06-21T19:17:51.343+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|Autoundeploying application

[#|2008-06-21T19:17:51.428+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|[AutoDeploy] Successfully autoundeployed : C:\Sun\SDK\domains\domain1\autodeploy\person.ear.|#]
[#|2008-06-21T19:17:51.525+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|deployed with moduleid = person|#]
[#|2008-06-21T19:17:51.568+0200|INFO|sun-appserver9.1|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Timer-9;|[AutoDeploy] Successfully autodeployed : C:\Sun\SDK\domains\domain1\autodeploy\person.ear.|#]
Beim Ausführen der main-Methoden kommt eine NamingException.
de.datenbanktest.bean.PersonDBManager
__SYSTEM : com.sun.enterprise.naming.TransientContext@2f1e75
jdbc : com.sun.enterprise.naming.TransientContext@4eeaaf
UserTransaction : com.sun.enterprise.distributedtx.UserTransactionImpl@19a37a
ejb : com.sun.enterprise.naming.TransientContext@135daf
--Bis hierhin ist die normale Ausgabe.---
Exception in thread "main" javax.naming.NameNotFoundException: de.datenbanktest.bean.PersonDBManager not found
at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
at com.sun.enterprise.naming.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:129)
at sun.reflect.GeneratedMethodAccessor829.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
Ich weiss einfach nicht warum. Bin echt am verzweifeln. Kann da einer helfen?