| Autor |
Nachricht |
elise
Mitglied
Benutzerprofil
Anmeldungsdatum: 18.05.2001
Beiträge: 8148
|
elise Mitglied
21:09:32 02.08.2003 Titel: |
Jboss boundet das ejb nicht |
Zitieren |
hier läuft unter win98:
j2sdk1.4.0-beta3 (ich weiß, ich muss mal updaten, hatte noch keine zeit)
j2sdkee1.3 installiert (nur zum compileren.. ansonsten interessiert es nicht)
server:
jboss-3.0.0_tomcat-4.0.3
was ich machen wollte: testbean schreiben und deployen .. und mit einem client ansprechen.
bei den drei files für das testbean halte ich mich an eine im internet gefundene vorgabe. funzt auch prima. (schwer etwas über jboss zu finden, aber egal, das ist ein anderes thema )
HelloWorld.java
| Java: | 1 2 3 4 5 6 7 8 9 10 | package ie.tcd.cs.ejb_example;
/* This is the remote interface that the client calls to have the EJB do the work. */
public interface HelloWorld extends javax.ejb.EJBObject
{
public String hello() throws java.rmi.RemoteException;
} | |
HelloWorldHome.java
| Java: | 1 2 3 4 5 6 7 8 9 10 | package ie.tcd.cs.ejb_example;
/* HelloWorldHome provides the container the means to create and destroy EJB's. */
public interface HelloWorldHome extends javax.ejb.EJBHome
{
HelloWorld create() throws java.rmi.RemoteException, javax.ejb.CreateException;
} | |
HelloWorldBean.java
| Java: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package ie.tcd.cs.ejb_example;
import javax.ejb.SessionContext;
/* This class is the actual implementation of the business logic. This is the EJB for simplicity's sake. */
public class HelloWorldBean implements javax.ejb.SessionBean
{
private SessionContext ctx;
public void setSessionContext(SessionContext ctx)
{
this.ctx = ctx;
}
public void ejbRemove()
{
System.out.println( "ejbRemove()" );
}
public void ejbActivate()
{
System.out.println( "ejbActivate()" );
}
public void ejbPassivate()
{
System.out.println( "ejbPassivate()" )
}
/* The method called to display the string "Hello World!" on the client. */
public String hello()
{
System.out.println( "hello()" );
return "Hello World!";
}
public void ejbCreate()
{
System.out.println( "ejbCreate()" );
}
} | |
die packe ich mit richtiger ordnung und einem manifest, in dem die folgende xml abgelegt ist, in ein jar.
ejb-jar.xml
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="UTF-8"?>
<ejb-jar>
<description>JBoss Hello World Application</description>
<display-name>Hello World EJB</display-name>
<enterprise-beans>
<session>
<ejb-name>HelloWorld</ejb-name>
<home>ie.tcd.cs.ejb_example.HelloWorldHome</home>
<remote>ie.tcd.cs.ejb_example.HelloWorld</remote>
<ejb-class>ie.tcd.cs.ejb_example.HelloWorldBean
</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar> | |
alles klar.
ordnerstruktur und so..
| Zitat: |
jboss-tutorial\ie
jboss-tutorial\ie\tcd\cs
jboss-tutorial\ie\tcd\cs\ejb_example
jboss-tutorial\ie\tcd\cs\ejb_example\HelloWorld.class
jboss-tutorial\ie\tcd\cs\ejb_example\HelloWorldBean.class
jboss-tutorial\ie\tcd\cs\ejb_example\HelloWorldHome.class
jboss-tutorial\META-INF
jboss-tutorial\META-INF\ejb-jar.xml
|
und dieses jar wird von meinem server auch klar und deutlich angenommen:
| Zitat: |
19:21:10,130 INFO [MainDeployer] Starting deployment of package: file:/E:/jboss
-3.0.0_tomcat-4.0.3/server/default/deploy/HelloWorld.jar
19:21:10,130 INFO [MainDeployer] Successfully completed deployment of package:
file:/E:/jboss-3.0.0_tomcat-4.0.3/server/default/deploy/HelloWorld.jar
|
jetzt noch der client.. der dann gestartet wird, und eigentlich den kontakt herstellen soll:
HelloWorldClient.java
| Java: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package ie.tcd.cs.ejb_example;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Hashtable;
import java.util.*;
public class HelloWorldClient extends Thread
{
public static void main( String [] args )
{
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("anfang");
try { Thread.sleep(10); } catch (InterruptedException e) {}
System.out.println("eins");
Hashtable env = new Hashtable();
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("zwei");
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("drei");
env.put(Context.PROVIDER_URL, "localhost:1099");
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("vier");
env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("fünf");
try
{
Context ctx = new InitialContext(env);
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("sechs");
Object obj = ctx.lookup( "HelloWorld" );
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("sieben");
HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow( obj, HelloWorldHome.class );
HelloWorld helloWorld = home.create();
System.out.println( helloWorld.hello());
helloWorld.remove();
}
catch ( Exception e )
{
//e.printStackTrace();
System.out.println( "Exception: " + e.getMessage() );
}
}
} | |
die unattraktiven timeausgaben zeigen mir, daß er beim starten bis zur zeile sechs kommt.. sprich: er stellt den kontakt her (erkenne ich auch am zonealarm, der alarm schlägt ) und läuft wunderbar, bis er das HelloWorld finden soll.
als classpath (uff, den musste ich irgendwie grausam ummodellieren, ohne eine ordentliche beschreibung wirklich grusel, jboss kanns nicht sein) habe ich folgendes:
SET CLASSPATH=.;d:\j2sdk1.4.0-beta3;d:\j2sdk1.4.0-beta3\lib;E:\j2sdkee1.3\lib;E:\j2sdkee1.3\lib\j2ee.jar;E:\jboss-3.0.0_tomcat-4.0.3\server\default\conf\jndi.properties;E:\jboss-3.0.0_tomcat-4.0.3\client\log4.jar;E:\jboss-3.0.0_tomcat-4.0.3\client\jboss-common-client.jar;E:\jboss-3.0.0_tomcat-4.0.3\client\jboss-system-client.jar;E:\jboss-3.0.0_tomcat-4.0.3\client\jnp-client.jar;E:\jboss-3.0.0_tomcat-4.0.3\client\jboss-client.jar;E:\jboss-3.0.0_tomcat-4.0.3\client\jbosssx-client.jar;E:\projects\jboss-tutorial\HelloWorld.jar
ihr seht ein sammelsurium aus vielen vielen beiträgen von unglücklichen menschen, die das selbe versuchten.
ich weiß, jndi hat ein problem, nur: wie kriege ich es gelöst? vielleicht hat einer den entscheidenden tip.
mich beruhigt, daß jboss alles richtig findet, und mein client auch kontaktiert.. es muss ein doofes problem sein..
thx, wenns jemand weiß. |
_________________ There's An App For That
|
|
 |
Werbeunterbrechung
|
|
 |
elise
Mitglied
Benutzerprofil
Anmeldungsdatum: 18.05.2001
Beiträge: 8148
|
elise Mitglied
18:52:28 03.08.2003 Titel: |
|
Zitieren |
hi
habe mir die anderen jars angeschaut und noch eine jboss.xml in die meta-inf mit reingelegt.
deployen geht, aber findet immer noch nicht.
worauf muss ich beim bekanntmachen achten?
thx. |
_________________ There's An App For That
|
|
 |
gomberl
Mitglied
Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 699
|
gomberl Mitglied
09:49:19 04.08.2003 Titel: |
jndi name angeben |
Zitieren |
hi
das problem das ich sehe ist das er es entweder nicht findet
dagegen koenntest du einen JNDI namen extra vergeben
das wuerde funktionieren über das jboss.xml dokument
so wie:
| Code: | 1 2 3 4 5 6 7 8 | <jboss>
<enterprise-beans>
<session>
<ejb-name>XML_RPC_Test</ejb-name>
<jndi-name>XML_RPC_TestJNDI</jndi-name>
</session>
</enterprise-beans>
</jboss> | |
mit
| Java: | | Object ref = jndiContext.lookup("XML_RPC_TestJNDI"); | |
kannst du dann das objekt über den eindeutigen JNDI namen ansprechen
sonst fällt mir nur folgendes ein:
die im classpath des clients enthaltenen dateien sind:
jbosssx-client.jar
jboss-transaction-client.jar
jboss-system-client.jar
jboss-common-client.jar
jnp-client.jar
jboss-client.jar
ich hoffe das hilft |
|
|
|
 |
elise
Mitglied
Benutzerprofil
Anmeldungsdatum: 18.05.2001
Beiträge: 8148
|
elise Mitglied
11:21:02 04.08.2003 Titel: |
|
Zitieren |
thanks, aber leider nix
habe gestern schon neben meiner ejb-jar.xml eine jboss.xml in das meta-inf verzeichnis gelegt, und einen extra jndi namen angelegt und versucht, darüber anzusprechen.
in allen varianten, die es im netz gibt.
deine jars liegen alle in meinem pfad, bis auf die transaction, die gibt es aber auch nicht in meiner serverversion.
was mir bleibt, ist es auf einer anderen maschine nochmal zu versuchen, eventuell unter linux. vielleicht win98.
ich habe zwei jboss versionen hier, eine mit tomcat, eine ohne.
ich muss nochmal einen schritt zurück, und über diese jndi nachdenken. nach meinem verständnis müsste jboss alles regeln, wenn er mir die meldung gibt: das bean deployed. dann müsste er es über den namen kennen aus der ejb-jar.xml, und wenn ich zusätzlich eine jboss.xml anlege, dann gebe ich "sozusagen" noch ein alias.
na ja.. kaffee ... |
_________________ There's An App For That
|
|
 |
gomberl
Mitglied
Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 699
|
gomberl Mitglied
12:26:15 04.08.2003 Titel: |
|
Zitieren |
ich glaube das es an der transaction liegt
den ich musste sie einbinden
ohne sie funktionierte die verbindung nicht
ich denk noch mal darüber nach
aber erst muss ich ein ejb direkt als web service ansprechbar machen
mal sehen wann ich damit fertig bin
gomberl |
|
|
|
 |
elise
Mitglied
Benutzerprofil
Anmeldungsdatum: 18.05.2001
Beiträge: 8148
|
elise Mitglied
12:35:43 04.08.2003 Titel: |
|
Zitieren |
habe mich durch die logs gewühlt, und gefunden, daß er mich einfach veräppelt hat..
wenn jboss etwas nicht deployen kann, weil die jar nicht stimmt, dann sagt er, es wäre deployed.
na ja, nun bin ich soweit, daß die jar stimmt, aber das helloworldbean seine classen nicht findet, obwohl ich alle bean klassen drin habe.
danke fürs mitdenken, ich muss jetzt alle pfade nochmal überprüfen, warum findet er plötzlich javax nicht, da ist ejb drin, ebenso in der j2ee.
es ist heillos, diese konfiguration ohne faq. |
_________________ There's An App For That
|
|
 |
gomberl
Mitglied
Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 699
|
gomberl Mitglied
10:27:11 05.08.2003 Titel: |
schick mir |
Zitieren |
schick mir doch deine sources
ich bin sowieso gerade dabei das in der arbeit zu machen da kann ich mir das gleich ansehen
ich hab es zustande gebracht ein ejb direkt als web service ansprechbar zu machen
wenn ich jetzt noch einen xml rpc darauf schaffe dann bin ich glücklich
aber das wird sich schon noch ergeben
lg
gomberl |
|
|
|
 |
elise
Mitglied
Benutzerprofil
Anmeldungsdatum: 18.05.2001
Beiträge: 8148
|
elise Mitglied
13:10:00 12.08.2003 Titel: |
|
Zitieren |
nachdem letzte woche das ganze unter debian nicht funzte, hier jetzt endlich ein HelloWorld.. uff.. und juchhee (komme mir vor wie gerade auf dem mond gelandet und der erste mensch da oben ... helloMond)
zu doku zwecken, für leute, die eventuell ähnliche probleme haben... hier ein kurzer abriss (bei denen, wo die configuration schon steht, ja die habens gut... die können darüber lachen )
also hier mal eine jboss-anfänger-runde
erstmal habe ich es mir einfach gemacht, und alle tiefe weggenommen, also eine runde ohne unterordner..um jeglichen pfadproblemen von vornherein zu entgehen...
HelloWorld.java
| Java: | public interface HelloWorld extends javax.ejb.EJBObject
{
public String hello() throws java.rmi.RemoteException;
} | |
HelloWorldHome.java
| Java: | public interface HelloWorldHome extends javax.ejb.EJBHome
{
HelloWorld create() throws java.rmi.RemoteException, javax.ejb.CreateException;
} | |
HelloWorldBean.java
| Java: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import javax.ejb.SessionContext;
public class HelloWorldBean implements javax.ejb.SessionBean
{
private SessionContext ctx;
public void setSessionContext(SessionContext ctx)
{
this.ctx = ctx;
}
public void ejbRemove()
{
System.out.println( "ejbRemove()" );
}
public void ejbActivate()
{
System.out.println( "ejbActivate()" );
}
public void ejbPassivate()
{
System.out.println( "ejbPassivate()" ) ;
}
public String hello()
{
System.out.println( "hello()" );
return "Hello World!";
}
public void ejbCreate()
{
System.out.println( "ejbCreate()" );
}
} | |
alle drei compilieren. ihr braucht ein ejb im javax (oder ähnlich irgendwo im pfad).
die classfiles in einen ordner kopieren, dazu einen unterordner rein: META-INF
mit der xml habe ich es mir einfach gemacht, es reicht eine ejb-jar.xml (die jboss kann, muss aber für dieses beispiel nicht)
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0" encoding="UTF-8"?>
<ejb-jar>
<description>JBoss Hello World Application</description>
<display-name>Hello World EJB</display-name>
<enterprise-beans>
<session>
<ejb-name>HelloWorld</ejb-name>
<home>HelloWorldHome</home>
<remote>HelloWorld</remote>
<ejb-class>HelloWorldBean
</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar> | |
wie man an dem xml file sieht, alles ohne unterordner. das war eins der probleme, das der später folgende client nicht nur wegen fehlerender jboss jars eine krise bekam, sondern hier schon streikte.. klar gehts anders, aber der einfachheit halber erstmal ohne.
das xml file kommt in den META-INF ordner
jetzt das jar file packen:
| Code: | | jar cfv HelloWorld.jar .\ META-INF | |
jboss starten (run.bat)
dann jar file in den ordner : pfad...\jboss-3.0.4\server\default\deploy
reinkopieren
jboss sagt dann dazu:
| Code: | 1 2 3 4 5 6 7 8 | 11:58:51,780 INFO [jbossweb] successfully deployed file:/E:/jboss/jboss-3.0.4/s
erver/default/deploy/http-invoker.sar/invoker.war/ to /invoker
11:58:51,780 INFO [HttpInvoker] Starting
11:58:51,830 INFO [HttpInvoker] Started
11:58:51,830 INFO [HttpInvokerHA] Starting
11:58:51,830 INFO [HttpInvokerHA] Started
11:58:51,830 INFO [MainDeployer] Deployed package: file:/E:/jboss/jboss-3.0.4/s
erver/default/deploy/http-invoker.sar/ | |
danach den client kompilieren (mit testausgaben) :
HelloWorldClient.java
| Java: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Hashtable;
import java.util.*;
import java.io.*;
public class HelloWorldClient extends Thread
{
public static void main( String [] args )
{
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("anfang");
try { Thread.sleep(10); } catch (InterruptedException e) {}
System.out.println("eins");
Hashtable env = new Hashtable();
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("zwei");
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("drei");
env.put(Context.PROVIDER_URL, "localhost:1099");
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("vier");
env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("fünf");
try
{
Context ctx = new InitialContext(env);
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("sechs");
Object obj = ctx.lookup( "HelloWorld" );
try { Thread.sleep(1000); } catch (InterruptedException e) {}
System.out.println("sieben");
HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow( obj, HelloWorldHome.class );
HelloWorld helloWorld = home.create();
System.out.println( helloWorld.hello());
// helloWorld.remove();
}
catch ( Exception e )
{
e.printStackTrace();
System.out.println( "Exception: " + e.getMessage() );
}
}
} | |
im classpath müssen folgende jars beim ausführen enthalten sein für dieses bean:
| Code: | client\jnp-client.jar
client\log4.jar
client\jbossall-client.jar
client\jbosssx-client.jar
client\jboss-system-client.jar
client\jboss-client.jar | |
das war das wichtigste.. ich hatte zuviele! jars zeitweise drin, die haben sich wohl gegenseitig genervt, eventuell wars auch die reihenfolge.. auf jeden war das der eigentliche grusel. ich habe eine nach der anderen gesucht und eingebunden, je nach fehlermeldung.. fragt mich, wo im jboss etwas versteckt ist, ich weiß es nun
dann starten, ausgegeben wird auf client seite: ein immens tolles, klares super "HelloWorld", das schönste seit langem
serverausgabe ist ebso da, er meldet einen funkspruch:
| Code: | 12:34:21,130 INFO [STDOUT] ejbCreate()
12:34:21,130 INFO [STDOUT] hello() | |
so, nun werde ich mir entweder meine eclipse einrichten zum arbeiten (damit gehts denk ich am besten) und noch ein ant-file zum deployen herstellen.
das ant-file poste ich noch.
big thanks an gomberl für die unterstützung |
_________________ There's An App For That
|
|
 |
gomberl
Mitglied
Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 699
|
gomberl Mitglied
13:58:24 12.08.2003 Titel: |
FAQ |
Zitieren |
sollte in die FAQ denke ich |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|