Avatar billede markymarc Nybegynder
11. september 2003 - 13:30 Der er 30 kommentarer og
1 løsning

Hvorfor vil den her cmp bean ikke virke?

Jeg har lavet nedestående cmp bean. Men når jeg prøver at køre den, få jeg følgende fejl fra jboss:
arning: The type of the primkey-field must match the primary key class.

Hvar har jeg dog gjort galt?


<entity>
            <ejb-name>ProductEJB</ejb-name>
            <home>ejb.ProductHome</home>
            <remote>ejb.Product</remote>
            <local-home>ejb.LocalProductHome</local-home>
            <local>ejb.LocalProduct</local>
            <ejb-class>ejb.ProductBean</ejb-class>
            <persistence-type>Container</persistence-type>
            <prim-key-class>ejb.ProductPK</prim-key-class>
            <reentrant>False</reentrant>
            <cmp-version>2.x</cmp-version>
            <abstract-schema-name>ProductBean</abstract-schema-name>
            <cmp-field>
                <field-name>productID</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>name</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>description</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>basePrice</field-name>
            </cmp-field>
            <primkey-field>productID</primkey-field>
            <query>
                <query-method>
                    <method-name>findByName</method-name>
                    <method-params>
                        <method-param>java.lang.String</method-param>
                    </method-params>
                </query-method>
                <ejb-ql>
                    <![CDATA[WHERE name = ?1]]>
                </ejb-ql>
            </query>
            <query>

    <query-method>

    <method-name>findByDescription</method-name>

    <method-params>

      <method-param>java.lang.String</method-param>

    </method-params>

    </query-method>

    <ejb-ql>

    <![CDATA[WHERE description = ?1]]>

    </ejb-ql>

  </query>



  <query>

    <query-method>

    <method-name>findByBasePrice</method-name>

    <method-params>

      <method-param>double</method-param>

    </method-params>

    </query-method>

    <ejb-ql>

    <![CDATA[WHERE basePrice = ?1]]>

    </ejb-ql>

  </query>



  <query>

    <query-method>

    <method-name>findExpensiveProducts</method-name>

    <method-params>

      <method-param>double</method-param>

    </method-params>

    </query-method>

    <ejb-ql>

    <![CDATA[WHERE basePrice > ?1]]>

    </ejb-ql>

  </query>



  <query>
    <query-method>
    <method-name>findCheapProducts</method-name>
    <method-params>
      <method-param>double</method-param>
    </method-params>
    </query-method>
    <ejb-ql>
    <![CDATA[WHERE basePrice < ?1]]>
    </ejb-ql>

  </query>

  <query>
    <query-method>
    <method-name>findAllProducts</method-name>
    <method-params>
    </method-params>
    </query-method>
    <ejb-ql>
    <![CDATA[WHERE productID IS NOT NULL]]>
    </ejb-ql>
  </query>
  <query>
      <query-method>
          <method-name>findByPrice</method-name>
          <method-params>
              <method-param>double</method-param>
          </method-params>
      </query-method>
      <ejb-ql>
          <![CDATA[WHERE basePrice = ?1]]>
      </ejb-ql>
  </query>
  </entity>
    </enterprise-beans>
    <assembly-descriptor>
        <container-transaction>
            <description>Transaction attributes for 'HelloEJB' methods</description>
            <method>
                <ejb-name>HelloEJB</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <description>Transaction attributes for 'AccountEJB' methods</description>
            <method>
                <ejb-name>AccountEJB</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
        <container-transaction>
            <description>Transaction attributes for 'ProductEJB' methods</description>
            <method>
                <ejb-name>ProductEJB</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
    </assembly-descriptor>
</ejb-jar>
Avatar billede arne_v Ekspert
11. september 2003 - 13:34 #1
Fejlmeddelsen er vel ret klar:

#The type of the primkey-field must match the primary key class.

#<prim-key-class>ejb.ProductPK</prim-key-class>

#<primkey-field>productID</primkey-field>
                     
JBoss mener ikke at productID's data type i databasen og klassen
ejb.ProductPK "matcher" ...
Avatar billede markymarc Nybegynder
11. september 2003 - 13:50 #2
Jo det kan jeg godt forstå. Men jeg tro den kigge i den forkerte databse. Hvordan sætter jeg min cmp bean til at kigge i en bestemme database.
Jeg har lavet to db xml filer, hvor jeg laver min database sources.
Også er det jeg vil havde min productbean til at kigge i den ene af dem anden. Kan man ikke det??
Avatar billede arne_v Ekspert
11. september 2003 - 13:57 #3
Du angiver EJB <-> datasource i den app-server specifikke deployment
descriptor.

Du angiver datasource <-> JDBC URL i serverens konfiguration (i JBoss
er det i den service descriptor du deployer).
Avatar billede markymarc Nybegynder
11. september 2003 - 14:00 #4
Den sidste skal jeg nok lige havde skåret ud i pap.
Avatar billede arne_v Ekspert
11. september 2003 - 14:20 #5
Det er en lidt lang forklaring at skriv eher.

Download JBoss dokumentationen og læs den.

Du kan måske få nogle hints her:

http://www.eksperten.dk/spm/289945

(groft sagt kopierer du hsqldb-service.xml til dindb-service.xml og retter
indholdet til)
Avatar billede arne_v Ekspert
11. september 2003 - 14:22 #6
Du kan hente JBoss docs her:

http://prdownloads.sourceforge.net/jboss/QuickStart-30x.pdf?download

der er et kapitel om det her.
Avatar billede markymarc Nybegynder
11. september 2003 - 14:59 #7
Kigger lige på.
Men vil du ikke havde dine point, for dine svar??
Avatar billede arne_v Ekspert
11. september 2003 - 15:07 #8
selvfølgelig
Avatar billede arne_v Ekspert
11. september 2003 - 15:08 #9
Men skriv igen hvis du ikke kan få det til at virke.

Jeg har eksempler.

Derhjemme.
Avatar billede markymarc Nybegynder
11. september 2003 - 15:14 #10
Det skal jeg nok. Nu gå jeg lige hjem og læser det kapitel om cmp i det jboss doc du sendte mig.
Men forløbig tak igen igen ;-)
Avatar billede markymarc Nybegynder
12. september 2003 - 12:17 #11
Nu har jeg prøvet mig lidt frem. Det virker stadig ikk. Kunne du sende mig eller lægge de eksempler du snakket om herop??
Avatar billede arne_v Ekspert
12. september 2003 - 12:24 #12
OK

kommer i aften
Avatar billede markymarc Nybegynder
12. september 2003 - 12:31 #13
På forhånd mange tak. Så fifler jeg lidt vidre med det her
Avatar billede arne_v Ekspert
12. september 2003 - 18:57 #14
Her kommer det.

ejb-jar.xml fragment (som definerer EJB navn):

        <entity>
            <ejb-name>User</ejb-name>
            <home>dk.vajhoej.useradmin.ejb.UserHome</home>
            <remote>dk.vajhoej.useradmin.ejb.User</remote>
            <ejb-class>dk.vajhoej.useradmin.ejb.UserBean</ejb-class>
            <persistence-type>Container</persistence-type>
            <prim-key-class>java.lang.String</prim-key-class>
            <reentrant>false</reentrant>
            <cmp-field>
                <field-name>name</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>password</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>created</field-name>
            </cmp-field>
            <cmp-field>
                <field-name>lastAccess</field-name>
            </cmp-field>
            <primkey-field>name</primkey-field>
        </entity>

jboss.xml fragment (som kobler EJB navn med JNDI navn):

        <entity>
            <ejb-name>User</ejb-name>
            <jndi-name>useradmin/User</jndi-name>
        </entity>

jaws.xml fragment [det er oprindeligt udviklet til JBoss 2.4.x og dengang
hed filen det] (som tilknytter EJB til en data source):

        <entity>
            <ejb-name>User</ejb-name>
            <datasource>Work</datasource>
            <table-name>AppUser</table-name>
            <create-table>false</create-table>
            <cmp-field>
                <field-name>name</field-name>
                <column-name>Name</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>password</field-name>
                <column-name>Password</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>created</field-name>
                <column-name>Created</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>lastAccess</field-name>
                <column-name>LastAccess</column-name>
            </cmp-field>
        </entity>

De filer deployes så i ejb jar filen.

Data sourcen er så defineret som en service [i mit test environment
bruger jeg bare Access] i work-service.xml:

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

<server>

  <mbean code="org.jboss.resource.connectionmanager.LocalTxConnectionManager" name="jboss.jca:service=LocalTxCM,name=Work">

    <depends optional-attribute-name="ManagedConnectionFactoryName">
      <mbean code="org.jboss.resource.connectionmanager.RARDeployment" name="jboss.jca:service=LocalTxDS,name=Work">

        <attribute name="JndiName">Work</attribute>
        <attribute name="ManagedConnectionFactoryProperties">
          <properties>
            <config-property name="ConnectionURL" type="java.lang.String">jdbc:odbc:Work</config-property>
            <config-property name="DriverClass" type="java.lang.String">sun.jdbc.odbc.JdbcOdbcDriver</config-property>
            <config-property name="UserName" type="java.lang.String"></config-property>
            <config-property name="Password" type="java.lang.String"></config-property>
          </properties>
        </attribute>

        <depends optional-attribute-name="OldRarDeployment">jboss.jca:service=RARDeployment,name=JBoss LocalTransaction JDBC Wrapper</depends>

      </mbean>
    </depends>
    <depends optional-attribute-name="ManagedConnectionPool">
      <mbean code="org.jboss.resource.connectionmanager.JBossManagedConnectionPool" name="jboss.jca:service=LocalTxPool,name=Work">

        <attribute name="MinSize">0</attribute>
        <attribute name="MaxSize">50</attribute>
        <attribute name="BlockingTimeoutMillis">5000</attribute>
        <attribute name="IdleTimeoutMinutes">15</attribute>
        <attribute name="Criteria">ByContainer</attribute>
      </mbean>
    </depends>
    <depends optional-attribute-name="CachedConnectionManager">jboss.jca:service=CachedConnectionManager</depends>

    <depends optional-attribute-name="JaasSecurityManagerService">jboss.security:service=JaasSecurityManager</depends>

    <attribute name="TransactionManager">java:/TransactionManager</attribute>

    <depends>jboss.jca:service=RARDeployer</depends>

  </mbean>

</server>

Den deployes så sammen med ejb jar (ear i mit tilfælde).
Avatar billede markymarc Nybegynder
16. september 2003 - 13:02 #15
Nu har jeg prøvet op og ned. Jeg har lavet ejb-jar.xml, en jbosscmp-jdbc.xml og en testCdb-ds.xml(kan ses nedrest). Og det vil bare ikke virke. Skulle du Arne havde en cmp-ejb.jar færdig pakket ready to use i jboss pakke liggende? som er pakket med jbosscmp-jdbc.sml og ejb-jar.xml filerne. Så jeg har noget derr virker jeg kan referere til???
Avatar billede markymarc Nybegynder
16. september 2003 - 13:03 #16
Hov glemte jo den testCdb-ds.xml, her er den:

<datasources>
  <local-tx-datasource>
    <jndi-name>TestCDB</jndi-name>
    <connection-url>jdbc:mysql://172.16.1.15:3306/test/</connection-url>
    <driver-class>org.gjt.mm.mysql.Driver</driver-class>
    <user-name>root</user-name>
    <password></password>
  </local-tx-datasource>

</datasources>
Avatar billede arne_v Ekspert
16. september 2003 - 13:20 #17
Jeg prøver at bikse noget.
Avatar billede markymarc Nybegynder
16. september 2003 - 13:29 #18
Aaarrrrr det ville bare være alletiders. For jeg er ved at blive sindsyg af at side og fedte med det ene og andet xml doc og intet virker. Skal du bruge min mail eller hvordan ??
Avatar billede markymarc Nybegynder
16. september 2003 - 13:32 #19
Jeg mener, vil gerne i gang med at lave noget der virker og udvikle noget, har så mange ideer.
Avatar billede arne_v Ekspert
16. september 2003 - 13:32 #20
Jeg smider det op på min server, så kan hente den derfra.
Avatar billede markymarc Nybegynder
16. september 2003 - 13:38 #21
Det er sku i orden. Men hvor ligger din server???
Avatar billede arne_v Ekspert
16. september 2003 - 13:53 #22
Jeg poster en URL.

Når jeg har smidt det op.

I aften (er på arbejde nu) !
Avatar billede markymarc Nybegynder
16. september 2003 - 13:57 #23
Ja ja giv dig endelig go tid. Jeg er bare taknemmelig for din hjælp. og på forhånd tak
Avatar billede arne_v Ekspert
17. september 2003 - 00:47 #24
Det driller lidt.

Jeg fortsætter imorgen.
Avatar billede markymarc Nybegynder
17. september 2003 - 09:38 #25
Når jeg er ikke den eneste ;-)
Avatar billede arne_v Ekspert
17. september 2003 - 21:45 #26
Her er dem så:

http://80.199.19.48/arne/eksperten/JBOSS_CMP/

deployable jar
deployable service XML
ZIP med source
test program brugt til test
Avatar billede markymarc Nybegynder
24. september 2003 - 14:29 #27
Tak for din kode. Jeg har kigget på det og har også fået lavet en simple code selv. Men når jeg skal deploy den i jboss. Brokker den sig stadig. Men jeg kan godt finde min ejb inden under JMX console. Gider du kigge på min kode for mig, og se om du kan se noget jeg gør galt??
Avatar billede arne_v Ekspert
24. september 2003 - 14:35 #28
Det kan jeg vel godt.

Kan du smide den på en server eller vil du sende den per email ?
Avatar billede markymarc Nybegynder
24. september 2003 - 15:38 #29
Jeg har lagt det hele i en zip fil her http://www.wildride.dk/eksperten/
Der er en lille readme fil der forklare lidt. Du må spørge hvis der er noget, du ikke forstå.
På forhånd tak
Avatar billede arne_v Ekspert
24. september 2003 - 22:27 #30
Jeg forstå ikke den deployment fejl (BCEL).

Men jeg kan ihvertfald se en potentiel kilde.

I databasen erklærer du ts1 som int og primær nøgle.

I ejb-jar.xml erklærer du ikke et felt som primær nøgle
(der er ingen primkey-field tag) og primær nøgles type
(prim-key-class tag) til at være tst.TestKey som
referer til et felt key, som ikke er i databasen.
Avatar billede markymarc Nybegynder
25. september 2003 - 16:01 #31
Så virker det sku. Havde fået lagt et og andet bcel.jar i min java. Sikke noget lort. Efter jeg fjernet det så virker det bare. Men mange tak for hjælpen, men der komme jo nok mere :-) Og tak for svaret om xml.
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging