Just a quick follow-up to report on progress on the template conversions. I 
managed to get the single mergepoint override working by changing the order of 
outlets and mergepoints. As for the bean classes, I was able to just use the 
baseBean.vm template and it’s outlet directly from the distribution.

Let me know if you are still interested in the two patches I mentioned below.

cheers,
h.


> On Jul 2, 2015, at 5:04 PM, Helge Weissig <hel...@grajagan.org> wrote:
> 
> Thanks Thomas! Some comments and follow-up questions below:
> 
>> On Jul 1, 2015, at 6:03 PM, Thomas Fox <thomas....@seitenbau.com> wrote:
>> 
>> Helge Weissig wrote:
>> 
>>> I forgot about the HTML filter this group uses… pardon the crappy 
>>> formatting. 
>>> Here is a text-only version:
>>> 
>>> Our code base is heavily invested in some of the functionality removed from 
>>> torque 4.0 
>>> and I was wondering if any one had some advice on a migration path:
>>> 
>>>     1. We make extensive use of village records obtained via 
>>>        BasePeer.doSelect(Criteria), for example. 
>>>        Those results could probably be considered a view of the data
>>>        and I am wondering if that would be the correct/recommended/best 
>>> approach.
>> 
>> If you are using this to read data only, have a look at the RecordMapper 
>> functionality. A record mapper maps DB Columns to an object. You can use 
>> different record mappers for the same table (e.g. it can be passed in 
>> through SomePeer.doSelect(Criteria, RecordMapper<TT>), so have different 
>> object representations. For a generic village-record-like representation, 
>> see org.apache.torque.om.mapper.ObjectListMapper (personally I do not like 
>> this representation, put perhaps it serves your needs). Views (now supported 
>> !) are also a more db-centric option. 
> 
> It looks like RecordMapper may ultimately be the best way to go although I 
> still like the idea of using views because it would simplify the assembly of 
> criteria in our code and allow for some generalization as well.
> 
> 
>>>     2. We have added our own caching implementation 
>>>        (configurable via the schema definition) to the Object.vm 
>>>        and Peer.vm templates. I have read through the new generator 
>>> documentation 
>>>        and the customization part of the OR Mapping Reference 
>>>        
>>> (https://db.apache.org/torque/torque-4.0/documentation/orm-reference/customizing-generation.html)
>>>        but I don’t seem to be able to find the relevant information 
>>>        to put it all together. Basically, I would like to override one or 
>>> more templates.
>>>        I think I know how to specify that in an outlet, but do I also need 
>>> the control configuration
>>>        in the conf directory? The maven plugin (we use maven) has 
>>> configuration parameters 
>>>        for overrideConfigDir and overrideConfigPackage… do I need to set 
>>> those?
>> 
>> Have you checked the code-gen tutorial 
>> (http://db.apache.org/torque/torque-4.0/documentation/tutorial/orm/index.html)
>>  for a basic understanding ?
>> Also, there is an example in the torque test project 
>> (https://svn.apache.org/repos/asf/db/torque/torque4/trunk/torque-test/src/main/torque-gen)
>>  which basically does what you want, i.e. overrides the Peer template 
>> (adding @SuppressWarnings annotations). The torque generation config which 
>> invokes this can be found in 
>> https://svn.apache.org/repos/asf/db/torque/torque4/trunk/torque-test/pom.xml 
>> lines 183ff.
>> To be more specific:
>> Yes, you need at least an empty control configuration.
>> You need to set either overrideConfigDir or overrideConfigPackage, depending 
>> whether the additional templates can be found in the file sytsem or in the 
>> classpath.
>> Please ask again if you cannot get it working. Although more complicated 
>> :-(, the new generator is much more extensible than the old one. In the 
>> current trunk, you can even use groovy templates :-)
> 
> OK, I am getting somewhere, my outlets and templates are now found, alas I am 
> having trouble achieving the desired results. For one, I am not able to get 
> the example at the bottom of 
> http://db.apache.org/torque/torque-4.0/documentation/codegen-reference/configuration.html
>  
> <http://db.apache.org/torque/torque-4.0/documentation/codegen-reference/configuration.html>
>  
> <http://db.apache.org/torque/torque-4.0/documentation/codegen-reference/configuration.html
>  
> <http://db.apache.org/torque/torque-4.0/documentation/codegen-reference/configuration.html>>
>  to work. I get an error about a missing outlet tag. I think if I could 
> actually override just a specific mergepoint, that would get me 90% of the 
> way. However, we also modified the Bean.vm template to allow us to continue 
> using fields like “modified” or “new” in our DB schema. Those attributes and 
> their corresponding getters and setters are now in the template 
> bean/base/baseBean.vm which is referenced from the bean.xml outlet 
> definition. If I simply bring over that definition, the generator seems to 
> expect to also find all other templates contained in bean.xml to be in my 
> code base. If I remove all mergepoints and other outlets and simply keep the 
> empty outlet definition for bean/base/baseBean.vm, my template is used with a 
> lot of warning messages about missing mergepoint definitions and in the end, 
> the generated beans contain only the above mentioned attributes and their 
> getters and setters and nothing else. Putting it more generally, how can I 
> override parts of a template that also contains a lot of mergepoints?
> 
>>>     3. This is more of a maven question, maybe, alas I have the feeling
>>>        it isn’t actually possible to implement through it, but is there a 
>>> way
>>>        to skip the code generation steps if the schema sources have not 
>>> changed?
>> 
>> Sorry, this is not any more possible. The problem is to reliably find out 
>> whether the file has changed (e.g. some OS do not change the change date of 
>> a file when it is copied). I have seen more than one situation where schema 
>> changes did not get picked up because of this option, so my personal 
>> recommendation is not to rely on such a mechanism. Also, mvn generate is 
>> typically not executed often while developing, so long generation times 
>> should not slow down development too much.
>> However, if you still want to use it, you can patch the Mojo class in the 
>> Torque maven plugin, this should not be too difficult (please share if you 
>> choose to do it).
> 
> The documentation has the plugin executions happen during the 
> generate-sources phase, which is part of the standard build life-cycle and is 
> executed whenever I run a ‘mvn compile’ for example. I understand the 
> limitations you mention though and will dig into other plugins to see what 
> they do. It may also just be handy to have an option to skip in the plugin, 
> the patch for which I am happy to contribute when I have it.
> 
>> 
>>>     4. I know how to configure logging for the generator, but the switch 
>>> between loglevel
>>>        WARN and INFO is quite severe. Is there a way to log at INFO level 
>>> but only to a file, 
>>>        not to the console? We use log4j throughout our project.
>> 
>> Yes, check the log4j configuration documentation. Basically you need to 
>> override the log4j configuration file and use two appenders, one file 
>> appender and one console appender, with different log levels. The log4j 
>> configuration needs to be in the classpath 
>> /org/apache/torque/generator/log4j.properties and it must have a higher 
>> classpath priority than the torque-generator.jar (I am currently not sure 
>> how to achieve this using maven, the last resort is patching the generator)
> 
> OK, looking at the code in the generator, this is a little kludgy to achieve 
> via maven itself, at least as far as I can determine. Basically, one would 
> have to package the log4j.properties file under the path 
> /org/apache/torque/generator in a jar file that then would be listed as a 
> dependency for the torque maven plugin. Alternatively, a patch in the 
> generator could check if a logger has already been configured (e.g. via the 
> -Dlog4j.properties system variable) and just use that one if it is the case. 
> I tested both methods and they work. Personally I prefer the second approach 
> and I am happy to contribute the patch if you let me know how.
> 
> Thanks again for your help!!
> 
> cheers,
> h.
> 
> 
> 
>> Good luck!
>> 
>>  Thomas
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org 
>> <mailto:torque-user-unsubscr...@db.apache.org>
>> For additional commands, e-mail: torque-user-h...@db.apache.org 
>> <mailto:torque-user-h...@db.apache.org>

Reply via email to