这是一个非常基本的问题,我很抱歉,但我似乎无法获得一个简单的基于Tapestry-IOC的应用程序使用内置的Tapestry JPA模块。在非web项目中使用tapestry-jpa与tapestry-ioc
该应用程序不一定意味着Web项目,所以依赖关系只是tapestry-ioc和tapestry-jpa用于JPA集成。我之前使用过hibernate-entitymanager,一切正常。但我想我可能更愿意使用Tapestry的官方JPA支持。
所以我所做的就是得到上面提到的依赖关系(在Tapestry 5.3.7版本中)并写出测试的开始。 这开始看起来像这样
Registry registry = RegistryBuilder.buildAndStartupRegistry(MyModule.class);
EntityManager em = registry.getService(EntityManager.class);
这就是全部。因为只要我尝试这个,我会得到一个错误,即没有服务会实现EntityManager
接口。
所以我加了挂毯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支持的优点是事务管理,例如,通过@CommitAfter注释,实体的自动包扫描,EntityManager的框架管理以及其他可能的东西。当我仅仅使用带有IOC服务的Tapestry-JPA时,我也可以做到这一切。但是,也许我错过了首先使用Tapestry-JPA集成的真正的酷酷理由? :-) – khituras