Avatar billede trp79 Nybegynder
30. august 2004 - 15:28 Der er 37 kommentarer og
1 løsning

Igang med JBoss med forbindelse til Mysql DB - JSP

Hejsa
Jeg vil gerne prøve at sætte en JBoss server op til afvikling af JSP sider. Som det er nu har jeg hentet Jboss, MySql og j2sdk1.4.2_05. Jeg har ikke selvstændigt hentet noget j2EE software, da jeg er lidt i tvivl om, hvad der skal hentes.

Jeg har kigget på http://java.sun.com/j2ee/1.4/download.html men kan ikke finde ud af, om hvor mange af følgende ting jeg skal hente:
Sun Java System Application Server Platform Edition 8 Update 1
J2EE 1.4 SDK Samples Update 1
J2EE 1.4 API Documentation

Jeg har smidt 100 point i puljen, da jeg regner med at have en JBoss server, som kan afvikle JSP sider med tilgang til en MySql db(som ligger på samme maskine) når spørgsmålet lukkes.
Altså vil jeg gerne lære hvordan jeg sætter JBoss op(med MySql db), og hvordan jeg deployer(er det ikke det det hedder?) jsp sider på den.

På forhånd tak, mvh
Torben
Avatar billede arne_v Ekspert
30. august 2004 - 15:34 #1
Du behøver ikke noget af SUN J2EE download.

Men jeg vil anbefale dig at hente "J2EE 1.4 SDK" fordi du får:

1)  dokumentation

2)  j2ee.jar som du kan compiler beans, servlets og EJB's mod

(men lad være med at bruge SUN AppServer)
Avatar billede arne_v Ekspert
30. august 2004 - 15:35 #2
JBoss installation, config og start er:

* download
* unzip
* kør server/default/run.bat

Og så kører den !
Avatar billede arne_v Ekspert
30. august 2004 - 15:37 #3
MySQL kan du bruge på mange måder.

Lav nogle database klasser som bruger Class.forName og
DriverManager.getConnection helt som du plejer.

Gøre det mere J2EE like og sætte op en connection pool og
tilgå den via JNDI lookup.

Bruge entity beans.
Avatar billede arne_v Ekspert
30. august 2004 - 15:38 #4
Ved begge de sidste to løsninger deployer du en ds xml fil.

Eksempel:

testmysql-ds.xml

<datasources>

  <local-tx-datasource>

    <jndi-name>TestMySQL</jndi-name>

    <connection-url>jdbc:mysql://localhost/Test</connection-url>

    <driver-class>com.mysql.jdbc.Driver</driver-class>

    <user-name></user-name>

    <password></password>

    <min-pool-size>5</min-pool-size>

    <max-pool-size>100</max-pool-size>

  </local-tx-datasource>

</datasources>
Avatar billede arne_v Ekspert
30. august 2004 - 15:39 #5
MySQL JDBC driver jar filen skal ligges i server/default/lib

ds xml skal deployes til server/default/deploy
Avatar billede arne_v Ekspert
30. august 2004 - 15:40 #6
Du bør pakke din applikation i en war eller ear fil og deploye den til
server/default/deploy
Avatar billede arne_v Ekspert
30. august 2004 - 15:41 #7
ups

server/default/run.bat

er forkert

rigtig er:

bin/run.bat
Avatar billede arne_v Ekspert
30. august 2004 - 15:51 #8
og et svar
Avatar billede simonvalter Praktikant
30. august 2004 - 15:59 #9
Hvis du kun skal køre jsp/servlets vil det måske bedre at overveje en servlet container og ikke en fuld j2ee server.

resin/jetty selv tomcat bruger en del mindre resourcer.
Avatar billede trp79 Nybegynder
30. august 2004 - 16:01 #10
Hej Arne og tak for kommentarene.

Lige til din første kommentar. Du skriver jeg skal hente J2EE 1.4 SDK, men lade være at bruge app serveren. Vil det sige at jeg lige så godt bare kan hente:
J2EE 1.4 SDK Samples Update 1
J2EE 1.4 API Documentation
Istedet for at hente hele pivtøjet? (man kan på http://java.sun.com/j2ee/1.4/download.html hente "Separate Bundles")

j2ee.jar smider jeg vel i classpath når jeg får installeret J2EE right?
Avatar billede trp79 Nybegynder
30. august 2004 - 16:05 #11
Hej simon
Ja jboss er lidt stor, men jeg kunne godt tænke mig at lære lidt om den, og på sigt har jeg også tænkt mig at arbejde lidt med ejb og servlets, så et mere fornuftigt brug af JBoss er hensigten med tiden :)
Avatar billede trp79 Nybegynder
30. august 2004 - 16:49 #12
--> Arne
Har lige et par yderligere spørgsmål:
1)
Når du siger jeg bør pakke min applikation i en war eller ear fil og deploye den til server/default/deploy vil det så sige, at selv en JSP fil skal pakkes ned i en sådan fil?

2)
Hvordan pakker man iøvrigt ned i war eller ear - er det bare en zip fil med et andet efternavn?

3)
Hvordan deployer jeg? er det bare at kopierer - det er det vel ikke siden der ligger en deploy bat fil i bin directoriet...
Avatar billede arne_v Ekspert
30. august 2004 - 16:50 #13
Hvis samles update indeholder j2ee.jar så ja - men det er jeg ikke sikker på.
Avatar billede arne_v Ekspert
30. august 2004 - 16:52 #14
re 1)

Ja.

Du pakker det hele:
  JSP sider
  web.xml
  andre konfigurations filer
  bean & servlet .class filer
  bibliotek .jar filer

ned i en enkelt deployable war file.
Avatar billede arne_v Ekspert
30. august 2004 - 16:53 #15
re 2)

war og ear er bare en jar fil med en bestemt directory struktur

re 3)

En af de ting som er god eved JBoss er at deployment bare er copy.
Avatar billede trp79 Nybegynder
31. august 2004 - 09:29 #16
Hej Arne
Så har jeg fået JBoss op at køre, og fundet ud af hvordan man laver en war fil. Næste punkt er så mysql databasen. Jeg kunne godt tænke mig at gøre det J2EE like som du beskriver det. Men når jeg nu har deployed testmysql-ds.xml og selvfølgelig
MySQL JDBC driver jar filen, hvordan får jeg så tilgang til databasen fra min JSP side? og hvad beskriver disse linier:
    <min-pool-size>5</min-pool-size>

    <max-pool-size>100</max-pool-size>
jeg går ud fra at det beskriver hvor mange connections der holdes åbne til db, men er det for netop en specifik jsp side eller samtlige på JBoss serveren?
Avatar billede arne_v Ekspert
31. august 2004 - 11:24 #17
Det er for all.

Ideen er at app serveren har et antal fysiske connections til databasen
(som er dyre at oprette) og at dine sider så låner en logisk connection
hver gang de skal bruge en connection. Det er billigt at reservere og
frigive en logisk connection og derfor kan du bare reservere og frigive
i hver eneste side. På den måde kan du understøtte mange flere samtidige
brugere end der er fysiske database connections med minimalt overhead.
Avatar billede trp79 Nybegynder
31. august 2004 - 15:32 #18
Du skriver i dit indlæg 30/08-2004 15:37:29: Gøre det mere J2EE like og sætte op en connection pool og tilgå den via JNDI lookup. Men jeg er ikke lige med på hvordan jeg tilgår denne connection pool - har søgt her på exp efter JNDI lookup, men syntes desværre ikke at blive klogere. Så når jeg har deployet testmysql-ds.xml, hvordan tilgår jeg så databasen fra en JSP side?
Avatar billede simonvalter Praktikant
31. august 2004 - 16:01 #19
i arnes artikel om tomcat kan du se hvordan du får fat i din connection pool
http://www.eksperten.dk/artikler/50
Avatar billede trp79 Nybegynder
31. august 2004 - 17:38 #20
Jeg prøver lige at kigge lidt der :)
Avatar billede arne_v Ekspert
31. august 2004 - 19:29 #21
:-)
Avatar billede trp79 Nybegynder
03. september 2004 - 09:40 #22
Nå, så har jeg langt om læge fået lidt tid til at lege lidt igen - men er selvfølgelig stødt ind i problemer.
Jeg har forsøgt at lave det eksempel du har i den artikkel som simon henviser til.
Men når jeg starter Jboss op, så kommer der en fejl:
java.util.zip.ZipException: error in opening zip file

Har du nogen ide til hvad det kan skyldes? Sig endelig til, hvis jeg skal beskrive hvad jeg har gjort eller give flere detaljer om fejlen.
Kort kan jeg da lige sige, at jeg har har pakket(zip) login.jsp, error.jsp, og WEB-INF kataloget med(web.xml) ned i en war fil ved hjælp af winrar.
Avatar billede arne_v Ekspert
03. september 2004 - 09:44 #23
Prøv lige at lave den war enten med command line jar tool eller med ant.
Avatar billede trp79 Nybegynder
03. september 2004 - 09:59 #24
Jeg får stadig den samme fejl, så fejlen ligger måske i det jeg har bikset sammen... skal jeg uddybe hvordan jeg har gjort osv?
Avatar billede arne_v Ekspert
03. september 2004 - 10:05 #25
Umiddelbart synes jeg nu godt nok at fejlen lyder relateret til selve filen
og ikke så meget indholdet.

Men fortæl.
Avatar billede trp79 Nybegynder
03. september 2004 - 10:19 #26
I min MySql db har jeg lavet tabllerne og indsat de poster, som du foreskriver i den artikkel.
Derudover har jeg i E:\jboss-3.2.5\server\default\conf lavet denne XML(server.xml) fil:
<Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
    driverName="org.gjt.mm.mysql.Driver" 
    connectionURL="jdbc:mysql://localhost/jsp"
    connectionName="" connectionPassword=""
    userTable="Tomcat_users" userNameCol="username" userCredCol="password"
    userRoleTable="Tomcat_roles" roleNameCol="role" />
   
<Context docBase="pooltest" path="/pooltest" reloadable="true">           
    <Resource auth="Container" name="jdbc/TestMySQL" type="javax.sql.DataSource" />            <ResourceParams name="jdbc/TestMySQL">               
        <parameter>                     
            <name>factory</name>                     
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>       
        </parameter>               
        <parameter>                     
            <name>maxActive</name>                     
            <value>100</value>               
        </parameter>               
        <parameter>                     
            <name>maxIdle</name>                     
            <value>30</value>               
        </parameter>               
        <parameter>                     
            <name>maxWait</name>                     
            <value>10000</value>               
        </parameter>               
        <parameter>                     
            <name>username</name>                     
            <value></value>               
        </parameter>               
        <parameter>                     
            <name>password</name>                     
            <value></value>               
        </parameter>               
        <parameter>                     
            <name>driverClassName</name>                     
            <value>com.mysql.jdbc.Driver</value>               
        </parameter>               
        <parameter>                     
            <name>url</name>                     
            <value>jdbc:mysql://localhost/jsp</value>               
        </parameter>           
    </ResourceParams>         
</Context>

Jeg har så lavet war filen med "jar cbf Login.war login.jsp error.jsp WEB-INF og deployed(kopieret) war filen til E:\jboss-3.2.5\server\default\deploy

web.xml i WEB-INF indeholder følgende:
<?xml version = '1.0' encoding = 'windows-1252'?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <security-constraint>     
      <web-resource-collection>         
          <web-resource-name>open part</web-resource-name>         
          <url-pattern>/open/*</url-pattern>     
      </web-resource-collection>     
      <auth-constraint>          <
          role-name>user</role-name>     
      </auth-constraint> 
  </security-constraint> 
  <security-constraint>     
      <web-resource-collection>         
          <web-resource-name>secure part</web-resource-name>         
          <url-pattern>/secure/*</url-pattern>     
      </web-resource-collection>     
      <auth-constraint>         
          <role-name>administrator</role-name>     
      </auth-constraint> 
  </security-constraint> 
  <login-config>     
      <auth-method>FORM</auth-method>     
      <form-login-config>         
        <form-login-page>/login.jsp</form-login-page>         
        <form-error-page>/error.jsp</form-error-page>     
      </form-login-config> 
  </login-config>
</web-app>

error.jsp og login.jsp er identiske dem i din artikkel.
Avatar billede trp79 Nybegynder
03. september 2004 - 10:33 #27
Jeg har lige været en tur inde i loggen og kigge lidt - og det viser sig, at den fejl jeg har beskrevet ikke er den første fejl. Det er derimod denne:

2004-09-03 10:30:40,771 DEBUG [org.jboss.mq.security.SecurityManager] Starting jboss.mq:service=SecurityManager
2004-09-03 10:30:40,781 DEBUG [org.jboss.mq.security.SecurityManager] Failed to lookup securityDomain=jbossmq
javax.naming.NameNotFoundException: jbossmq not bound
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:495)
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:503)
    at org.jnp.server.NamingServer.getObject(NamingServer.java:509)
    at org.jnp.server.NamingServer.lookup(NamingServer.java:282)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:530)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:509)

Beklager, at jeg ikke tænkte på loggen tidligere - scrollede blot op i prompt-vinduet :(
Avatar billede trp79 Nybegynder
03. september 2004 - 10:34 #28
Har du nogen ide om hvad dette kan skyldes så?
Avatar billede arne_v Ekspert
03. september 2004 - 10:56 #29
Hov.

Den server.xml (som faktisk kun er et fragment af en server.xml) er til Tomcat standalone.

Den erstattes af xxxxx-ds.xml når det er JBoss med Tomcat.

Men lookup af connection er den samme.
Avatar billede trp79 Nybegynder
03. september 2004 - 11:22 #30
Nå, jeg har vist ikke helt styr på hvad der skal stå i den xxx-ds.xml fil, få jeg får denne fejl nu:
2004-09-03 11:14:43,080 DEBUG [org.jboss.deployment.MainDeployer] Watching new file: file:/E:/jboss-3.2.5/server/default/deploy/testmysql-ds.xml
2004-09-03 11:14:43,080 ERROR [org.jboss.deployment.MainDeployer] Could not initialise deployment: file:/E:/jboss-3.2.5/server/default/deploy/testmysql-ds.xml
org.jboss.deployment.DeploymentException: Could not parse dd; - nested throwable: (org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.)
    at org.jboss.deployment.XSLSubDeployer.findDd(XSLSubDeployer.java:265)
    at org.jboss.deployment.XSLSubDeployer.init(XSLSubDeployer.java:187)

Min testmysql-ds.xml ser nu således ud:
<Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
    driverName="org.gjt.mm.mysql.Driver" 
    connectionURL="jdbc:mysql://localhost/jsp"
    connectionName="" connectionPassword=""
    userTable="Tomcat_users" userNameCol="username" userCredCol="password"
    userRoleTable="Tomcat_roles" roleNameCol="role" />
   
<Context docBase="pooltest" path="/pooltest" reloadable="true">           
    <Resource auth="Container" name="jdbc/TestMySQL" type="javax.sql.DataSource" />            <ResourceParams name="jdbc/TestMySQL">               
        <parameter>                     
            <name>factory</name>                     
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>       
        </parameter>               
        <parameter>                     
            <name>maxActive</name>                     
            <value>100</value>               
        </parameter>               
        <parameter>                     
            <name>maxIdle</name>                     
            <value>30</value>               
        </parameter>               
        <parameter>                     
            <name>maxWait</name>                     
            <value>10000</value>               
        </parameter>               
        <parameter>                     
            <name>username</name>                     
            <value></value>               
        </parameter>               
        <parameter>                     
            <name>password</name>                     
            <value></value>               
        </parameter>               
        <parameter>                     
            <name>driverClassName</name>                     
            <value>com.mysql.jdbc.Driver</value>               
        </parameter>               
        <parameter>                     
            <name>url</name>                     
            <value>jdbc:mysql://localhost/jsp</value>               
        </parameter>           
    </ResourceParams>         
</Context>

Har du nogen ide om, hvordan den skal tilrettes?
Avatar billede arne_v Ekspert
03. september 2004 - 11:26 #31
Den er i et helt andet (og meget nemmere !) format.

Se min 30/08-2004 15:38:56 kommentar !
Avatar billede trp79 Nybegynder
03. september 2004 - 11:27 #32
hvad kaldes en ds.mxl fil iøvrigt? hvis jeg nu skulle søge nogle steder efter, hvilke indstillinger man ellers kan smide i?
Avatar billede trp79 Nybegynder
03. september 2004 - 11:47 #33
Okay en ds fil kaldes vel en data source fil, men jeg syntes stadig ikke, at jeg kan finde noget(har søgt på jboss hjemmeside) om hvordan min ds-fil skal se ud :(
Avatar billede arne_v Ekspert
03. september 2004 - 11:53 #34
Man har sjældent brug for flere end dem der er i mit eksempel.

Men der er noget doc. Har du downloadet og læst JBoss doc ?
Avatar billede trp79 Nybegynder
03. september 2004 - 22:41 #35
Hej igen, så har jeg downloaded og læst noget af JBoss doc igennem. Og det ser ud til, at jeg har rodet rundt i et par ting :(

Jeg vil jo så frygtelig gerne have dit eksempel fra din artikel til at virke, men jeg kan stadig ikke få det til det. Nu har jeg min testmysql-ds.xml det som du beskriver i din 30/08-2004 15:38:56 kommentar. Men har stadig et par problemer:

1)
Men når jeg starter JBoss nu får jeg en ny fejl:
2004-09-03 22:04:27,250 DEBUG [org.jboss.mq.security.SecurityManager] Failed to lookup securityDomain=jbossmq
javax.naming.NameNotFoundException: jbossmq not bound
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:495)

2)I din artikel beskriver du, at der skal indsættes en referance til brugerne i conf/server.xml, men hvor er det i JBoss?

3) Ligeledes beskriver du, at man skal konfigurerer en DataSource i en context (wep applikation)i conf/server.xml. Men hvordan gøres det i JBoss?

Før har jeg altså rodet rundt i datasource, reference til brugerne og konfiguration af DS i context :( Stille og roligt bliver man da lidt klogere...

Syntes godt nok du er en tålmodig mand, for jeg kager da godt nok rundt i det her!
Avatar billede trp79 Nybegynder
03. september 2004 - 22:43 #36
1) kan vel snildt skyldes 2 og 3.
Har i øvrigt læst kap. 9.1 i jboss doc. Er det jboss erstatning for det du vil vise med security i din artikel?
Avatar billede arne_v Ekspert
04. september 2004 - 11:17 #37
Den artikel beskriver "connection pool" og "container managed security"
i standalone Tomcat.

Det er fuldstændigt anderledes i konfiguration på JBoss.

Men er ens i applikationen.

For "connection pool" betyder det at:
  - du skal deploye en xxxx-ds.fil i.s.f. at rette i server.xml
  - du kan bruge samme JNDI lookup som artiklen i dine JSP sider / servlets

For "container managed security" betyder det at:
  - du skal gøre det 'the jboss way' i.s.f. at ligge en JDBC realm in i server.xml
  - du kan bruge samme linier i web.xml til at beskytte dine sider med
Avatar billede trp79 Nybegynder
05. september 2004 - 20:05 #38
Det er super Arne :)
Jeg må lige rode lidt med container managed security i jboss.
Du får mange tak for hjælpen og tålmodigheden. Beklager den lange svartid, der har været ved mig, men der er har problemer med den skolens mailserver, så jeg har ikke fået nogle mail fra exp endnu (et filter var blevet slået fra, så kun interne mails slap igennem)

Mvh
Torben
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