2010-01-26 19 views
5

primavera: 2.5.6.SEC01sesión en ámbito de frijol de primavera con DWR

DWR: 2.0.5

me gustaría usar una sesión en ámbito de frijol de DWR. Funciona bien, cuando configuro el bean como singleton. Leí este tutor: (http://directwebremoting.org/dwr/server/integration/spring.html) y modifiqué mi applicationContext.xml, pero todavía está mal en alguna parte.

Mi applicationContext.xml:

http://pastebin.com/m8d57f18

Se Örk bien, pero cuando se utiliza una función de AJAX, consigo esta excepción:

11: 31: 09,593 INFO [DefaultRemoter] Exec: DBTestAjaxFunc.testJNDI() 11: 31: 09.609 WARN [DefaultRemoter] Falló la ejecución del método: org.springframework.beans.factory.BeanCreationException: Error al crear bean con el nombre 'scopedTarget.dbtestajax': Ámbito 'session' no está activo para el hilo actual ; considere la posibilidad de definir un proxy de ámbito para este bean si tiene la intención de referirse a él desde un singleton ; la excepción jerarquizada es java.lang.IllegalStateException: No subproceso de solicitud de ruedas encontrado: ¿Está refiere a la solicitud atributos exterior de una solicitud web actual, o procesar una solicitud exterior de la rosca originalmente recibir ? Si en realidad se está operando dentro de una petición web y sigue recibiendo este mensaje , el código se ejecuta probablemente fuera del DispatcherServlet/DispatcherPortlet: En este caso, utilice RequestContextListener o RequestContextFilter para exponer la petición actual .

Parece que el proxy aop no se creó, pero no sé por qué.

Liberaciones en la ruta de clase:

  • aspectjrt.jar
  • aspectjweaver.jar
  • cglib-nodep-2.2.jar
  • dwr.jar
  • spring.jar
  • primavera -aop.jar
  • spring-dwr-2.0.xsd
  • primavera-web.jar
  • primavera-webmvc.jar

Alguna idea? (¡Gracias!)

+0

¿Está pasando por un Spring 'DispatcherServlet' en' web.xml'? – skaffman

+0

sí, cuando no uso ninguna característica de ajax en la página, funciona, como un formulario de primavera con controlador, etc. –

+0

No, me refiero a que la solicitud DWR pasa por el 'DispatcherServlet', ¿o va directamente a DWR? – skaffman

Respuesta

7

Para que los beans de sesión o de ámbito de solicitud funcionen en Spring, algo tiene que asociar la solicitud actual y la sesión con el hilo actual.Normalmente, esto se haría por DispatcherServlet, pero si no está usando eso, entonces necesita una alternativa.

La alternativa en este caso es RequestContextListener o RequestContextFilter, cualquiera de los cuales se puede conectar a su web.xml, y ambos os que permitirá utilizar los granos de petición-y de ámbito de sesión. Solo asegúrese de configurarlos en web.xml para que las solicitudes DWR pasen por ellos.

+0

Si mi web. xml tiene un DispatcherServlet de primavera Y un DwrServlet, entonces la solicitud de dwr pasaría por DwrServlet ¿no? Ah, y esas clases son las clases "predeterminadas" ... si quiero extender su funcionalidad tendré que heredar de ellas ¿verdad? Y si es así, ¿dónde iría mi código y dónde pondría la clase heredada y cómo me vincularía? ... En segundo lugar, debería hacer de esto una nueva pregunta ... – KyleM

1

Compruebe si se accede a la sesión con ámbito bean por un global o un singleton. En ese caso, necesita reducir el alcance de llamar bean.

+0

Obviamente no es la respuesta a esta pregunta, pero resolvió mi problema. Gracias. –

+0

O al crear un proxy con ámbito: @Scope (value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) – Cojones

+0

Creo que requerirá que RequestContextLisener y el bean tengan una interfaz. – ccppjava

Cuestiones relacionadas