2010-01-26 44 views
5

mùa xuân: 2.5.6.SEC01Sử dụng phiên scoped đậu mùa xuân với DWR

DWR: 2.0.5

Tôi muốn sử dụng một phiên scoped đậu từ DWR. Nó hoạt động tốt, khi tôi cấu hình đậu là một singleton. Tôi đọc gia sư này: (http://directwebremoting.org/dwr/server/integration/spring.html) và sửa đổi ứng dụng của tôiContext.xml, nhưng nó vẫn sai ở đâu đó.

applicationContext.xml của tôi:

http://pastebin.com/m8d57f18

Nó Ork tốt, nhưng khi tôi sử dụng một chức năng AJAX, tôi nhận được ngoại lệ này:

11: 31: 09.593 INFO [DefaultRemoter] Exec: DBTestAjaxFunc.testJNDI() 11: 31: 09,609 CẢNH BÁO [DefaultRemoter] Thực hiện phương thức không thành công: org.springframework.beans.factory.BeanCreationException: Lỗi khi tạo bean có tên 'scopedTarget.dbtestajax': Phạm vi 'phiên' không hoạt động cho chủ đề hiện tại ; hãy xem xét xác định một proxy phạm vi cho bean này nếu bạn có ý định đề cập đến nó từ một singlet ; lồng nhau ngoại lệ là java.lang.IllegalStateException: Không thread-ràng buộc yêu cầu được tìm thấy: Bạn có đề cập đến yêu cầu các thuộc tính bên ngoài của một yêu cầu web thực sự, hoặc xử lý một yêu cầu bên ngoài của ban đầu nhận chủ đề? Nếu bạn đang thực sự hoạt động trong một yêu cầu web và vẫn nhận được thông báo này, mã của bạn có lẽ là chạy ngoài DispatcherServlet/DispatcherPortlet: Trong trường hợp này, sử dụng RequestContextListener hoặc RequestContextFilter để lộ các yêu cầu hiện tại .

Dường như, proxy aop không được tạo nhưng tôi không biết tại sao.

Libs trong classpath:

  • aspectjrt.jar
  • aspectjweaver.jar
  • cglib-nodep-2.2.jar
  • dwr.jar
  • spring.jar
  • mùa xuân -aop.jar
  • spring-dwr-2.0.xsd
  • mùa xuân-web.jar
  • mùa xuân-webmvc.jar

Bất kỳ ý tưởng? (Cảm ơn!)

+0

Bạn đang đi qua một Spring 'DispatcherServlet' trong' web.xml'? – skaffman

+0

vâng, khi tôi không sử dụng bất kỳ tính năng ajax nào trong trang, nó hoạt động, giống như một dạng lò xo với bộ điều khiển vv. –

+0

Không, ý tôi là yêu cầu DWR truyền qua 'DispatcherServlet', hoặc nó sẽ trực tiếp đến DWR? – skaffman

Trả lời

7

Để đậu đậu phiên hoặc yêu cầu có phạm vi hoạt động trong Spring, một thứ gì đó phải liên kết yêu cầu và phiên hiện tại với chuỗi hiện tại.Thông thường, điều này sẽ được thực hiện bởi DispatcherServlet, nhưng nếu bạn không sử dụng, thì bạn cần một giải pháp thay thế.

Cách thay thế trong trường hợp này là RequestContextListener hoặc RequestContextFilter, một trong hai cách bạn có thể kết nối với số web.xml và cả hai hệ điều hành này sẽ cho phép bạn sử dụng hạt cà phê theo yêu cầu và phiên. Chỉ cần đảm bảo rằng bạn định cấu hình chúng trong web.xml để yêu cầu DWR đi qua chúng.

+0

Nếu trang web của tôi. xml có một DispatcherServlet mùa xuân và một DwrServlet, sau đó yêu cầu dwr sẽ đi qua DwrServlet phải không? Oh, và những lớp đó là các lớp "mặc định" .. nếu tôi muốn mở rộng chức năng của mình, tôi phải thừa kế từ chúng đúng không? Và nếu như vậy mã của tôi sẽ đi đâu và tôi sẽ đặt lớp thừa kế ở đâu và tôi sẽ liên kết với nó như thế nào? ... Thứ hai mặc dù tôi phải đặt ra một câu hỏi mới ... – KyleM

1

Kiểm tra xem bean phiên phạm vi có được truy cập bởi toàn cầu hay một singleton hay không. Trong trường hợp đó, bạn cần phải giảm phạm vi gọi đậu.

+0

Rõ ràng không phải là câu trả lời cho câu hỏi này, nhưng nó đã giải quyết được vấn đề của tôi. Cảm ơn. –

+0

Hoặc bằng cách tạo một proxy có phạm vi: @Scope (giá trị = "phiên", proxyMode = ScopedProxyMode.TARGET_CLASS) – Cojones

+0

Tôi nghĩ rằng sẽ yêu cầu teh RequestContextLisener và bean có giao diện. – ccppjava

Các vấn đề liên quan