# jar war ear



## inspector_71 (17. Aug 2007)

Also, ich habe verzweifelt versucht diverse Beispiele, so auch das shop example aus Kapitel 17 von MasteringEJB4thEd zu installieren, aber ich scheitere immer wieder.
Seit Tagen versuche ich nun eine eigens Beispiel zu erstellen mit JSP, Servlets, EJB, aber ich bekomm immer Exceptions beim Deployen..

Was ich so gelesen habe: JSP und Servlets ins war-File.
EJBs ins jar-File und dann beide ins ear-File und deployen.

Funktioniert aber nicht wirklich.

Wobei mir das auch nicht ganz klar ist ob ich bei den Packages die .class files oder die java-Files angeben muss, außerdem hab ich ein Person.java serializable und @Entity, also ist das doch eine ejb und kommt ins jar-file, oder?
Und UserManager ebenfalls denke ich, ist ein Interface für UserManagerBean...

BIn schon total fertig und am durchdrehen... 

Naja, wollte auch nur mal meinen Frust loswerden... 

Danke,
John


----------



## HLX (17. Aug 2007)

inspector_71 hat gesagt.:
			
		

> Wobei mir das auch nicht ganz klar ist ob ich bei den Packages die .class files oder die java-Files angeben muss


Java-Files sind irrelevant. Nur kompilierte Klassen zählen.

1. Ich nehme mal an du verwendest einen Server mit EJB-Container, z.B. JBoss.

2. Möglicherweise sind einige Deskriptoren noch  nicht korrekt. Versuch´s doch erstmal ohne das EAR. Du kannst
    auch JAR und WAR einzeln deployen. Wenn Fehler auftreten, welche?

JAR = Java Archive --> Archiv für Java-Anwendungen oder Module
WAR = Web Application Archiv --> Archiv für Java-Webanwendungen (u.a. Servlets, JPSs)
EAR = Enterprise Application Archive --> Für Java Enterprise Anwendungen, kann mehrere JARs (EJB-Module) und WARs enthalten


----------



## inspector_71 (17. Aug 2007)

sers hlx!

erstmal danke für deine antwort.

ich verwende jboss und die eclipse jboss ide.

will per jsp die seite anzeigen, per servlets steuern und die logik in beans realisieren. deswegen habe ich eine person.java geschrieben, die ident ist mit einer tabelle meiner db. und eine usermanager.java und eine usermanagerBEAN.java, so wie es im beispiel angegeben war.

eine application.xml, eine web.xml, eine persistance.xml

als fehler bekomme ich beim deployen des ear-files:

java.lang.NoClassDefFoundError: tutorial/logic/UserManager

vielen dank,
john


----------



## HLX (17. Aug 2007)

Ich nehme an, die fehlende Klasse hast DU geschrieben. Dann präsentiere mal deine 'ejb-jar.xml'.


----------



## Guest (17. Aug 2007)

Ja, klar, habe ich geschrieben... 

Das xml File kann ich leider erst abends posten, bin gerade unterwegs, jedenfalls danke für deine Hilfe!


----------



## Guest (17. Aug 2007)

Also, hier meine 'ejb-jar.xml':

Fibo ist eine Bean eines Beispiels...

Ich weiß nicht ob sich jemand jetzt auskennst, soll ich eventuell noch Anderes posten? Würde jede Hilfe annehmen....








<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar >

   <description><![CDATA[No Description.]]></description>
   <display-name>Generated by XDoclet</display-name>

   <enterprise-beans>


      <session >
         <description><![CDATA[Description for Fibo]]></description>
         <display-name>Name for Fibo</display-name>

         <ejb-name>Fibo</ejb-name>

         <home>tutorial.interfaces.FiboHome</home>
         <remote>tutorial.interfaces.Fibo</remote>
         <ejb-class>tutorial.ejb.FiboBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>

      </session>

     <!--
       To add session beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called session-beans.xml that contains
       the <session></session> markup for those beans.
     -->


     <!--
       To add entity beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called entity-beans.xml that contains
       the <entity></entity> markup for those beans.
     -->


     <!--
       To add message driven beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called message-driven-beans.xml that contains
       the <message-driven></message-driven> markup for those beans.
     -->

   </enterprise-beans>




     <!--
       To specify your own assembly descriptor info here, add a file to your
       XDoclet merge directory called assembly-descriptor.xml that contains
       the <assembly-descriptor></assembly-descriptor> markup.
     -->

   <assembly-descriptor >
     <!--
       To specify additional security-role elements, add a file in the merge
       directory called ejb-security-roles.xml that contains them.
     -->


     <!--
       To specify additional method-permission elements, add a file in the merge
       directory called ejb-method-permissions.ent that contains them.
     -->


     <!--
       To specify additional container-transaction elements, add a file in the merge
       directory called ejb-container-transactions.ent that contains them.
     -->




     <!--
       To specify additional message-destination elements, add a file in the merge
       directory called ejb-message-destinations.ent that contains them.
     -->


     <!--
       To specify an exclude-list element, add a file in the merge directory
       called ejb-exclude-list.xml that contains it.
     -->
   </assembly-descriptor>

</ejb-jar>


----------



## Guest (18. Aug 2007)

Hmm, habe jetzt die persistance.xml umgeschrieben, aber ich bekomme endlos viele Fehler beim deployen...

:-(


persistance.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="tutorial">    
        <jta-data-source>java:/MySqlDS</jta-data-source>	
       <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
       </properties>
    </persistence-unit>
</persistence> 

im UserManagerBean hab ich die unit angegeben

@PersistenceContext(unitName="tutorial")

Was weiß ich, kenn mich überhaupt nicht mehr aus...  

Fehler:

7:58:29,859 ERROR [URLDeploymentScanner] Incomplete Deployment listing:

--- Incompletely deployed packages ---
org.jboss.deployment.DeploymentInfo@c9e152ac { url=file:/F:/JAVA/jboss/server/default/deploy/testejb.jar }
  deployer: MBeanProxyExt[jboss.ejb3:service=EJB3Deployer]
  status: Deployment FAILED reason: Cannot create service endpoint; - nested throwable: (java.lang.IllegalStateException: Cannot build JAXB context)
  state: FAILED
  watch: file:/F:/JAVA/jboss/server/default/deploy/testejb.jar
  altDD: null
  lastDeployed: 1187450578140
  lastModified: 1187450578109
  mbeans:

org.jboss.deployment.DeploymentInfo@ca25e71c { url=file:/F:/JAVA/jboss/server/default/deploy/test.ear }
  deployer: org.jboss.deployment.EARDeployer@c58af4
  status: Deployment FAILED reason: Cannot create service endpoint; - nested throwable: (java.lang.IllegalStateException: Cannot build JAXB context)
  state: FAILED
  watch: file:/F:/JAVA/jboss/server/default/deploy/test.ear
  altDD: null
  lastDeployed: 1187450582125
  lastModified: 1187450581953
  mbeans:

org.jboss.deployment.DeploymentInfo@f9ebab80 { url=file:/F:/JAVA/jboss/server/default/deploy/shop.ear }
  deployer: org.jboss.deployment.EARDeployer@c58af4
  status: Deployment FAILED reason: Cannot create service endpoint; - nested throwable: (java.lang.IllegalStateException: Cannot build JAXB context)
  state: FAILED
  watch: file:/F:/JAVA/jboss/server/default/deploy/shop.ear
  altDD: null
  lastDeployed: 1187452257515
  lastModified: 1187452257406
  mbeans:

--- MBeans waiting for other MBeans ---
ObjectName: jboss.j2ee:ear=FiboApp.ear,jar=FiboEJB.jar,name=Fibo,service=EJB3
  State: FAILED
  Reason: java.lang.RuntimeException: An exception occurred initialising interceptors for class tutorial.ejb.FiboBean.getEJBHome

ObjectName: jboss.j2ee:ear=FiboApp.ear,jar=FiboEJB.jar,name=UserManagerBean,service=EJB3
  State: NOTYETINSTALLED
  I Depend On:
    persistence.units:unitName=tutorial

ObjectName: jboss.j2ee:jar=FiboEJB.jar,name=Fibo,service=EJB3
  State: FAILED
  Reason: java.lang.RuntimeException: An exception occurred initialising interceptors for class tutorial.ejb.FiboBean.getEJBHome

ObjectName: jboss.j2ee:jar=FiboEJB.jar,name=UserManagerBean,service=EJB3
  State: NOTYETINSTALLED
  I Depend On:
    persistence.units:unitName=tutorial

--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.j2ee:jar=FiboEJB.jar,name=Fibo,service=EJB3
  State: FAILED
  Reason: java.lang.RuntimeException: An exception occurred initialising interceptors for class tutorial.ejb.FiboBean.getEJBHome

ObjectName: persistence.units:unitName=tutorial
  State: NOTYETINSTALLED
  Depends On Me:
    jboss.j2ee:ear=FiboApp.ear,jar=FiboEJB.jar,name=UserManagerBean,service=EJB3
    jboss.j2ee:jar=FiboEJB.jar,name=UserManagerBean,service=EJB3

ObjectName: jboss.j2ee:ear=FiboApp.ear,jar=FiboEJB.jar,name=Fibo,service=EJB3
  State: FAILED
  Reason: java.lang.RuntimeException: An exception occurred initialising interceptors for class tutorial.ejb.FiboBean.getEJBHome

Kann mir jemand helfen, ich zahle auch gern eine Kiste Bier... :-D

John


----------



## Guest (19. Aug 2007)

hallo,

also mit einer persistaaaaaaaaaaaaaaaaaaaaaaaance.xml geht es sicher nicht  :wink:

anyway. ich empfehle dir mit netbeans und dem glassfish server anzufangen, anstatt mit eclipse und jboss. das zeug ist absolut idiotensicher... sorry dabei meine ich natürlich nicht dich. auf der netbeans seite findest du auch einige gute tutorials zu ide und jsf und ejb basics. ausserdem sind alle beispiele der jee5 tutorials von sun als netbeans projekte verfügbar.

nicht verzweifeln, aller anfang ist schwer 

greetz


----------



## HLX (20. Aug 2007)

Wenn UserManager ein Interface für eine UserManagerBean sein soll, warum ist dieses dann in keinem Deskriptor registriert?

Ich habe noch nicht mit EJB3 gearbeitet aber unter EJB2 wird das Interface in der ejb-jar.xml bekannt gemacht. 

Zunächst habe ich ja einen Schreibfehler in einer der XML-Dateien vermutet. Jetzt gehe ich davon aus, dass du die Klasse/das Interface UserManager an einer ungültigen Stelle referenzierst. Wenn du deine JSP-Dateien in ein WAR-Archiv packst und die Klasse UserManager in das EJB-JAR, dann kennen sich die beiden natürlich nicht, was ja im Sinne der Modularität auch gewollt ist. D.h. du darfst in keiner JSP-Datei oder Klasse im WAR-Archiv die Klasse UserManager aus dem JAR direkt referenzieren. Dafür gibt es extra einen Lookup (zumindest unter EJB2).


----------



## inspector_71 (20. Aug 2007)

Vielen Dank für die Antworten...

Also, ich habe JBoss gewählt weil ich einen damit Erfahrung sammeln möchte, da dieser auch in unserer Firma verwendet wird.

Habe nun nochmals begonnen, einfach mit einem Servlet und einer Jsp Seite, aber habe schon damit Probleme...



Fehler: Wrapper cannot find servlet class...

Gemeint ist das StartServlet

Das ist im Package: package test.web.servlet;


Meine web.xml:

...	<servlet>
		<servlet-name>StartServlet</servlet-name>
		<servlet-class>test.web.servlet.StartServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>StartServlet</servlet-name>
		<url-pattern>/index.html</url-pattern>
	</servlet-mapping>

...

Beim Packaging habe ich den bin/test/ Ordner angegeben und dann includes: /servlet/*.class

Irgendwie versteh ich das nicht, sollte doch funktionieren, oder?

Die JSP Seite habe ich auch ins war File integriert, nämlich mit includes: /jsp/*.*


----------



## HLX (20. Aug 2007)

Gib mal den bin-Ordner beim packen an.

Wenn du "bin/test" angibst, wird wahrscheinlich das Package "test" abgeschnitten und das Servlet in der Struktur "web.servlet.StartServlet" gepackt. Das stimmt dann mit den deinen Package-Angaben in den Klassen nicht mehr überein.


----------



## inspector_71 (20. Aug 2007)

Hey, vielen Dank, scheint funktioniert zu haben....

Aber... 

Ich verweise im Servlet auf eine JSP Seite:
this.getServletContext().getRequestDispatcher("/start.jsp")


Bloß, ich bekomm diese Meldung:

The requested resource (/test/start.jsp) is not available.

habe die JSP Seite ebenfalls in das war-verzeichnis gepackt:

Pfad bin, include: leer lassen, excludes: test/web/servlet/*.class

Da ich die Servlets extra hinzugeaddet habe...

Pfah, ist schon irgendwie mühsam....


----------



## HLX (20. Aug 2007)

JSP-Seiten gehören weder ins bin- noch ins src-Verzeichnis. Sie werden wie HTML-Dateien in einem separaten Verzeichnis verwaltet.

In Eclipse WebTools wird beim Anlegen eines Web-Projektes ein entsprechender Ordner "WebContent" angelegt in dem JSP-Dateien abzulegen sind. Unter JBoss wird es wohl etwas ähnliches geben.


----------



## inspector_71 (20. Aug 2007)

Andere Frage:

WIe muss ich sie im Servlet aufrufen, reicht ein /start.jsp oder muss ich einen anderen Pfad angeben, bzw, muss ich irgendwas in der web.xml reinschreiben...

Versuch das nun schon seit einer Woche, ist schon sehr frustrierend, ich will endlich entwickeln und mich nicht rumquälen....

Sorry, mein Problem ist bloß das ich keinen kenne der sich damit auskennt und ich nirgendwo nachfragen kann...

:-(


----------



## inspector_71 (20. Aug 2007)

So, du hattest natürlich recht, ich habe einen Ordner WebRoot erstellt im Root Verzeichnis des Projektes und ihn im WAR Packaging eingebunden, so kann ich /start.jsp tatsächlich aufrufen...

Auch wenn mir nicht klar ist warum er es jetzt nimmt, da ich ja eigentlich auf einen Ordner verwiesen hatte der genauso die .jsp files drinnen hatte...

Naja, ich werd mal weiter machen, hoff ich darf mich wieder melden, spätestens bei den Beans...

)))

Danke


----------



## inspector_71 (20. Aug 2007)

Hmm, sorry, aber eine Frage hab ich schon wieder:

Wie kann ich Bilder einbinden? gifs...

Ich hab versucht das Verzeichnis pictures, welches im Projekt-Root angelegt wurde ins war-package hinzugefügt, aber ich bekomm die Grafiken nicht angezeigt....


----------



## inspector_71 (20. Aug 2007)

Wahnsinn, hab das mit den Grafiken von ganz alleine geschafft, was sagt ihr dazu?

Hab einfach pictures und css in den Folder Webroot kopiert und diese dann zur war hinzugefügt...



 :toll:


----------



## HLX (20. Aug 2007)

inspector_71 hat gesagt.:
			
		

> Auch wenn mir nicht klar ist warum er es jetzt nimmt, da ich ja eigentlich auf einen Ordner verwiesen hatte der genauso die .jsp files drinnen hatte...



Der Inhalt deines bin-Verzeichnisses wandert beim packen in den Ordner WEB-INF/classes deines WARs. Aus Sicherheitsgründen erlauben Server keinen direkten Zugriff auf Dateien (Bilder, HTML-Seiten, JSPs, etc.) im Ordner WEB-INF, Unterordner eingeschlossen. Auch Servlets erreichst du nur über das URL-Mapping in deiner web.xml.


----------



## inspector_71 (21. Aug 2007)

Ok, vielen Dank für die Info!

Habe allerdings gleich noch eine Frage:

Wie sieht es mit "normalen" Java Klassen für Exceptions und Interfaces aus, die kommen genauso in die .jar, oder?

Muss ich mich eigentlich mit X-Doclet beschäftigen oder reicht es aus die Dateien per Packaging in die war jar und ear Dateien zu leiten?

Und, gleich noch eine: Die .xml Files, wie web.xml, application.xml, persistence.xml und dergleichen, muss man die immer manuell umändern, ist doch eigentlich recht mühsam...

Ansonsten muss ich sagen das ich Java recht cool finde...


----------



## HLX (21. Aug 2007)

inspector_71 hat gesagt.:
			
		

> Ok, vielen Dank für die Info!
> 
> Habe allerdings gleich noch eine Frage:
> 
> Wie sieht es mit "normalen" Java Klassen für Exceptions und Interfaces aus, die kommen genauso in die .jar, oder?


Wie du "normale Klassen" deiner Anwendung bekannt machst bleibt dir überlassen. Klassen, die zum Frontend gehören solltest du mit ins WAR packen. Klassen die von EJBs referenziert werden kannst du mit ins JAR packen oder als separates JAR als Bibliothek im Server registrieren.



			
				inspector_71 hat gesagt.:
			
		

> Muss ich mich eigentlich mit X-Doclet beschäftigen oder reicht es aus die Dateien per Packaging in die war jar und ear Dateien zu leiten?


Das hängt von der Entwicklungsumgebung ab. Ich vermute mal, dass deine in der Lage ist JBoss-fähige EJB-Module zu erstellen. Entwicklungsumgebungen, die J2EE unterstützen können i.d.R. auch EARs erstellen.



			
				inspector_71 hat gesagt.:
			
		

> Und, gleich noch eine: Die .xml Files, wie web.xml, application.xml, persistence.xml und dergleichen, muss man die immer manuell umändern, ist doch eigentlich recht mühsam...


Hängt auch von deiner Entwicklungsumgebung ab. Aber was gibt´s da auch schon groß zu ändern...


----------



## inspector_71 (21. Aug 2007)

Hmm, ich bekomme immer eine Fehlermeldung:

Failed to parse source: The content of element type "enterprise-beans" is incomplete, it must match "(session|entity|message-driven)+". @ *unknown*[35,23]

Die ejb-jar.xml hab ich nicht geändert, dachte es reicht die Klassen mit Annotations zu versehen...


----------



## persi (23. Aug 2007)

inspector_71 hat gesagt.:
			
		

> So, du hattest natürlich recht, ich habe einen Ordner WebRoot erstellt im Root Verzeichnis des Projektes und ihn im WAR Packaging eingebunden, so kann ich /start.jsp tatsächlich aufrufen...
> 
> Auch wenn mir nicht klar ist warum er es jetzt nimmt, da ich ja eigentlich auf einen Ordner verwiesen hatte der genauso die .jsp files drinnen hatte...
> 
> ...




Hi,

habe das gleiche Problem, bekomme immer die Meldung "The requested resource (/jsp/XXX.jsp) is not available."
Habe aber ein WebRoot-Verzeichnis und darunter das Verzeichnis jsp.
Habe schon alle möglichen Varianten der Pfadangabe durch - ohne Erfolg   
Muss ich also auch noch das Verzeichnis im WAR Packaging einbinden? Und wie macht man das (arbeite mit MyEclipse und Apache Tomcat)? Bin Java-Anfänger ...

Danke!


----------

