EJB 3 + Persistence Beans + JBoss 4.2.0, Error beim Deployment

F5erl

Grünschnabel
Moin Moin,

ich bin recht neu in J2EE Umfeld, habe bereits viele Foren durchsucht und komme einfach nicht mehr weiter ich hoffe es kann mir einer helfen.

Ich fange mal was ich bisher gemacht habe.:
  • JBoss Application Server 4.2.0 installiert
  • MS SLQ Server 2005 installiert und DB (Carrental) erstellt
  • Eclipse 3.3.1.1 bei DataSourceExplorer die DB hinzegefügt (wird erkannt und kann erfolgreich einen Ping senden) und den JBoss Server hinzugefügt


Ich musste mir auch viele Libraries sprich die ganzen .jar files zurecht suchen wie z.B.

  • ejb3-persistence.jar
  • ejb-3_0-api.jar
  • jbossws-spi.jar

diese habe ich im "Java Build Path" hinzugefügt.


Des weiteren habe ich folgende Files erstellt:

IStuffFunctionality.java

Code:
package carrental.Beans;

import java.util.Date;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style = Style.RPC)
public interface IStaffFunction {
	
	
	@WebMethod 
	public boolean addCustomer(@WebParam(name = "FirstName") String FirstName, 
							@WebParam(name = "LastName") String LastName, 
							@WebParam(name = "Street") String Street,
							@WebParam(name = "HouseNr") int HouseNr, 
							@WebParam(name = "Zip") int Zip, 
							@WebParam(name = "City") String City, 
							@WebParam(name = "Birthday") Date Birthday, 
							@WebParam(name = "Driverlicense") int Driverlicense);

}


Die StaffFuntionality.java Bean
Code:
package carrental.Beans;

import java.util.Date;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;

import org.jboss.wsf.spi.annotation.WebContext;

import carrental.Entities.Customer;

@WebService(endpointInterface= "StaffFunctionality", targetNamespace="urn:StaffFunctionality")
@WebContext(contextRoot="/CarRental", secureWSDLAccess=false) 
@Stateless(name="StaffFunctionality")
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.ENCODED, parameterStyle = ParameterStyle.BARE)
public class StaffFunction implements IStaffFunction {

	@PersistenceContext(unitName="Rental")	private EntityManagerFactory emf;
	
	@Resource(name="Customer") Customer customer = new Customer();
	
	@WebMethod (operationName = "addCustomer")
	@WebResult(name = "allreadyOK")
	public boolean addCustomer(@WebParam(name = "FirstName") String FirstName, 
							@WebParam(name = "LastName") String LastName, 
							@WebParam(name = "Street") String Street,
							@WebParam(name = "HouseNr") int HouseNr, 
							@WebParam(name = "Zip") int Zip, 
							@WebParam(name = "City") String City, 
							@WebParam(name = "Birthday") Date Birthday, 
							@WebParam(name = "Driverlicense") int Driverlicense) {
		
		
		try {
			EntityManager em = emf.createEntityManager();
			em.persist(customer);
			
			return true;
		} catch (Exception e) {
			return false;
		}
		
		
	}

}

Die Customer.java Persistence Bean
Code:
package carrental.Entities;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.PersistenceUnit;
import javax.persistence.Table;


@Entity(name="Customer")
@Table(name="Customer")
@PersistenceUnit(unitName="Customer")
public class Customer implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5444756778400696524L;
	protected int CustomerID;
	private String FirstName;
	private String LastName;
	private String Street;
	private int HouseNr;
	private int Zip;
	private String City;
	private Date Birthday;
	private int DriverlicensNr;
	
	@Id 
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="CustomerID")
	public int getCustomerID() {
		return CustomerID;
	}
	public void setCustomerID(int customerID) {
		CustomerID = customerID;
	}
	
	@Column(name="FirstName")
	public String getFirstName() {
		return FirstName;
	}
	public void setFirstName(String firstName) {
		FirstName = firstName;
	}
	@Column(name="LastName")
	public String getLastName() {
		return LastName;
	}
	public void setLastName(String lastName) {
		LastName = lastName;
	}
	@Column(name="Street")
	public String getStreet() {
		return Street;
	}
	public void setStreet(String street) {
		Street = street;
	}
	@Column(name="HouseNr")
	public int getHouseNr() {
		return HouseNr;
	}
	public void setHouseNr(int houseNr) {
		HouseNr = houseNr;
	}
	@Column(name="Zip")
	public int getZip() {
		return Zip;
	}
	public void setZip(int zip) {
		Zip = zip;
	}
	@Column(name="City")
	public String getCity() {
		return City;
	}
	public void setCity(String city) {
		City = city;
	}
	@Column(name="Birthday")
	public Date getBirthday() {
		return Birthday;
	}
	public void setBirthday(Date birthday) {
		Birthday = birthday;
	}
	@Column(name="DriverlicenseNr")
	public int getDriverlicensNr() {
		return DriverlicensNr;
	}
	public void setDriverlicensNr(int driverlicensNr) {
		DriverlicensNr = driverlicensNr;
	}

}

Und zur guter letzt habe ich die persistence.xml in den META-INF Ordner des Projektes hinzugefügt
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="Carrental">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/Carrental</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
         <property name="hibernate.hbm2ddl.auto" value="read-write" />
         <property name="hibernate.hbm2ddl.auto" value="update" />
      </properties>
   </persistence-unit>
</persistence>

So wie ich das verstanden habe müsste der OR Mapper die Persisence Bean auf die DB übertragen und eine Tabelle erstellen, dies ist aber nicht der Fall die DB ist bei mir leer. Hier ist der Auszug der ServerConsole:
Code:
15:05:55,921 ERROR [ServiceEndpointPublisher] Cannot obtain waURL for: Rental.jar
15:06:16,218 ERROR [ServiceEndpointDeployer] Cannot create service endpoint
org.jboss.ws.WSException: Cannot build meta data: StaffFunctionality
	at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.buildWebServiceMetaData(JAXWSWebServiceMetaDataBuilder.java:185)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSServerMetaDataBuilder.setupProviderOrWebService(JAXWSServerMetaDataBuilder.java:49)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderEJB3.buildMetaData(JAXWSMetaDataBuilderEJB3.java:77)
	at org.jboss.ws.core.server.ServiceEndpointDeployer.create(ServiceEndpointDeployer.java:92)
	at org.jboss.ws.integration.jboss42.DeployerInterceptor.createServiceEndpoint(DeployerInterceptor.java:127)
	at org.jboss.ws.integration.jboss42.DeployerInterceptorEJB.createServiceEndpoint(DeployerInterceptorEJB.java:43)
	at org.jboss.ws.integration.jboss42.DeployerInterceptor.create(DeployerInterceptor.java:78)
	at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.create(SubDeployerInterceptorSupport.java:180)
	at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:91)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy34.create(Unknown Source)
	at org.jboss.deployment.MainDeployer.create(MainDeployer.java:969)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:818)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
	at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy9.deploy(Unknown Source)
	at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
	at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
Caused by: java.lang.ClassNotFoundException: StaffFunctionality
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.processWebService(JAXWSWebServiceMetaDataBuilder.java:292)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.buildWebServiceMetaData(JAXWSWebServiceMetaDataBuilder.java:94)
	... 34 more
15:06:16,218 ERROR [ServiceEndpointPublisher] Cannot obtain waURL for: Rental.jar
15:06:16,218 ERROR [MainDeployer] Could not create deployment: file:/C:/jboss-4.2.0.GA/server/default/deploy/Rental.jar
org.jboss.deployment.DeploymentException: Cannot create service endpoint; - nested throwable: (org.jboss.ws.WSException: Cannot build meta data: StaffFunctionality)
	at org.jboss.deployment.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:53)
	at org.jboss.ws.integration.jboss42.DeployerInterceptor.create(DeployerInterceptor.java:83)
	at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.create(SubDeployerInterceptorSupport.java:180)
	at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:91)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy34.create(Unknown Source)
	at org.jboss.deployment.MainDeployer.create(MainDeployer.java:969)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:818)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
	at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy9.deploy(Unknown Source)
	at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
	at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
Caused by: org.jboss.ws.WSException: Cannot build meta data: StaffFunctionality
	at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.buildWebServiceMetaData(JAXWSWebServiceMetaDataBuilder.java:185)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSServerMetaDataBuilder.setupProviderOrWebService(JAXWSServerMetaDataBuilder.java:49)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderEJB3.buildMetaData(JAXWSMetaDataBuilderEJB3.java:77)
	at org.jboss.ws.core.server.ServiceEndpointDeployer.create(ServiceEndpointDeployer.java:92)
	at org.jboss.ws.integration.jboss42.DeployerInterceptor.createServiceEndpoint(DeployerInterceptor.java:127)
	at org.jboss.ws.integration.jboss42.DeployerInterceptorEJB.createServiceEndpoint(DeployerInterceptorEJB.java:43)
	at org.jboss.ws.integration.jboss42.DeployerInterceptor.create(DeployerInterceptor.java:78)
	... 28 more
Caused by: java.lang.ClassNotFoundException: StaffFunctionality
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.processWebService(JAXWSWebServiceMetaDataBuilder.java:292)
	at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.buildWebServiceMetaData(JAXWSWebServiceMetaDataBuilder.java:94)
	... 34 more

Habe ich irgendwo noch eine Einstellung vergessen oder an einer Stelle was Falsch gemacht? Bin über jede Hilfe sehr Dankbar.

Gruß Pawel
 
Die Exception sagt doch eindeutig, dass die Klasse StaffFunctionality nicht gefunden werden kann. Hm, woher kommt das wohl? Du deklarierst einen WebService mit dem endpointInterface StaffFunctionality. Dieses Interface gibt es aber nicht. Ich vermute, du willst die Stateless Bean referenzieren... das ist aber Quark. Du hast mit dem Attribut endpointInterface die Möglichkeit ein bestimmtes Interface per Webservice zu exportieren. In deinem Fall sollte das wohl "IStaffFunction" (hoch leben konsistente und sprechende Namen ;) ) heißen. Mit der DB hat die Exception allerdings nciht zu tun...

Gruß
Ollie
 
Zurück