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>
Annonceindlæg fra Deloitte
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" ...
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??
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).
11. september 2003 - 14:00
#4
Den sidste skal jeg nok lige havde skåret ud i pap.
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)
11. september 2003 - 14:22
#6
11. september 2003 - 14:59
#7
Kigger lige på. Men vil du ikke havde dine point, for dine svar??
11. september 2003 - 15:07
#8
selvfølgelig
11. september 2003 - 15:08
#9
Men skriv igen hvis du ikke kan få det til at virke. Jeg har eksempler. Derhjemme.
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 ;-)
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??
12. september 2003 - 12:24
#12
OK kommer i aften
12. september 2003 - 12:31
#13
På forhånd mange tak. Så fifler jeg lidt vidre med det her
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).
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???
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>
16. september 2003 - 13:20
#17
Jeg prøver at bikse noget.
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 ??
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.
16. september 2003 - 13:32
#20
Jeg smider det op på min server, så kan hente den derfra.
16. september 2003 - 13:38
#21
Det er sku i orden. Men hvor ligger din server???
16. september 2003 - 13:53
#22
Jeg poster en URL. Når jeg har smidt det op. I aften (er på arbejde nu) !
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
17. september 2003 - 00:47
#24
Det driller lidt. Jeg fortsætter imorgen.
17. september 2003 - 09:38
#25
Når jeg er ikke den eneste ;-)
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??
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 ?
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
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.
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.
Kurser inden for grundlæggende programmering