在非网络项目中仅将 tapestry-ioc 与 tapestry-ioc 一起使用

Using tapestry-jpa just with tapestry-ioc in non-web project

这是一个非常基本的问题,我有点抱歉,但我似乎无法获得一个简单的基于 Tapestry-IOC 的应用程序来使用内置的 Tapestry JPA 模块。

应用程序不一定是 Web 项目,因此依赖项只是用于 JPA 集成的 tapestry-ioc 和 tapestry-jpa。我之前使用过 hibernate-entitymanager,一切正常。但我想我可能更愿意使用 Tapestry 的官方 JPA 支持。

所以我所做的就是获取上述依赖项(在 Tapestry 版本 5.3.7 中)并编写测试的开头。 这个开头是这样的

Registry registry = RegistryBuilder.buildAndStartupRegistry(MyModule.class);
EntityManager em = registry.getService(EntityManager.class);

就是这样。因为一旦我尝试这样做,我就会收到错误消息,即没有服务会实现 EntityManager 接口。

所以我添加了 Tapestry JPA 模块:

Registry registry = RegistryBuilder.buildAndStartupRegistry(MyModule.class, JpaModule.class);

但我又收到一个错误,提示 JpaModule 想要贡献给不存在的 ApplicationStatePersistenceStrategySource 服务。这个服务好像是在TapestryModule里定义的,所以我做了

Registry registry = RegistryBuilder.buildAndStartupRegistry(MyModule.class, JpaModule.class, TapestryModule.class);

但是由于缺少 servlet API,这会导致错误。所以现在我到了必须为 Tapestry 定义 Web 环境的地步。但我不想要这个,我只是想使用 JPA 集成。

这可能吗?如果是这样,我该怎么做?遵循 http://tapestry.apache.org/integrating-with-jpa.html 的文档在这方面没有帮助。

非常感谢您的阅读,感谢任何提示!

快速回答——我可能错了——但我认为 Tapestry-jpa 旨在将 JPA 与 Tapestry-core(网络框架)结合使用。我认为在您的情况下,普通 JPA 不会有任何好处。