问题标签 [open-session-in-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1555 浏览

java - 在任何地方访问 HttpServletRequest

我曾经有一个基于 JSF 2 应用程序 cookie 的对话过滤器中的打开会话。现在我想建立相同的机制,但与技术无关。重用一些代码,我在一个扩展了OncePerRequestFilter的类中编写了这个:

现在,当我到达时,bindConversation(conversationId, request)我只需添加一个请求属性,该属性指向映射到 Hibernate Session的 conversationId 。

无论如何,在 JSF 中,我可以使用它来访问当前请求并使用FacesContext.getCurrentInstance().getExternalContext().getRequest()它实现CurrentSessionContext。但是在普通的 servlet 中,我如何以编程方式访问当前请求?

注意:我一直在阅读 OncePerRequestFilter javadocs,我发现了这个:

从 Servlet 3.0 开始,过滤器可以作为 REQUEST 或 ASYNC 调度的一部分被调用,这些调度发生在单独的线程中。可以在 web.xml 中配置过滤器是否应该参与异步调度。但是,在某些情况下,servlet 容器采用不同的默认配置。因此,子类可以重写方法 shouldNotFilterAsyncDispatch() 以静态声明它们 [原文如此] 是否确实应该在两种类型的调度期间被调用一次,以提供线程初始化、日志记录、安全性等。这种机制补充而不是取代在 web.xml 中使用调度程序类型配置过滤器的需要。

那么,使用ThreadLocal来实现我想要的会很危险吗?

0 投票
1 回答
452 浏览

spring - 非 Web 应用程序中的 OpenSessionInViewInterceptor

我必须在非 Web 应用程序中使用 OpenSessionInViewInterceptor。我已将 OSV 拦截器配置如下,

我得到一个延迟加载异常。任何指向我哪里出错的指针?配置是否正确?

还是非 Web 应用程序需要 OpenSessionInViewFilter 而不是拦截器?

谢谢!

0 投票
0 回答
266 浏览

gwt - GWT RequestFactory 打开会话 InView 解决方法

我们有带有子实体的实体(顶级实体)并且不能使用 Open Session In View Filter 因为我们修改了服务层中的实体,但我们不希望这些更改是持久的。我们通过调用 dao.update 只保留我们想要的东西!

另一方面,如果我们不在视图过滤器中使用开放会话,我们的子实体不是正确的。

如果我们在顶级实体中即时这些子实体,是否有一些解决方法可以强制 GWT 不在子实体上调用 findEntity() !

例子:

0 投票
2 回答
2318 浏览

spring - Spring、Hibernate、Tiles、OpenSessionInViewFilter 和 LazyInitializationException

当我尝试访问延迟加载的集合时,我在 jsp 上收到了 LazyInitializationException:

网页.xml:

导航器-servlet.xml:

此外,我在 navigator-servlet.xml 的开头有几个指令(我不确定这一切都是必需的):

我知道 LazyInitializationException 是常见问题,但我花了很多时间和问题在 stackoverflow 上是我修复它的最后希望。

UPD1:休眠版本 3.5.6,Spring - 3.1.0.RELEASE

0 投票
1 回答
832 浏览

gwt - 带有 Set 子集合的 GWT RequestFactory

我对 RequestFactory 有一点关于 Set 形状的子集合的持久性的问题。我在后端使用带有和 Hibernate4/Spring3 的 2.5 。我正在使用 Spring 的过滤器,以便可以在我的 DAO 的 save 方法中的 findByID 之后保留集合。我的问题是,当子集合基于 List 时,一切似乎都可以正常工作,但是当它们基于 Set 时,并非所有来自客户端的项目都可以明显地到达服务器。

我的代码如下所示:

-根实体IndicationTemplate:

- 子实体 ProposalTemplate 当然具有相反的 ManyToOne 映射,并且具有 3 个子集合以及具有 3 个不同实体的相同类别。

- 根实体的客户端代理:

- 在客户端,我渲染根实体的属性以及子实体的列表。然后用户可以更新它们,并将更改存储回集合中,如下所示:

- 然后在某个时候:

-RequestContext 看起来像:

问题是每个请求仅向集合服务器端添加 1 个子实体。例如,indicationTemplate 有 2 个proposalTemplate,我又添加了 4 个,然后在服务器端 saveIndicationTemplate 实体只包含 3 个而不是 6 个。如果发生,无论我之前有多少实体,我添加了多少,我只会得到 1在服务器上比以前更多。我确实在触发 requestContext 方法之前检查了代理对象,并且它已完全加载,以及它的所有子对象。最后最奇怪的是,如果我替换 Set per List (以及所有后续更改),一切都很顺利!

使用Sets而不是Lists时RF无法将所有更改传输到服务器可能有什么问题吗?顺便说一句,在这种情况下,我确实更喜欢 Sets,所以这就是我要问的原因。

任何人?

感谢您的帮助!

0 投票
1 回答
10758 浏览

spring - 使用 OpenSessionInViewFilter 时出现 No bean named 'sessionFactory' 错误

我正在使用 Hibernate 的延迟加载,并且在将 OpenSessionInViewFilter 添加到我的 web.xml 之后,我开始得到 sessionFactory 丢失异常,即使在定义了要使用的 sessionFactory bean 之后也是如此。

似乎是同一个问题,但不幸的是我不明白解决方案。我按照建议的解决方案(将 sessionFactory 移动到名为 root-spring.xml 的文件)我得到了服务器启动的异常。

知道我缺少什么吗?

web.xml

Spring-servlet.xml

项目结构:

项目结构

0 投票
2 回答
737 浏览

performance - OpentransactionPerView 改为 @Transactional

我有一个带有 Spring 3.1.1 和 Hibernate 4.1 的 Java EE 应用程序。现在我想加快速度,发现瓶颈是在一个请求中打开+关闭多个事务。

现在我删除了所有@Transactional注释并创建了我自己的OpenSessionInViewFilter,它打开和关闭一个事务。

这是一个好主意吗?它似乎有效并加快了速度。

这是我的交易日志:

连接池

但视图过滤器中的打开会话似乎关闭了会话

但是即使我删除了过滤器,Hibernate 似乎也没有使用池。

0 投票
0 回答
358 浏览

hibernate - org.hibernate.LazyInitializationException:无法初始化代理

org.hibernate.LazyInitializationException: could not initialize proxy - no Session晚上好,当我尝试从会话中的 ibject 获取属性时,我有一个异常称为它上升,这是我从会话属性获取参数的 JSP stmts:

注意:只有当我在 JSP 中添加第二个 for 循环时才会引发这些异常,如果没有第二个 for 循环,一切都很清楚!请我想知道这些 foo 循环做了什么以及如何克服它

0 投票
1 回答
6667 浏览

java - OpenSessionInViewFilter 不能强制转换为 javax.servlet.Filter

当我尝试在 Tomcat7 中启动我的 Java EE Spring+Hibernate 应用程序时出现异常。这曾经有效,但我认为我在迁移到 Tomcat7 时搞砸了。例外是

web.xml的如下:

我所有的 Spring jar 都是3.1.3.RELEASE,并且我有以下两个 Hibernate 依赖项:

我正在“提供”一些标准的 JEE jar:

这是来自的输出mvn dependency:tree

知道为什么我会收到此异常吗?

0 投票
4 回答
994 浏览

spring - 无法让 OpenEntityManagerInViewFilter 在 JBoss 6.1 中工作

我正在尝试将 open-session-in-view 行为添加到现有的纯 JPA 应用程序。在服务层中使用 Spring 不是一种选择。我想将视图包装在 Spring 的 OpenEntityManagerInViewFilter 中,而不必修改 EJB 层。

我没有任何运气让 OpenEntityManagerInViewFilter (Spring 3.2.2) 在 JBoss 6.1 中工作。过滤器肯定被调用了,但我仍然在视图中得到一个 LazyInitializationException 。

过滤器和会话 bean 正在使用 EntityManager 的不同实例(和类)。过滤器得到一个org.hibernate.ejb.EntityManagerImpl,而会话 bean 得到一个org.jboss.jpa.tx.TransactionScopedEntityManager. 我不确定 Spring 配置对此负责。

这是相关的代码/配置:

战争/WEB-INF/classes/test.web.servlet.TestServlet

ejb/test.ejb.session.ServiceBean

战争/WEB-INF/web.xml

战争/WEB-INF/spring.xml

ejb/META-INF/persistence.xml