John,

On Mon, Nov 14, 2011 at 4:23 PM, John Huss <[email protected]> wrote:
> I have a similar function.  Would there be any interest in adding something
> like this to Cayenne?

it is probably best if you would explain more in detail what exactly
you would like to add to cayenne on the [email protected]
mailinglist

Here is an interesting link for you, if you would like to contribute
to Cayenne (or any other ASF project):
http://www.apache.org/foundation/getinvolved.html

Cheers
Christian

>
> John
>
> On Mon, Nov 14, 2011 at 6:01 AM, Andrus Adamchik 
> <[email protected]>wrote:
>
>> You can get DataDomain directly from ServerRuntime:
>>
>>  DataDomain domain = runtime.getDataDomain();
>>
>> even better - you can get direct access to DataSource:
>>
>>  DataSource ds = runtime.getDataSource("mynodename");
>>
>> So in 3.1 with DI various stack objects are a bit closer to your
>> application.
>>
>> Andrus
>>
>> On Nov 14, 2011, at 2:55 PM, Marco Gattei wrote:
>>
>> > Hi everyone....
>> >
>> >    i'm tryng to write a translator from implementing select count(*)
>> from a Select Query with an Expression built at runtime via
>> ExpressionFactory.
>> >
>> > In cayenne 2.0 i was using something like:
>> >
>> > static class CountTranslator extends SelectTranslator {
>> >
>> >        @Override
>> >
>> >        public String createSqlString() throws Exception {
>> >
>> >            String sql = super.createSqlString();
>> >
>> >            int index = sql.indexOf(" FROM ");
>> >
>> >            return "SELECT COUNT(*)" + sql.substring(index);
>> >
>> >        }
>> >
>> >    }
>> >
>> >    public int count(SelectQuery query,
>> >
>> >            DataNode node) {
>> >
>> >        CountTranslator translator = new CountTranslator();
>> >
>> >        translator.setQuery(query);
>> >
>> >        translator.setAdapter(node.getAdapter());
>> >
>> >
>>  translator.setEntityResolver(DataContext.getThreadDataContext().getEntityResolver());
>> >
>> >
>> >
>> >
>> >        Connection con = null;
>> >
>> >        PreparedStatement stmt = null;
>> >
>> >        try {
>> >
>> >            con = node.getDataSource().getConnection();
>> >
>> >            translator.setConnection(con);
>> >
>> >            stmt = translator.createStatement();
>> >
>> >            ResultSet rs = stmt.executeQuery();
>> >
>> >            if (rs.next()) {
>> >
>> >                return rs.getInt(1);
>> >
>> >            }
>> >
>> >            throw new org.apache.cayenne.CayenneRuntimeException("Count
>> query returned no result");
>> >
>> >        } catch (Exception e) {
>> >
>> >            throw new CayenneRuntimeException("Cannot count", e);
>> >
>> >        } finally {
>> >
>> >            try {
>> >
>> >                if (stmt != null) {
>> >
>> >                    stmt.close();
>> >
>> >                }
>> >
>> >                if (con != null) {
>> >
>> >                    con.close();
>> >
>> >                }
>> >
>> >            } catch (Exception ex) {
>> >
>> >                throw new CayenneRuntimeException("Cannot close
>> connection", ex);
>> >
>> >            }
>> >
>> >        }
>> >
>> >    }
>> >
>> >
>> >
>> > the only thing i nedeed was to get the current connection from the
>> context which i did using something like
>> >
>> >
>>  DataContext.getThreadDataContext().getParentDataDomain().getDataNodes().iterator().next()
>> >
>> >
>> > but now in Cayenne 3.1 this method seems to be invalid 'cause i cannot
>> get ParentDataDomain from ObjectContext.
>> > Besides that this works only if have a datanode set for the domain.
>> > Is there any other or better way to proceed?
>> >
>> > Thanks, Marco
>> >
>> >
>> >
>> >
>>
>>
>



-- 
http://www.grobmeier.de

Reply via email to