SQLTemplate backend relies on Velocity. EJBQLQuery backend relies on 
SQLTemplate. No other queries rely on Velocity or SQLTemplate, and Java class 
loading is lazy. So Velocity is likely the culprit. 

So which Glassfish version do you have? Maybe I can try a basic test in an 
isolated environment.

Andrus

On Apr 16, 2013, at 1:26 PM, Rick Bonnett <[email protected]> wrote:
> OK. One more level down the rabbit hole now…
> 
> now that I have velocity seemingly loading, I get this in the stack trace:
> 
> Caused by: java.lang.NoClassDefFoundError: Could not initialize class 
> org.apache.cayenne.access.jdbc.SQLTemplateProcessor
> at 
> org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:102)
> at 
> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:280)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:442)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:70)
> at 
> org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:415)
> at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:877)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:412)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:122)
> at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:758)
> at 
> org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:1009)
> at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:748)
> at 
> org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:350)
> at 
> org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:106)
> at 
> org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:93)
> at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:989)
> at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:978)
> at 
> com.mesca.services.AccessorialService.allAccessorialRows(AccessorialService.java:90)
> 
> I'm very puzzled as to why other Cayenne classes and methods sen to work 
> fine. For example, this code works within the same web service:
> 
> ServerRuntime cayenneRuntime = new 
> ServerRuntime("cayenne-cayenne-service-template.xml");
> ObjectContext context = cayenneRuntime.getContext();
> 
> 
> SelectQuery select1 = new SelectQuery(Accessorial.class);
> Collection<Accessorial> accessorials = context.performQuery(select1);
> 
> Just in general, I've yet to get a SQLTemplate or EJBQLQuery to work when 
> running in glassfish, although using SelectQuery has given me no problems.
> 
> 
> 
> On Apr 16, 2013, at 9:59 AM, Mike Kienenberger 
> <[email protected]<mailto:[email protected]>> wrote:
> 
> My first guess would be that you have more than one velocity jar files
> in the classpath.
> I guess a second possibility is that you have no velocity jar files in
> the classpath.
> 
> We have an in-house findClass.jsp (backed by a ClassPath bean) which
> we use for problems like this to identify all definitions of a class
> in the classpath.   Unfortunately, I don't have permission to share
> this.
> 
> But you could probably come up with something similar:
> 
> 
> Here's a jsp that looks like it identifies the first definition of a class.
> http://mcpaint.tistory.com/13
> 
> 
> Here's how to show all resources
> http://www.mkyong.com/java/how-to-print-out-the-current-project-classpath/
> 
> You'd probably want to combine the two.
> 
> 
> Here's something else I came across while trying to find an example of
> what you needed.  Not sure how easy it would be to integrate with your
> app.
> 
> http://classpathhelper.sourceforge.net/
> 
> On Tue, Apr 16, 2013 at 8:38 AM, Rick Bonnett <[email protected]> wrote:
> I'm trying to use SQLTemplate queries and running into a strange problem. 
> This snippet works fine if I run it in a plain Java application, but fails if 
> I then use it within a web service running under Glassfish.
> In both cases I am using the same cayenne metadata files. I have also noticed 
> the same issue when using EJBQL queries.
> 
> 
> ServerRuntime cayenneRuntime = new 
> ServerRuntime("cayenne-cayenne-service-template.xml");
> ObjectContext context = cayenneRuntime.getContext();
> 
> 
> SQLTemplate  sql = new SQLTemplate(Accessorial.class,"SELECT * FROM 
> live.tbl_accessorials");
> String pgSql = "SELECT * FROM live.tbl_accessorials";
> sql.setTemplate(PostgresAdapter.class.getName(), pgSql);
> Collection<Accessorial> accessorials = context.performQuery(sql);
> 
> 
> I have tried this both with and without the Postgres specific template - same 
> result either way. Works fine in a console app, fails running under the web 
> server.
> 
> This seems to be the relevant section of the stack trace:
> 
> Caused by: java.lang.NoClassDefFoundError: 
> org/apache/velocity/runtime/parser/ParseException
> at 
> org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:102)
> at 
> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:280)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:442)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:70)
> at 
> org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:415)
> at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:877)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:412)
> at 
> org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:122)
> at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:758)
> at 
> org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:1009)
> at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:748)
> at 
> org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:350)
> at 
> org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:106)
> at 
> org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:93)
> at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:989)
> at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:978)
> at 
> com.mesca.services.AccessorialService.allAccessorialRows(AccessorialService.java:83)
> 
> Any ideas on what I am missing here?
> 
> Thanks
> Rick

Reply via email to