Here is the code for DefaultAdhocObjectFactory that is the cluprit: ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = DefaultAdhocObjectFactory.class.getClassLoader(); } try { // fails here return Class.forName(className, true, classLoader); }
Looks like the PasswordReset.class is coming from some unexpected ClassLoader. I don't have firsthand experience with Atmosphere deployments (on Tomcat or otherwise), so not sure what happens there ClassLoader-wise. So a random question - do you keep Cayenne jar in the same war as your PasswordReset.class? Or if you are not using a .war, how is your deployed app structured? Andrus On Jul 31, 2013, at 5:58 PM, Andrew Willerding <awillerd...@itsurcom.com> wrote: > Hi Markus, > > I have recompiled so many times I've lost count ;-) The way I figure it, the > PasswordReset.class file must be in my classpath or else the code couldn't be > executed in the first place and it is clearly being executed in order to > generate the error. It's just that Cayenne can't instantiate an object > because it can't find the class. Could something obsure it somehow? > > Andrew > > > > On 07/31/2013 10:52 AM, Markus Reich wrote: >> Does the PasswordReset.class File really exists in your classpath? Maybe >> try to recompile? >> >> Markus >> >> >> 2013/7/31 Andrew Willerding <awillerd...@itsurcom.com> >> >>> I'm still having problems with this one Netbeans 7.3.1 project ( jdk >>> 1.7.0.17 with Tomcat 7.0.27) involving Vaadin and Cayenne. I have now >>> upgraded Cayenne to 3.1B2 and made all the project modifications I needed >>> to in order to use Cayenne 3.1 (thanks Andrus!). I'm hoping the error >>> message is more meaningful to someone on this list. I don't understand how >>> the error message indicates it can't find the class PasswordReset and yet >>> the code is being executed from within PasswordReset. To me it looks like >>> it can't load the class because of some security restriction but what is >>> creating the security restriction? >>> >>> Any help or guidance would be greatly appreciated. >>> >>> Here is the offending code: >>> >>> public class PasswordReset extends _PasswordReset { >>> private static final long serialVersionUID = 5548297136969252200L; >>> >>> >>> private static PasswordReset newPasswordReset(User user) { >>> ObjectContext oc = MyApplication.**getObjectContext(); >>> PasswordReset pr = null; >>> String token = null; >>> >>> System.out.println("oc=" + oc); >>> >>> pr = oc.newObject(PasswordReset.**class); >>> pr.setExpireDT(DateTime.now().**plusMinutes(15).toDate()); >>> token = Password.getEncryptPW(user.**getUsername() + >>> DateTime.now().toString(), Password.generateNewSalt()); >>> pr.setToken(token); >>> // pr.setUserId(user.getUser_id()**); >>> user.setToPasswordReset(pr); >>> oc.commitChanges(); >>> return pr; >>> >>> } >>> } >>> >>> Here is the output >>> >>> >>> oc=org.apache.cayenne.access.**DataContext@59d8afee >>> >>> org.apache.cayenne.**CayenneRuntimeException: [v.3.1B2 Feb 05 2013 20:43:40] >>> Error instantiating object. >>> at org.apache.cayenne.access.**DataContext.newObject(** >>> DataContext.java:554) >>> at org.apache.cayenne.access.**DataContext.newObject(** >>> DataContext.java:531) >>> at com.callistacti.callwatch.**database.PasswordReset.** >>> newPasswordReset(**PasswordReset.java:76) >>> at com.callistacti.callwatch.**database.PasswordReset.** >>> getPasswordResetToken(**PasswordReset.java:44) >>> at com.callistacti.callwatch.**Windows.WindowLogin$3.** >>> buttonClick(WindowLogin.java:**174) >>> 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) >>> at com.vaadin.event.EventRouter.**fireEvent(EventRouter.java:**167) >>> at com.vaadin.server.**AbstractClientConnector.**fireEvent(** >>> AbstractClientConnector.java:**968) >>> at com.vaadin.ui.Button.**fireClick(Button.java:368) >>> at com.vaadin.ui.Button$1.click(**Button.java:57) >>> 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.server.**ServerRpcManager.**applyInvocation(** >>> ServerRpcManager.java:168) >>> at com.vaadin.server.**ServerRpcManager.**applyInvocation(** >>> ServerRpcManager.java:118) >>> at com.vaadin.server.**communication.**ServerRpcHandler.handleBurst(** >>> ServerRpcHandler.java:214) >>> at com.vaadin.server.**communication.**ServerRpcHandler.handleRpc(** >>> ServerRpcHandler.java:111) >>> at com.vaadin.server.**communication.PushHandler$2.** >>> run(PushHandler.java:158) >>> at com.vaadin.server.**communication.PushHandler.** >>> callWithUi(PushHandler.java:**289) >>> at com.vaadin.server.**communication.PushHandler.** >>> onRequest(PushHandler.java:**308) >>> at org.atmosphere.cpr.**AsynchronousProcessor.action(** >>> AsynchronousProcessor.java:**259) >>> at org.atmosphere.cpr.**AsynchronousProcessor.**suspended(** >>> AsynchronousProcessor.java:**166) >>> at org.atmosphere.container.**TomcatWebSocketUtil.doService(** >>> TomcatWebSocketUtil.java:137) >>> at org.atmosphere.container.**Tomcat7AsyncSupportWithWebSock** >>> et.service(**Tomcat7AsyncSupportWithWebSock**et.java:59) >>> at org.atmosphere.cpr.**AtmosphereFramework.**doCometSupport(** >>> AtmosphereFramework.java:1448) >>> at org.atmosphere.websocket.**DefaultWebSocketProcessor.**dispatch(** >>> DefaultWebSocketProcessor.**java:219) >>> at org.atmosphere.websocket.**DefaultWebSocketProcessor$2.** >>> run(DefaultWebSocketProcessor.**java:183) >>> at org.atmosphere.util.**VoidExecutorService.execute(** >>> VoidExecutorService.java:101) >>> at org.atmosphere.websocket.**DefaultWebSocketProcessor.**dispatch(** >>> DefaultWebSocketProcessor.**java:178) >>> at org.atmosphere.websocket.**DefaultWebSocketProcessor.** >>> invokeWebSocketProtocol(**DefaultWebSocketProcessor.**java:167) >>> at org.atmosphere.container.**TomcatWebSocketHandler.**onTextMessage(* >>> *TomcatWebSocketHandler.java:**92) >>> at org.apache.catalina.websocket.**MessageInbound.onTextData(** >>> MessageInbound.java:74) >>> at org.apache.catalina.websocket.**StreamInbound.onData(** >>> StreamInbound.java:129) >>> at org.apache.coyote.http11.**upgrade.UpgradeProcessor.** >>> upgradeDispatch(**UpgradeProcessor.java:83) >>> at org.apache.coyote.**AbstractProtocol$**AbstractConnectionHandler.** >>> process(AbstractProtocol.java:**563) >>> at org.apache.tomcat.util.net.**JIoEndpoint$SocketProcessor.** >>> run(JIoEndpoint.java:307) >>> at java.util.concurrent.**ThreadPoolExecutor.runWorker(** >>> ThreadPoolExecutor.java:1145) >>> at java.util.concurrent.**ThreadPoolExecutor$Worker.run(** >>> ThreadPoolExecutor.java:615) >>> at java.lang.Thread.run(Thread.**java:722) >>> Caused by: org.apache.cayenne.**CayenneRuntimeException: [v.3.1B2 Feb 05 >>> 2013 20:43:40] Failed to load class >>> com.callistacti.callwatch.**database.PasswordReset: >>> com.callistacti.callwatch.**database.PasswordReset >>> at org.apache.cayenne.map.**ObjEntity.getJavaClass(** >>> ObjEntity.java:302) >>> 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:58) >>> at org.apache.cayenne.reflect.**LazyClassDescriptorDecorator.** >>> createObject(**LazyClassDescriptorDecorator.**java:72) >>> at org.apache.cayenne.access.**DataContext.newObject(** >>> DataContext.java:551) >>> ... 43 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.di.spi.**DefaultAdhocObjectFactory.** >>> getJavaClass(**DefaultAdhocObjectFactory.**java:102) >>> at org.apache.cayenne.util.Util.**getJavaClass(Util.java:658) >>> at org.apache.cayenne.map.**ObjEntity.getJavaClass(** >>> ObjEntity.java:299) >>> >> >> > >