Re: 3.3.1 to 4.0 migration
Helge Weissig <[email protected]> Tue, 7 Jul 2015 17:48:28 -0700
| Newsgroups | gmane.comp.jakarta.turbine.torque.user |
|---|---|
| Message-ID | <[email protected]> |
--Apple-Mail=_1B06FF29-0EA8-4C02-A0BF-ADD0DB9AED15 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 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=E2=80=99s 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 <[email protected]> wrote: >=20 > Thanks Thomas! Some comments and follow-up questions below: >=20 >> On Jul 1, 2015, at 6:03 PM, Thomas Fox <[email protected]> = wrote: >>=20 >> Helge Weissig wrote: >>=20 >>> I forgot about the HTML filter this group uses=E2=80=A6 pardon the = crappy formatting.=20 >>> Here is a text-only version: >>>=20 >>> Our code base is heavily invested in some of the functionality = removed from torque 4.0=20 >>> and I was wondering if any one had some advice on a migration path: >>>=20 >>> 1. We make extensive use of village records obtained via=20 >>> BasePeer.doSelect(Criteria), for example.=20 >>> Those results could probably be considered a view of the data >>> and I am wondering if that would be the = correct/recommended/best approach. >>=20 >> 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.=20 >=20 > 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. >=20 >=20 >>> 2. We have added our own caching implementation=20 >>> (configurable via the schema definition) to the Object.vm=20 >>> and Peer.vm templates. I have read through the new generator = documentation=20 >>> and the customization part of the OR Mapping Reference=20 >>> = (https://db.apache.org/torque/torque-4.0/documentation/orm-reference/custo= mizing-generation.html) >>> but I don=E2=80=99t seem to be able to find the relevant = information=20 >>> 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=20 >>> for overrideConfigDir and overrideConfigPackage=E2=80=A6 do I = need to set those? >>=20 >> Have you checked the code-gen tutorial = (http://db.apache.org/torque/torque-4.0/documentation/tutorial/orm/index.h= tml) 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.x= ml 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 :-) >=20 > 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/con= figuration.html = <http://db.apache.org/torque/torque-4.0/documentation/codegen-reference/co= nfiguration.html> = <http://db.apache.org/torque/torque-4.0/documentation/codegen-reference/co= nfiguration.html = <http://db.apache.org/torque/torque-4.0/documentation/codegen-reference/co= nfiguration.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 =E2=80=9Cmodified=E2=80= =9D or =E2=80=9Cnew=E2=80=9D 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? >=20 >>> 3. This is more of a maven question, maybe, alas I have the = feeling >>> it isn=E2=80=99t actually possible to implement through it, = but is there a way >>> to skip the code generation steps if the schema sources have = not changed? >>=20 >> 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). >=20 > 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 =E2=80=98mvn compile=E2=80=99 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. >=20 >>=20 >>> 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,=20 >>> not to the console? We use log4j throughout our project. >>=20 >> 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) >=20 > 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. >=20 > Thanks again for your help!! >=20 > cheers, > h. >=20 >=20 >=20 >> Good luck! >>=20 >> Thomas >>=20 >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] = <mailto:[email protected]> >> For additional commands, e-mail: [email protected] = <mailto:[email protected]> --Apple-Mail=_1B06FF29-0EA8-4C02-A0BF-ADD0DB9AED15--