Hi Janap,I'd recommend you stay far away from BigDecimal fields for primary keys, even if your provider supports them.
The BigDecimal class has a strange notion of equality that makes it unsuitable for primary keys. That is, given BigDecimal instances A and B, the following can be true:
(0 == A .compareTo B) true (A .equals B) falseThis means that using BigDecimal instances as keys in Maps is impossible. Well, really hard.
The JPA spec requires support for float and double types but strongly discourages their use. BigDecimal isn't even required due to these problems.
Craig On Jul 12, 2007, at 9:56 AM, Janap wrote:
Whoa....Enhancement works finally. I gave up the javaagent,fiddled aroundwith the Enhancer Task which all said the same thing ..... [openjpac] 141 INFO [main] openjpa.MetaData - Found 1 classes with metadata in 0 milliseconds.[openjpac] 141 INFO [main] openjpa.MetaData - The class "test.Scale" listed in the openjpa.MetaDataFactory configuration property could not beloaded; ignoring.i compiled it with the PCEnhancer java class. In Eclipse it is just a clickaway.One more observation - I now am using the JPA Eclipse Plugin to generate Entity classes and then enhance them. During this process, the enhancer oncecomplained that I cannot use "BigDecimal" as primary key. The enhancement worked after I converted it to "long". Any ideas? Janap wrote:I have tried both the combinations Marc. I believe it might be a problem with my class. I have to post the source tomorrow since I dont carry mywork to home :-) The classes are entity classes which I have reverseengineered using the Hibernate Tools plugin for Eclipse. They are EJB 3.0compatible and work fine with hibernate. I appreciate the help, best wishes and good night Jan Patrick Linskey-2 wrote:Can you post the source to the Scale class? -Patrick On 7/11/07, Janap <[EMAIL PROTECTED]> wrote:Thx for the info Craig...got that step working. Didnt have time for research for the past2 days,but now Im back with another problem. My web project structure is as follows.. /build/classes/test/Scale.class /src/test/Scale.java /web/WEB-INF/classes/META-INF/persistence.xml /web/WEB-INF/classes/META-INF/orm.xml /web/WEB-INF/lib Following is my persistence.xml <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="myPersistence" transaction-type="RESOURCE_LOCAL"> <provider> org.apache.openjpa.persistence.PersistenceProviderImpl </provider> <mapping-file>orm.xml</mapping-file> <class>test.Scale</class> <properties> <property name="openjpa.ConnectionURL" value="myurl"/> <property name="openjpa.ConnectionDriverName" value="oracle.jdbc.driver.OracleDriver"/><property name="openjpa.ConnectionUserName" value="myuser"/> <property name="openjpa.ConnectionPassword" value="mypwd"/><property name="openjpa.Log" value="DefaultLevel=TRACE,Tool=TRACE"/> </properties> </persistence-unit> </persistence> For runtime enhancement is start Tomcat within Eclipse with the following VM arguments :-javaagent:C:\Programme\Eclipse\workspace\JPAWebTest\web\WEB-INF \lib\openjpa-all-0.9.6-incubating.jar=addDefaultConstructor=false ,properties=C:\Programme\Eclipse\workspace\JPAWebTest\web\WEB-INF \classes\META-INF\persistence.xml,-scanDevPath=true, directory=C:\Programme\Eclipse\workspace\JPAWebTest\build \classes,-tmpClassLoader=falseMy Tomcat starts properly with the following log :15 TRACE [main] openjpa.Runtime - Setting the following propertiesfrom"file:/C:/Programme/Eclipse/workspace/JPAWebTest/web/WEB-INF/ classes/META-INF/persistence.xml"into configuration: {openjpa.ConnectionUserName=myuser, openjpa.ConnectionPassword=mypwd, openjpa.Log=DefaultLevel=TRACE,Tool=TRACE, openjpa.MetaDataFactory=Resources=orm.xml, Types=test.Scale,javax.persistence.provider=org.apache.openjpa.persistence.Persisten ceProviderImpl,openjpa.ConnectionURL=myurl, openjpa.ConnectionDriverName=oracle.jdbc.driver.OracleDriver}186 INFO [main] openjpa.MetaData - Found 1 classes with metadata in 0milliseconds. Then as I try to run this servlet code : EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistence"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Scale tab = new Scale(5); em.persist(tab); em.getTransaction().commit(); em.close(); emf.close();I run into an exception which I believe because my class is not somehowenhanced :62 TRACE [http-8090-Processor24] openjpa.MetaData - Using metadatafactory"[EMAIL PROTECTED] dc8". 93 INFO [http-8090-Processor24] openjpa.jdbc.JDBC - Using dictionaryclass "org.apache.openjpa.jdbc.sql.OracleDictionary".202 INFO [http-8090-Processor24] openjpa.MetaData - Found 1 classeswith metadata in 16 milliseconds.95452 TRACE [http-8090-Processor24] openjpa.Enhance - "test/ Scale"requires runtime enhancement: true95561 WARN [http-8090-Processor24] openjpa.Enhance - An exception wasthrown while attempting to perform class file transformation on "test/Scale":java.lang.IllegalArgumentException: java.lang.ClassNotFoundException:test.Scale at serp.util.Strings.toClass(Strings.java:211) at serp.util.Strings.toClass(Strings.java:140) at serp.bytecode.BCClass.getType(BCClass.java:565) at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:187) atorg.apache.openjpa.enhance.PCClassFileTransformer.transform (PCClassFileTransformer.java:124)atsun.instrument.TransformerManager.transform (TransformerManager.java:122)atsun.instrument.InstrumentationImpl.transform (InstrumentationImpl.java:155)at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620)I tried out different combinations but was not successful...probablysomeone could find the flaw.. best wishes Jan Hi, This is from the Java SE 6 documentation. It explains "all": Command-Line InterfaceOn implementations with a command-line interface, an agent is startedby adding this option to the command-line: -javaagent:jarpath[=options] jarpath is the path to the agent JAR file. options is the agentoptions. This switch may be used multiple times on the same command- line, thus creating multiple agents. More than one agent may use thesame jarpath. An agent JAR file must conform to the JAR file specification.The manifest of the agent JAR file must contain the attribute Premain-Class. The value of this attribute is the name of the agent class.The agent class must implement a public static premain method similarin principle to the main application entry point. After the Java Virtual Machine (JVM) has initialized, each premain method will be called in the order the agents were specified, then the real application main method will be called. Each premain method must return in order for the startup sequence to proceed.The premain method has one of two possible signatures. The JVM firstattempts to invoke the following method on the agent class: public static void premain(String agentArgs, Instrumentation inst); If the agent class does not implement this method then the JVM will attempt to invoke: public static void premain(String agentArgs); The agent class may also have an agentmain method for use when theagent is started after VM startup. When the agent is started using acommand-line option, the agentmain method is not invoked. The agent class will be loaded by the system class loader (see ClassLoader.getSystemClassLoader). This is the class loader whichtypically loads the class containing the application main method. Thepremain methods will be run under the same security and classloader rules as the application main method. There are no modeling restrictions on what the agent premain method may do. Anything application main can do, including creating threads, is legal from premain. Each agent is passed its agent options via the agentArgs parameter. The agent options are passed as a single string, any additional parsing should be performed by the agent itself.If the agent cannot be resolved (for example, because the agent classcannot be loaded, or because the agent class does not have anappropriate premain method), the JVM will abort. If a premain methodthrows an uncaught exception, the JVM will abort. Craig -- View this message in context:http://www.nabble.com/Runtime-Enhancement-in-Eclipse- tf4049770.html#a11537016Sent from the OpenJPA Users mailing list archive at Nabble.com.-- Patrick Linskey 202 669 5907--View this message in context: http://www.nabble.com/Runtime- Enhancement-in-Eclipse-tf4049770.html#a11564182Sent from the OpenJPA Users mailing list archive at Nabble.com.
Craig Russell Architect, Sun Java Enterprise System http://java.sun.com/products/jdo 408 276-5638 mailto:[EMAIL PROTECTED] P.S. A good JDO? O, Gasp!
smime.p7s
Description: S/MIME cryptographic signature
