Avatar billede aslan Nybegynder
22. januar 2004 - 14:03 Der er 56 kommentarer og
1 løsning

Guide mig igennem en J2EE eksempel?

Jeg skal til at lære J2EE og har forsøgt mig med en del JBoss tutorials, men synes ikke rigtig at jeg har kunne komme igang med at lære det.

Er der en der kan guide gennem et simpel JBoss eksempel som forhåbentligt kan få mig igang med JBoss?
Avatar billede arne_v Ekspert
22. januar 2004 - 14:10 #1
JSP ?
Servlet ?
Session beans ?
CMP ?
BMP ?
JCA ?

(J2EE er et ret stort område)
Avatar billede arne_v Ekspert
22. januar 2004 - 14:14 #2
Er det standard J2EE eller de JBoss specifikke ting (jboss.xml,
jbosscmp-jdbc.xml, *-ds.xml) der driller ?
Avatar billede arne_v Ekspert
22. januar 2004 - 14:16 #3
Jeg har ihvertfald forskellige eksempler liggende.

Bl.a.:
  http://www.vajhoej.dk/arne/eksperten/jboss_cmp/ejbtest.zip
som viser CMP (testdb-service.xml er i 3.0 format og skal nok
erstattes af en testdb-ds.xml).
Avatar billede aslan Nybegynder
22. januar 2004 - 14:39 #4
Hej Arne

Vi skal til at bygge en hovedopgave i JBoss og opgaven er således.

Et firma har en centralt server indeholdene MP3er og interviews osv. Så skal adskillige klienter med en application som vi skal bygge til dem logge sig på den centrale server og kunne afspille de forskellige filer.
Avatar billede aslan Nybegynder
22. januar 2004 - 14:41 #5
Det eksempel du linker til hvad er det og hvordan køres det?
Avatar billede arne_v Ekspert
22. januar 2004 - 14:45 #6
Det er et lill eksempel som laver:
  SELECT * FROM T1
ved hjælp af CMP entity beans.

Eksemplet er som sådan naturligvis totalt overkill, men det viser
CMP entity beans i JBoss.
Avatar billede arne_v Ekspert
22. januar 2004 - 14:46 #7
test-ejb.jar og testdb-*.xml skal deployes og så kan TestT1 som er et lille
test client program køres.
Avatar billede aslan Nybegynder
22. januar 2004 - 14:47 #8
Hvad er CMP entity beans sådan lige præcis?
Avatar billede arne_v Ekspert
22. januar 2004 - 14:53 #9
Oh - sorry.

J2EE (Java 2 Enterprise Edition) = JSP + servlet + EJB + JCA
JSP (Java Server Pages) = HTML med embedded kode a la ASP og PHP
servlet = ren Java kode som køres på server (svarer til ISAPI og NSAPI moduler)
EJB (Enterprise Java Beans) = session beans + entity beans + message driven beans
session beans = service med business logik
entity bean = repræsentation af database record = CMP + BMP
message driven bean = input fra message queue
CMP (Container Managed Persistence) = entity bean hvor app-serveren skriver SQL koden
BMP (Bean Managed Persistence) = entity bean hvor du skriver SQL koden
JCA (Java Connector Architecture) = interface til eksterne systemer
Avatar billede arne_v Ekspert
22. januar 2004 - 14:53 #10
Der er meget at læse om i J2EE.
Avatar billede aslan Nybegynder
22. januar 2004 - 15:10 #11
Jeg forsøgte således.

Startede JBoss op og lagde filerne test-ejb.jar og testdb-service.xml i mappen jboss-3.2.3\jboss-3.2.3\server\default\deploy hvorefter jeg fik en masse fejl på DOS vinduet. Her er lidt af det:

Depends On Me: org.jboss.deployment.DeploymentException: Exception setting attr
ibute javax.management.Attribute: name=ManagedConnectionFactoryName value=jboss.
jca:service=LocalTxDS,name=TestDB on mbean jboss.jca:service=LocalTxCM,name=Test
DB; - nested throwable: (javax.management.AttributeNotFoundException: Writable a
ttribute 'ManagedConnectionFactoryName' not found), ObjectName: jboss.jca:servic
e=LocalTxDS,name=TestDB
state: FAILED
I Depend On:
Depends On Me:  jboss.jca:service=LocalTxCM,name=TestDB
org.jboss.deployment.DeploymentException: No Attribute found with name: JndiName
, ObjectName: jboss.j2ee:jndiName=ejb/T1,service=EJB
state: FAILED
I Depend On:
Depends On Me: org.jboss.deployment.DeploymentException: Error: can't find data
source: java:/TestDB; - nested throwable: (javax.naming.NameNotFoundException:
TestDB not bound)]
Avatar billede arne_v Ekspert
22. januar 2004 - 15:31 #12
Ja - som jeg skrev så skal TestDB service lave spå en anden måde.

Lav en TestDB-ds.xml som ligner den her:
  http://www.vajhoej.dk/arne/eksperten/jboss_cmr/TestMySQL-ds.xml

Og den skal selvfølgelig pege på en rigtig tabel.
Avatar billede arne_v Ekspert
22. januar 2004 - 15:32 #13
T1
--
F1 INTEGER
F2 VARCHAR(50)
Avatar billede aslan Nybegynder
22. januar 2004 - 16:28 #14
Arne den xml fil du linker til benytter sig af mysql og den har jeg ikke lige installeret hvordan er det muligt at bruge Hsqldb som følger med JBoss?
Avatar billede arne_v Ekspert
22. januar 2004 - 16:38 #15
Den database har jeg aldrig brugt. For svært at komme til databasen.

Har du MS Access på PC'en ? Så kan du bruge den !
Avatar billede arne_v Ekspert
22. januar 2004 - 16:45 #16
Alternativt kan du undlade den *-ds.xml og rette til at bruge DefaultDS som
HSqlDb hedder. Men så skal du også ændre i test koden, fordi den læser kun
eksisterende data.
Avatar billede arne_v Ekspert
22. januar 2004 - 16:46 #17
Eller I kunne starte på jeres egen kode og så spørge, når I kører fast.
Avatar billede aslan Nybegynder
22. januar 2004 - 16:54 #18
Ok det lyder fint Arne jeg vil mødes med gruppen og forsøge at få dit eksempel op at køre så kan det være at vi får en lidt bedre forståelse for hvad J2EE går ud på.

Skal dog lige høre inden filerne test-ejb.jar og testdb-service.xml hvad bruges de til og hva sker der når man deployer dem?
Avatar billede arne_v Ekspert
22. januar 2004 - 17:06 #19
Der er fuld kilde kode med.

Det er bare et lille entity bean'senes svar på helloworld.
Avatar billede arne_v Ekspert
22. januar 2004 - 20:57 #20
Du kan hente en god bog om EJB's her:
  http://www.theserverside.com/books/wiley/masteringEJB/index.jsp
Avatar billede billen Nybegynder
24. januar 2004 - 16:55 #21
Når jeg prøver at køre TestT1 (som jeg fandt her http://www.vajhoej.dk/arne/eksperten/jboss_cmr/TestT1.java), så får jeg denne fejlmeddelse:

javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:652)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
        at javax.naming.InitialContext.init(InitialContext.java:219)
        at javax.naming.InitialContext.<init>(InitialContext.java:175)
        at TestT1.main(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:219)
        at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:42)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:649)
        ... 4 more
Avatar billede arne_v Ekspert
24. januar 2004 - 17:00 #22
(jboss_cmr er et lidt mere avanceret eksempel end jboss_cmp)

Fejlen skyldes at client programmet ikke har jbossall-client.jar i classpath.
Avatar billede arne_v Ekspert
24. januar 2004 - 17:00 #23
Er I i gruppe sammen ?
Avatar billede billen Nybegynder
24. januar 2004 - 17:07 #24
Ja, vi er i gruppe sammen og jeg mente også http://www.vajhoej.dk/arne/eksperten/jboss_cmp/TestT1.java
Bare en lille typo ;-)

Jeg får nu denne fejl:

17:06:53,766 ERROR [LogInterceptor] RuntimeException:
java.lang.IllegalStateException: createBeanClassInstanceCommand == null
        at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.createBeanClassInstance(JDBCStoreManager.java:542)
        at org.jboss.ejb.plugins.CMPPersistenceManager.createBeanClassInstance(CMPPersistenceManager.java:119)
        at org.jboss.ejb.EntityContainer.createBeanClassInstance(EntityContainer.java:226)
        at org.jboss.ejb.plugins.AbstractInstancePool.get(AbstractInstancePool.java:168)
OSV OSV OSV
Avatar billede billen Nybegynder
24. januar 2004 - 17:10 #25
Er det forresten rigtigt forstået at det JAVA man koder i J2EE er EJB? Og man kan så benytte andre J2EE teknologier INDE fra ens EJB?
Avatar billede arne_v Ekspert
24. januar 2004 - 17:16 #26
Ah.

(client i jboss_cmr hedder iøvrigt TestCMR.java)
Avatar billede arne_v Ekspert
24. januar 2004 - 17:18 #27
Fejlen tror jeg skyldes at EJB'en ikke er blevet deployet ordentligt.

Har I fået oprettet tabellen i en database og fået deployet en passende
data source descriptor ?

(jævnfør diskussion tidligere)
Avatar billede arne_v Ekspert
24. januar 2004 - 17:19 #28
EJB er en af de 4 hoved J2EE teknologier jævnfør tidligere beskrivelse.

EJB'ere kodes i Java, men skal kodes på en bestemt måde for de at virker
som de skal inde i app-serveren.
Avatar billede arne_v Ekspert
24. januar 2004 - 17:20 #29
Iøvrigt skulle I måske starte med en lille session bean. De er ofte
nemmere end entity beans.
Avatar billede arne_v Ekspert
24. januar 2004 - 17:21 #30
Og der skal læses meget for at lære J2EE.

Jeg vil tro at der er mindst 4 gange så meget at lære om J2EE som om
selve sproget Java.
Avatar billede billen Nybegynder
24. januar 2004 - 17:43 #31
Jeg bruger MySQL, har oprettet en database (j2ee) og i den oprettet en tabel T1 med de to felter F1 og F2.

Jeg har lagt .jar filen ind i server/default/deploy og ændret testdb-ds.xml til dette:

<datasources>
  <local-tx-datasource>
    <jndi-name>TestDB</jndi-name>
    <connection-url>jdbc:mysql://localhost/j2ee</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>admin</user-name>
    <password></password>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>100</max-pool-size>
  </local-tx-datasource>
</datasources>

-------

stadig samme fejl.
Avatar billede arne_v Ekspert
24. januar 2004 - 17:47 #32
Får du fejl når du deployer testdb-ds.xml ?

Får du fejl når du (bagefter) deployer ejb jar filen ?
Avatar billede billen Nybegynder
24. januar 2004 - 18:04 #33
Deploy af testdb-ds.xml gik fint. Men .jar filen gav nogle fejl. Fejlen var at den ikke kunne finde driveren til mysql.

Jeg lagde så driveren ind i lib/ext (og også server/default/lib) og genstartede jboss, men nu er den begyndt at komme med en masse exceptions under opstart (port 4444 is already in use)?!?

Er det hurtigste ikke bare at geninstallere jboss?
Avatar billede arne_v Ekspert
24. januar 2004 - 18:07 #34
server/default/lib er det rigtige sted

du behøver ikke geninstallere allerhøjst reboote
Avatar billede billen Nybegynder
24. januar 2004 - 18:25 #35
Jeg fik rettet port 4444 problemet (det viste sig selvfølgelig efter genstart og geninstallering at jeg har en server kørende på den port... hehe ;-)

Nu får jeg ikke driver fejlen men en connection refused?

18:22:28,929 WARN  [JBossManagedConnectionPool] Throwable while attempting to get a new connection:
org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.ConnectException: Connection refused)
        at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:160)
        at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:477)
        at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:213)
Avatar billede billen Nybegynder
24. januar 2004 - 18:26 #36
Jeg logger ind på mysql med en administrator som må alt fra alle HOSTs
Avatar billede billen Nybegynder
24. januar 2004 - 18:27 #37
Og det er selvfølgelig ved deploy af ejb jar filen at jeg får fejlen.
Avatar billede billen Nybegynder
24. januar 2004 - 18:35 #38
(Jeg vender tilbage engang senere i aften)
Avatar billede arne_v Ekspert
24. januar 2004 - 18:41 #39
MySQL

<user-name>admin</user-name>

plejer at være root og ikke admin
Avatar billede billen Nybegynder
24. januar 2004 - 21:07 #40
ja, men på min debian maskine er det admin og ikke root. Derudover har jeg også prøvet med en special bruger oprettet specifikt til j2ee databasen uden held.
Avatar billede arne_v Ekspert
24. januar 2004 - 21:11 #41
Kører JBoss og MySQL på samme maskine ?

Prøv evt. at lav et lille bitte standalone Java program som conncter
til MySQL via JDBC for at teste i en simplere kontekst.
Avatar billede billen Nybegynder
24. januar 2004 - 22:04 #42
God damn ;o) Det virker!

Nå men for lige at skitsere mine problemer og løsninger:

EJB kunne ikke forbinde til databasen. Jeg prøvede så med en hurtig java klient og jdbc og fik samme fejl. Fandt ud af at på debian er der som standard slået skip_networking til som gør at man ikke kan forbinde via TCP/IP; hvilket man skal med JDBC :( Da den blev slået fra fungerede det og min EJB klient udskrev sørme det som stod i tabellen ;-)

Der er dog lige nogle ting der undrer mig:

Jeg oprettede selv min tabel i db, men da jeg deployede skrev den "21:55:33,470 INFO  [T1] Table 'T1' already exists". Det virkede dog alligevel. Såtænkte jeg at jeg måske kunne have ladet være med at oprette tabellen og den så gjorde det for mig. Men så skrev den dette "Too big column length for column 'F2' (max = 255). Use BLOB instead" og oprettede ikke tabellen.

Har du en forklaring?

Ellers tak for hjælpen.
Avatar billede arne_v Ekspert
24. januar 2004 - 22:10 #43
Jeg tror at den forsøger at oprette feltet med for stor en længde.

Prøv at rette i jbosscmp-jdbc.xml:

<datasource-mapping>SOLID</datasource-mapping>

til:

<datasource-mapping>mySQL</datasource-mapping>
Avatar billede arne_v Ekspert
24. januar 2004 - 22:12 #44
Jeg har aldrig brudt mig om at entity beans selv oprettede tabeller - jeg vil
selv oprette dem, så jeg ved præcis hvordan de er oprettet. I praksis vil
tabeller også ofte eksisterer fordi de er oprettet til en anden applikation.
Avatar billede arne_v Ekspert
24. januar 2004 - 22:13 #45
Men I er ovre det værste nu.

Man bruger normalt mest stateless session beans og CMP entity beans.

Og session beans er nemme at få til at virke, da der ikke en nogen
JBoss og database specifikke finesser.

Entity beans og CMP kan godt drille lidt, men den hurdle er I jo ovre.
Avatar billede arne_v Ekspert
24. januar 2004 - 22:13 #46
Så vil jeg iævrigt tillade mig at ligge et svar.
Avatar billede billen Nybegynder
24. januar 2004 - 22:23 #47
Tak for hjælpen arne. Jeg tror faktisk at jeg har fået brudt isen til j2ee. Kan du her på falderebet af dette spørgsmål lige svare mig på dette:

Hvis jeg vil have denne klient (TestT1) til at køre på en anden maskine og forbinde til serveren, skal jeg så bruge hele client mappen fra JBoss eller er der noget jeg kan undvære?

P.S. aslan er ikke hjemme i aften, så der bliver først delt point ud i morgen.
Avatar billede arne_v Ekspert
24. januar 2004 - 22:27 #48
jbossall-client.jar skulle være nok (all betyder det det gør)
Avatar billede arne_v Ekspert
24. januar 2004 - 22:30 #49
Normalt bruger man iøvrigt:

browser----JSP/Servlet----session bean----entity bean----database

eller:

client app----Servlet----session bean----entity bean----database

(web service !)
Avatar billede arne_v Ekspert
24. januar 2004 - 22:31 #50
Idag vil man iøvrigt normalt lade entity beans kun have local interface og
sessions beans både local og remote.
Avatar billede billen Nybegynder
24. januar 2004 - 22:39 #51
Ok. tusind tak for hjælpen. Det lader til at næste trin nu er servlet. endnu engang tak.
Avatar billede arne_v Ekspert
24. januar 2004 - 23:09 #52
Det er nemt sammenlignet med EJB's.
Avatar billede aslan Nybegynder
25. januar 2004 - 01:25 #53
Tak for hjælpen arne....
Avatar billede aslan Nybegynder
30. januar 2004 - 13:01 #54
Arne hvis man f.eks gerne i remotehome interfacet vil lave en metode der sletter fra db hvordan gør man så det? Den indholder allerede de 3 standard metoder(create,findByPrimaryKey,findAll), men findes der også en til at slette med?
Avatar billede arne_v Ekspert
30. januar 2004 - 14:37 #55
Jeg er overbevist om at der er en remove method.
Avatar billede arne_v Ekspert
30. januar 2004 - 14:38 #56
Jep.

remove

1 argument: primary key
Avatar billede aslan Nybegynder
30. januar 2004 - 15:18 #57
Opretter lige et nyt spørgsmål så du kan få points har også andre småting jeg lige vil spørge om...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester