By the way, BigInteger does not have the same issue w.r.t. equals vs. compareTo that BigDecimal has. The only issue that I know of with BigInteger is its nullability, which means it's an inexact mapping to primary key columns that must be non-null.
If you're mapping from a primary key column with a size less than 9 I'd definitely want to have it mapped to long.
Craig On Jul 13, 2007, at 9:28 AM, Thierry Lach wrote:
In light of the comments about BigDecimal inconsistencies, I think I'd consider that to be a flaw in the JPA Eclipse Plugin. On 7/12/07, Janap <[EMAIL PROTECTED]> wrote:HI Craig, Thank you for the tip. But its surprising that when I generate Entity classes using the JPA Eclipse Plugin(from Europa) the default type it assigns is BigDecimal. Changing for one class is no problem butwhen I generate classes for a complete database , it might require somerefactoring I believe. Jan Craig L Russell wrote: > > 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) false > > This 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 >> around >> with 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 be >> loaded; ignoring. >>>> i compiled it with the PCEnhancer java class. In Eclipse it is just>> a click >> away. >> >> One more observation - I now am using the JPA Eclipse Plugin to >> generate >> Entity classes and then enhance them. During this process, the >> enhancer once >> complained 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 my>>> work to home :-) The classes are entity classes which I have reverse>>> engineered using the Hibernate Tools plugin for Eclipse. They are >>> EJB 3.0 >>> compatible 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=false >>>>> >>>>> >>>>> My Tomcat starts properly with the following log : >>>>> >>>>> 15 TRACE [main] openjpa.Runtime - Setting the following >>>>> properties >>>>> from >>>>> "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 0 >>>>> milliseconds. >>>>> >>>>> >>>>> 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 >>>>> somehow >>>>> enhanced : >>>>> >>>>> 62 TRACE [http-8090-Processor24] openjpa.MetaData - Using >>>>> metadata >>>>> factory>>>>> "[EMAIL PROTECTED]>>>>> dc8". >>>>> 93 INFO [http-8090-Processor24] openjpa.jdbc.JDBC - Using >>>>> dictionary >>>>> class "org.apache.openjpa.jdbc.sql.OracleDictionary". >>>>> 202 INFO [http-8090-Processor24] openjpa.MetaData - Found 1 >>>>> classes >>>>> with >>>>> metadata in 16 milliseconds. >>>>> 95452 TRACE [http-8090-Processor24] openjpa.Enhance - "test/ >>>>> Scale" >>>>> requires runtime enhancement: true >>>>> 95561 WARN [http-8090-Processor24] openjpa.Enhance - An >>>>> exception was >>>>> thrown 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)>>>>> at >>>>> org.apache.openjpa.enhance.PCClassFileTransformer.transform >>>>> (PCClassFileTransformer.java:124) >>>>> at >>>>> sun.instrument.TransformerManager.transform >>>>> (TransformerManager.java:122) >>>>> at >>>>> sun.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...probably >>>>> someone >>>>> could find the flaw.. >>>>> >>>>> best wishes >>>>> Jan >>>>> >>>>> >>>>> >>>>> Hi, >>>>> >>>>> This is from the Java SE 6 documentation. It explains "all": >>>>> Command-Line Interface >>>>> >>>>> On implementations with a command-line interface, an agent is >>>>> started >>>>> by adding this option to the command-line: >>>>> >>>>> -javaagent:jarpath[=options] >>>>> jarpath is the path to the agent JAR file. options is the agent >>>>> options. This switch may be used multiple times on the same >>>>> command->>>>> line, thus creating multiple agents. More than one agent may use>>>>> the >>>>> same 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 >>>>> similar>>>>> in 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 >>>>> first >>>>> attempts 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 the>>>>> agent is started after VM startup. When the agent is started >>>>> using a >>>>> command-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 which>>>>> typically loads the class containing the application main >>>>> method. The>>>>> premain 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 >>>>> class >>>>> cannot be loaded, or because the agent class does not have an >>>>> appropriate premain method), the JVM will abort. If a premain >>>>> method >>>>> throws an uncaught exception, the JVM will abort. >>>>> >>>>> >>>>> >>>>> Craig >>>>> >>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> http://www.nabble.com/Runtime-Enhancement-in-Eclipse- >>>>> tf4049770.html#a11537016 >>>>> Sent 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#a11564182 >> Sent 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! > > > > -- View this message in context:http://www.nabble.com/Runtime-Enhancement-in-Eclipse- tf4049770.html#a11565895Sent 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
