openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marina Vatkina <Marina.Vatk...@Sun.COM>
Subject Re: Using DDL generation in a Java EE environment?
Date Thu, 29 Mar 2007 20:18:27 GMT
Marc, Patrick,

I didn't look into the file story yet, but what I've seen as the result of using

           <property name="openjpa.jdbc.SynchronizeMappings"
                 value="buildSchema(SchemaAction='add,deleteTableContents')"/>

looks surprising: if I have there is an entity Foo with persistence fields 'x' 
and 'y' and a table FOO already exists in the database with columns A and B 
(there are no fields 'a' and 'b' in the entity), the table is not recreated, but 
the columns X and Y are added to the table FOO. The 'deleteTableContents' 
doesn't affect this behavior.

Is it an expected behavior?

What should I use to either create the table properly or get a message that such 
table already exist (and as in my case doesn't match the entity)?

thanks,
-marina

Marina Vatkina wrote:
> Then I'll first start with an easier task - check what happens in EE if 
> entities are not explicitly listed in the persistence.xml file :).
> 
> thanks,
> -marina
> 
> Marc Prud'hommeaux wrote:
> 
>> Marina-
>>
>>> Let me give it a try. How would the persistence.xml property look  
>>> like to generate .sql file?
>>
>>
>>
>> Actually, I just took a look at this, and it look like it isn't  
>> possible to use the "SynchronizeMappings" property to automatically  
>> output a sql file. The reason is that the property takes a standard  
>> OpenJPA plugin string that configures an instances of MappingTool,  
>> but the MappingTool class doesn't have a setter for the SQL file to  
>> write out to.
>>
>> So I think your only recourse would be to write your own adapter to  
>> to this that manually creates a MappingTool instance and runs it with  
>> the correct flags for outputting a sql file. Take a look at the  
>> javadocs for the MappingTool to get started, and let us know if you  
>> have any questions about proceeding.
>>
>>
>>
>> On Mar 20, 2007, at 4:59 PM, Marina Vatkina wrote:
>>
>>> Marc,
>>>
>>> Marc Prud'hommeaux wrote:
>>>
>>>> Marina-
>>>>
>>>>> They do in SE, but as there is no requirement to do it in EE,   
>>>>> people try to reduce the amount of typing ;).
>>>>
>>>>
>>>> Hmm ... we might not actually require it in EE, since we do  
>>>> examine  the ejb jar to look for persistent classes. I'm not sure  
>>>> though.
>>>> You should test with both listing them and not listing them. I'd  
>>>> be  interested to know if it works without.
>>>
>>>
>>>
>>> Let me give it a try. How would the persistence.xml property look  
>>> like to generate .sql file? Where will it be placed in EE  
>>> environment?  Does it use use the name as-is or prepend it with  some 
>>> path?
>>>
>>> thanks.
>>>
>>>> On Mar 20, 2007, at 4:19 PM, Marina Vatkina wrote:
>>>>
>>>>> Marc,
>>>>>
>>>>> Marc Prud'hommeaux wrote:
>>>>>
>>>>>> Marina-
>>>>>> On Mar 20, 2007, at 4:02 PM, Marina Vatkina wrote:
>>>>>>
>>>>>>> Marc,
>>>>>>>
>>>>>>> Thanks for the pointers. Can you please answer the following
 
>>>>>>> set  of  questions?
>>>>>>>
>>>>>>> 1. The doc requires that "In order to enable automatic  runtime
  
>>>>>>> mapping, you must first list all your persistent  classes". Is
 
>>>>>>> this  true for EE case also?
>>>>>>
>>>>>>
>>>>>>
>>>>>> Yes. People usually list them all in the <class> tags in the
   
>>>>>> persistence.xml file.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> They do in SE, but as there is no requirement to do it in EE,   
>>>>> people try to reduce the amount of typing ;).
>>>>>
>>>>> If OpenJPA can identify all entities in EE world, why can't it  do  
>>>>> the same for the schema generation?
>>>>>
>>>>> I'll check the rest.
>>>>>
>>>>> thanks,
>>>>> -marina
>>>>>
>>>>>>> 2. Section "1.2.Generating DDL SQL" talks about .sql files, 

>>>>>>> but   what I am looking for are "jdbc" files, i.e. files with
 
>>>>>>> the  lines  that can be used directly as java.sql statements
to  
>>>>>>> be  executed  against database.
>>>>>>
>>>>>>
>>>>>>
>>>>>> The output should be sufficient. Try it out and see if the  
>>>>>> format  is  something you can use.
>>>>>>
>>>>>>> 3. Is there a document that describes all possible values for
  
>>>>>>> the  "openjpa.jdbc.SynchronizeMappings" property?
>>>>>>
>>>>>>
>>>>>>
>>>>>> Unfortunately, no. Basically, the setting of the    
>>>>>> "SynchronizeMappings" property will be of the form "action   
>>>>>> (Bean1=value1,Bean2=value2)", where the "bean" values are  those
  
>>>>>> listed in org.apache.openjpa.jdbc.meta.MappingTool  (whose 
>>>>>> javadoc  you  can see http://incubator.apache.org/openjpa/ 
>>>>>> docs/latest/ javadoc/org/ apache/openjpa/jdbc/meta/ 
>>>>>> MappingTool.html ).
>>>>>>
>>>>>>> thank you,
>>>>>>> -marina
>>>>>>>
>>>>>>> Marc Prud'hommeaux wrote:
>>>>>>>
>>>>>>>> Marina-
>>>>>>>> On Mar 15, 2007, at 5:01 PM, Marina Vatkina wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am part of the GlassFish persistence team and was 

>>>>>>>>> wondering   how  does OpenJPA support JPA auto DDL generation
 
>>>>>>>>> (we call it   "java2db")  in a Java EE application server.
>>>>>>>>>
>>>>>>>>> Our application server supports java2db via creating
two  sets  
>>>>>>>>> of   files for each PU: a ...dropDDL.jdbc and   a 
>>>>>>>>> ...createDDL.jdbc  file  on deploy (i.e. before the 
 
>>>>>>>>> application  is actually loaded  into the  container)
and  
>>>>>>>>> then  executing 'create' file as the last  step in  

>>>>>>>>> deployment, and  'drop' file on undeploy or the 1st step
 in   
>>>>>>>>> redeploy. This  allows us to drop tables created by the
  
>>>>>>>>> previous  deploy  operation.
>>>>>>>>>
>>>>>>>>> This approach is done for both, the CMP and the default
 JPA    
>>>>>>>>> provider. It would be nice to add java2db support for
 OpenJPA  
>>>>>>>>> as   well, and I'm wondering if we need to do  anything

>>>>>>>>> special,  or  it'll  all work just by itself?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> We do have support for runtime creation of the schema via
 
>>>>>>>> the    "openjpa.jdbc.SynchronizeMappings" property. It is
 
>>>>>>>> described at:
>>>>>>>>   http://incubator.apache.org/openjpa/docs/latest/manual/
   
>>>>>>>> manual.html#ref_guide_mapping_synch
>>>>>>>> The property can be configured to run the mappingtool (also
   
>>>>>>>> described  in the documentation) at runtime against all the
   
>>>>>>>> registered  persistent classes.
>>>>>>>>
>>>>>>>>> Here are my 1st set of questions:
>>>>>>>>>
>>>>>>>>> 1. Which API would trigger the process, assuming the
 correct   
>>>>>>>>> values  are specified in the persistence.xml file?  Is
it:
>>>>>>>>> a) <provider>.createContainerEntityManagerFactory(...)?
or
>>>>>>>>> b) the 1st call to emf.createEntityManager() in this
VM?
>>>>>>>>> c) something else?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> b
>>>>>>>>
>>>>>>>>> 2. How would a user drop the tables in such environment?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I don't think it can be used to automatically drop then 

>>>>>>>> create    tables. The "mappingtool" can be executed manually
 
>>>>>>>> twice, the   first  time to drop all the tables, and the
 second 
>>>>>>>> time to re-  create them,  but I don't think it can be  
>>>>>>>> automatically done at   runtime with the   "SynchronizeMappings"

>>>>>>>> property.
>>>>>>>>
>>>>>>>>> 3. If the answer to either 1a or 1b is yes, how does
the  
>>>>>>>>> code    distinguish between the server startup time and
the   
>>>>>>>>> application   being loaded for the 1st time?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> That is one of the reasons why we think it would be  
>>>>>>>> inadvisable   to  automatically drop tables at runtime :)
>>>>>>>>
>>>>>>>>> 4. Is there a mode that allows creating a file with the
 
>>>>>>>>> jdbc    statements to create or drop the tables and constraints?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Yes. See:
>>>>>>>>   http://incubator.apache.org/openjpa/docs/latest/manual/
   
>>>>>>>> manual.html#ref_guide_ddl_examples
>>>>>>>>
>>>>>>>>> thank you,
>>>>>>>>> -marina
>>>>>>>>>
>>>>>>>
>>>>>
>>>
>>
> 


Mime
View raw message