Hi Michael,

I'm using Netbeans. I thought of that. I've gone as far as creating an entirely new PasswordReset2, ResetPassword, PasswdRst tables and associated objects to see if there was something related to the compiling but exactly the same thing happens at exactly the same line. What gets me is that the Password table is almost identical in its relationship to the User table but I have no problems retrieving the Password object using user.getPassword().

I've also checked the corresponding .war file that is created and the .class file exists for PasswordReset exactly where the Password.class file exists so I'm not convinced it's a path issue.

Very weird.

Andrew


On 06/20/2013 12:43 PM, Michael Gentry wrote:
Hi Andrew,

I'm not sure how you are running (Maven, Eclipse, etc, etc), but I would
guess PasswordReset exists at compile-time, but isn't available at
run-time, therefore it can't be found on the CLASSPATH while you are
running (in a .jar or .class).

mrg


On Thu, Jun 20, 2013 at 12:14 PM, Andrew Willerding <
awillerd...@itsurcom.com> wrote:

I'm going nuts over trying to figure out what I'm doing wrong.  I am
getting the error

java.lang.**ClassNotFoundException: com.callistacti.callwatch.**
database.PasswordReset

(see full log trace below) when I'm simply trying to retrieve the
associated PasswordReset object - which I don't always expect to exist.

Here's the offending line of code:

             PasswordReset pr = user.getPasswordReset();

from

         try {
             //Find the User
             User user = User.findUser(username);
             if (user == null){
                 return token;
             }
             PasswordReset pr = user.getPasswordReset();
             try {
                 if (pr == null ) {
                     pr = newPasswordReset(username);
                 } else {
                     if (pr.getExpireDT().before(**DateTime.now().toDate()))
{
                         DataContext dc = DataContext.createDataContext(**
);
                         token = Password.getEncryptPW(username +
DateTime.now().toString());
                         pr.setToken(token);
                         dc.commitChanges();
                     } else {
                         token = pr.getToken();
                     }
                 }
             } catch (CayenneRuntimeException e) {
CCommon.getInstance().logInfo(**"PasswordReset::**getPasswordResetToken::"
+ e.getMessage(),e);
             }
         } finally {
CCommon.getInstance().logInfo(**"PasswordReset::**getPasswordResetToken::*
*Complete for " + username + "Result=" + token);
         }



I don't understand why is the classnotfound happening?  Both the source
code and the class is generated as far as I can tell.  Are some of my
dependencies out-of-whack?

Here is the extraction from my map.xml file

        <db-entity name="Password" catalog="BlueCrane">
         <db-attribute name="EmailPassword" type="VARCHAR" length="32"/>
         <db-attribute name="Password" type="VARCHAR" isMandatory="true"
length="128"/>
         <db-attribute name="UserID" type="INTEGER" isMandatory="true"
length="10"/>
         <db-attribute name="password_id" type="INTEGER"
isPrimaryKey="true" isMandatory="true" length="10"/>
         <db-attribute name="salt" type="VARBINARY" isMandatory="true"
length="8"/>
     </db-entity>
     <db-entity name="PasswordReset" catalog="BlueCrane">
         <db-attribute name="UserID" type="INTEGER" isMandatory="true"/>
         <db-attribute name="expireDT" type="TIMESTAMP" isMandatory="true"/>
         <db-attribute name="passwordreset_id" type="INTEGER"
isPrimaryKey="true" isMandatory="true"/>
         <db-attribute name="token" type="VARCHAR" isMandatory="true"
length="128"/>
     </db-entity>
<db-entity name="User" catalog="BlueCrane">
         <db-attribute name="AccessLevel" type="SMALLINT"
isMandatory="true" length="5"/>
         <db-attribute name="ExpireDate" type="DATE"/>
         <db-attribute name="Status" type="SMALLINT" isMandatory="true"
length="5"/>
         <db-attribute name="company_id" type="INTEGER" isMandatory="true"
length="10"/>
         <db-attribute name="contact_id" type="INTEGER" isMandatory="true"
length="10"/>
         <db-attribute name="user_id" type="INTEGER" isPrimaryKey="true"
isMandatory="true"/>
         <db-attribute name="username" type="VARCHAR" length="128"/>
     </db-entity>

     <obj-entity name="Password" 
className="com.callistacti.**callwatch.database.Password"
dbEntityName="Password">
         <obj-attribute name="emailPassword" type="java.lang.String"
db-attribute-path="**EmailPassword"/>
         <obj-attribute name="id" type="java.lang.Integer"
db-attribute-path="password_**id"/>
         <obj-attribute name="password" type="java.lang.String"
db-attribute-path="Password"/>
         <obj-attribute name="salt" type="byte[]" db-attribute-path="salt"/>
     </obj-entity>
     <obj-entity name="PasswordReset" className="com.callistacti.**
callwatch.database.**PasswordReset" dbEntityName="PasswordReset">
         <obj-attribute name="expireDT" type="java.util.Date"
db-attribute-path="expireDT"/>
         <obj-attribute name="token" type="java.lang.String"
db-attribute-path="token"/>
     </obj-entity>
     <obj-entity name="User" 
className="com.callistacti.**callwatch.database.User"
dbEntityName="User">
         <obj-attribute name="accessLevel" type="java.lang.Short"
db-attribute-path="**AccessLevel"/>
         <obj-attribute name="expireDate" type="java.util.Date"
db-attribute-path="ExpireDate"**/>
         <obj-attribute name="status" type="java.lang.Short"
db-attribute-path="Status"/>
         <obj-attribute name="userID" type="java.lang.Integer"
db-attribute-path="user_id"/>
         <obj-attribute name="username" type="java.lang.String"
db-attribute-path="username"/>
         <pre-persist method-name="onPrePersist"/>
     </obj-entity>

     <db-relationship name="User" source="Password" target="User"
toMany="false">
         <db-attribute-pair source="UserID" target="user_id"/>
     </db-relationship>
     <db-relationship name="User" source="PasswordReset" target="User"
toMany="false">
         <db-attribute-pair source="UserID" target="user_id"/>
     </db-relationship>
<db-relationship name="Password" source="User" target="Password"
toMany="false">
         <db-attribute-pair source="user_id" target="UserID"/>
     </db-relationship>
     <db-relationship name="PasswordReset" source="User"
target="PasswordReset" toMany="false">
         <db-attribute-pair source="user_id" target="UserID"/>
     </db-relationship>

     <obj-relationship name="user" source="Password" target="User"
deleteRule="Nullify" db-relationship-path="User"/>
     <obj-relationship name="user" source="PasswordReset" target="User"
deleteRule="Nullify" db-relationship-path="User"/>

     <obj-relationship name="password" source="User" target="Password"
deleteRule="Nullify" db-relationship-path="**Password"/>
     <obj-relationship name="passwordReset" source="User"
target="PasswordReset" deleteRule="Nullify" db-relationship-path="**
PasswordReset"/>

And here is the log trace:

2013-06-20 12:06:37,025 [http-bio-8080-exec-16] INFO  CallWatch -
0F1E2D->PasswordReset::**getPasswordResetToken::Start for callista
2013-06-20 12:06:37,041 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - --- will run 1 query.
2013-06-20 12:06:37,043 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - --- transaction started.
2013-06-20 12:06:37,045 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - SELECT t0.user_id, t0.Status,
t0.AccessLevel, t0.contact_id, t0.username, t0.ExpireDate, t0.company_id
FROM User t0 WHERE t0.username = ? [bind: 1->username:'callista']
2013-06-20 12:06:37,047 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - === returned 1 row. - took 2 ms.
2013-06-20 12:06:37,049 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - +++ transaction committed.
2013-06-20 12:06:37,052 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - --- will run 1 query.
2013-06-20 12:06:37,053 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - --- transaction started.
2013-06-20 12:06:37,055 [http-bio-8080-exec-16] INFO
org.apache.cayenne.access.**QueryLogger - *** error.
2013-06-20 12:06:37,087 [http-bio-8080-exec-16] INFO  CallWatch -
0F1E2D->PasswordReset::**getPasswordResetToken::**Complete for
callistaResult=null
Jun 20, 2013 12:06:37 PM com.vaadin.server.**DefaultErrorHandler doDefault
SEVERE:
Caused by: org.apache.cayenne.**CayenneRuntimeException: [v.3.0.2 Jun 11
2011 09:26:09] Query exception.
     at org.apache.cayenne.access.**DataDomainQueryAction.**
nextQueryException(**DataDomainQueryAction.java:**549)
     at org.apache.cayenne.access.**DataNode.performQueries(**
DataNode.java:276)
     at org.apache.cayenne.access.**DataDomainQueryAction.**runQuery(**
DataDomainQueryAction.java:**422)
     at org.apache.cayenne.access.**DataDomainQueryAction.access$**
000(DataDomainQueryAction.**java:69)
     at org.apache.cayenne.access.**DataDomainQueryAction$2.**transform(**
DataDomainQueryAction.java:**395)
     at org.apache.cayenne.access.**DataDomain.runInTransaction(**
DataDomain.java:850)
     at org.apache.cayenne.access.**DataDomainQueryAction.**
runQueryInTransaction(**DataDomainQueryAction.java:**392)
     at org.apache.cayenne.access.**DataDomainQueryAction.execute(**
DataDomainQueryAction.java:**121)
     at org.apache.cayenne.access.**DataDomain.onQuery(DataDomain.**
java:743)
     at org.apache.cayenne.util.**ObjectContextQueryAction.**runQuery(**
ObjectContextQueryAction.java:**334)
     at org.apache.cayenne.util.**ObjectContextQueryAction.**
executePostCache(**ObjectContextQueryAction.java:**104)
     at org.apache.cayenne.util.**ObjectContextQueryAction.**execute(**
ObjectContextQueryAction.java:**91)
     at org.apache.cayenne.access.**DataContext.onQuery(**
DataContext.java:1293)
     at org.apache.cayenne.access.**DataContext.performQuery(**
DataContext.java:1282)
     at org.apache.cayenne.access.**ToOneFault.doResolveFault(**
ToOneFault.java:81)
     at org.apache.cayenne.access.**ToOneFault.resolveFault(**
ToOneFault.java:54)
     at org.apache.cayenne.**CayenneDataObject.**readProperty(**
CayenneDataObject.java:225)
     at com.callistacti.callwatch.**database.auto._User.**
getPasswordReset(_User.java:**153)
     at com.callistacti.callwatch.**database.PasswordReset.**
getPasswordResetToken(**PasswordReset.java:30)
     at com.callistacti.callwatch.**Windows.WindowLogin$2.**
buttonClick(WindowLogin.java:**135)
     at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method)
     at sun.reflect.**NativeMethodAccessorImpl.**invoke(**
NativeMethodAccessorImpl.java:**57)
     at sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**
DelegatingMethodAccessorImpl.**java:43)
     at java.lang.reflect.Method.**invoke(Method.java:601)
     at com.vaadin.event.**ListenerMethod.receiveEvent(**
ListenerMethod.java:508)
     ... 34 more
Caused by: java.lang.**ClassNotFoundException: com.callistacti.callwatch.*
*database.PasswordReset
     at java.net.URLClassLoader$1.run(**URLClassLoader.java:366)
     at java.net.URLClassLoader$1.run(**URLClassLoader.java:355)
     at java.security.**AccessController.doPrivileged(**Native Method)
     at java.net.URLClassLoader.**findClass(URLClassLoader.java:**354)
     at java.lang.ClassLoader.**loadClass(ClassLoader.java:**423)
     at java.lang.ClassLoader.**loadClass(ClassLoader.java:**356)
     at java.lang.Class.forName0(**Native Method)
     at java.lang.Class.forName(Class.**java:266)
     at org.apache.cayenne.util.Util.**getJavaClass(Util.java:588)
     at org.apache.cayenne.map.**ObjEntity.getJavaClass(**
ObjEntity.java:286)
     at org.apache.cayenne.reflect.**PersistentDescriptorFactory.**
getDescriptor(**PersistentDescriptorFactory.**java:57)
     at org.apache.cayenne.reflect.**ClassDescriptorMap.**createDescriptor(
**ClassDescriptorMap.java:128)
     at org.apache.cayenne.reflect.**LazyClassDescriptorDecorator.**
checkDescriptorInitialized(**LazyClassDescriptorDecorator.**java:59)
     at org.apache.cayenne.reflect.**LazyClassDescriptorDecorator.**
getEntity(**LazyClassDescriptorDecorator.**java:83)
     at org.apache.cayenne.access.**trans.SelectTranslator.**
appendQueryColumns(**SelectTranslator.java:327)
     at org.apache.cayenne.access.**trans.SelectTranslator.**
buildResultColumns(**SelectTranslator.java:290)
     at org.apache.cayenne.access.**trans.SelectTranslator.**
createSqlString(**SelectTranslator.java:126)
     at org.apache.cayenne.access.**trans.QueryAssembler.**createStatement(
**QueryAssembler.java:194)
     at org.apache.cayenne.access.**jdbc.SelectAction.**
performAction(SelectAction.**java:70)
     at org.apache.cayenne.access.**DataNodeQueryAction.runQuery(**
DataNodeQueryAction.java:87)
     at org.apache.cayenne.access.**DataNode.performQueries(**
DataNode.java:269)
     ... 57 more



Reply via email to