2014-10-09 59 views
0

這可能嗎?我想用它像描述here如何在STS中使用Spring和JSF的EJB-CMT?

@PersistenceContext 
private EntityManager em; 
... 
    em.persist(entity1); 
    em.merge(entity2); 
    em.find(MyEntity.class, id); 

(仍然工作在this project

我成功設法得到這種持久性單元數據庫連接:

<persistence-unit name="primefaces-showcase" 
    transaction-type="RESOURCE_LOCAL"> 
    <class>org.primefaces.showcase.domain.Car</class> 
    <properties> 
     <property name="javax.persistence.schema-generation.database.action" 
      value="drop-and-create" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/database" /> 
     <property name="javax.persistence.jdbc.user" value="postgres" /> 
     <property name="javax.persistence.jdbc.password" value="pass" /> 
     <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> 
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
    </properties> 
</persistence-unit> 

我用它像這

EntityManagerFactory emf = 
Persistence.createEntityManagerFactory("primefaces-showcase"); 
EntityManager em = emf.createEntityManager(); 

但是,當我想使用JN DI這樣

@PersistenceContext(unitName = "primefaces-jta") 
    private EntityManager em; 

我得到這個控制檯輸出:

Okt 09, 2014 3:06:55 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException 
SCHWERWIEGEND: Error Rendering View[/WEB-INF/views/home.xhtml] 
com.sun.faces.mgbean.ManagedBeanCreationException: Bei der Ressourcen-Einspeisung auf dem verwalteten Bean dtBasicView ist ein Fehler aufgetreten. 
    at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:229) 
    at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:105) 
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) 
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) 
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244) 
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116) 
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:71) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:160) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    at javax.faces.component.UIData.getValue(UIData.java:731) 
    at org.primefaces.component.datatable.DataTable.getValue(DataTable.java:910) 
    at org.primefaces.component.api.UIData.getDataModel(UIData.java:615) 
    at javax.faces.component.UIData.getRowCount(UIData.java:356) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:640) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:249) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:211) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:83) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) 
    at org.primefaces.component.tabview.TabViewRenderer.encodeTabContent(TabViewRenderer.java:304) 
    at org.primefaces.component.tabview.TabViewRenderer.encodeContents(TabViewRenderer.java:262) 
    at org.primefaces.component.tabview.TabViewRenderer.encodeMarkup(TabViewRenderer.java:133) 
    at org.primefaces.component.tabview.TabViewRenderer.encodeEnd(TabViewRenderer.java:72) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at org.springframework.faces.mvc.JsfView.renderMergedOutputModel(JsfView.java:81) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1221) 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.sun.faces.spi.InjectionProviderException 
    at com.sun.faces.vendor.WebContainerInjectionProvider.invokeAnnotatedMethod(WebContainerInjectionProvider.java:119) 
    at com.sun.faces.vendor.WebContainerInjectionProvider.invokePostConstruct(WebContainerInjectionProvider.java:99) 
    at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:223) 
    ... 102 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.sun.faces.vendor.WebContainerInjectionProvider.invokeAnnotatedMethod(WebContainerInjectionProvider.java:117) 
    ... 104 more 
Caused by: java.lang.NullPointerException 
    at org.primefaces.showcase.service.CarService.createCars(CarService.java:68) 
    at org.primefaces.showcase.view.data.datatable.BasicView.init(BasicView.java:26) 
    ... 109 more 

/primefaces-showcase/src/main/java/org/primefaces/showcase/service/CarService.java

@ManagedBean(name = "carService") 
@ApplicationScoped 
public class CarService { 

    @PersistenceContext(unitName = "primefaces-jta") 
    private EntityManager em; 

    public List<Car> createCars(int size) { 

     List<Car> list = new ArrayList<Car>(); 
     for (int i = 0; i < size; i++) { 
      em.getTransaction().begin(); 
      Car car = new Car(getRandomId(), getRandomBrand(), getRandomYear(), 
        getRandomColor(), getRandomPrice(), getRandomSoldState()); 
      list.add(car); 
      em.persist(car); 
      em.getTransaction().commit(); 
     } 
     return list; 
    } 

/primefaces-showcase/src/main/java/META-INF/persistence.xml

<persistence-unit name="primefaces-jta" 
    transaction-type="JTA"> 
    <jta-data-source>jdbc/postgres</jta-data-source> 
    <properties> 
     <property name="javax.persistence.schema-generation.database.action" 
      value="drop-and-create" /> 
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
    </properties> 
</persistence-unit> 

/服務器器/ VMware的vFabric TC Server開發人員版V2.9-的config/server.xml中

<GlobalNamingResources> 
    <Resource auth="Container" driverClassName="org.postgresql.Driver" global="jdbc/TestDB" maxActive="100" maxIdle="20" maxWait="10000" minIdle="5" name="jdbc/TestDB" password="pass" type="javax.sql.DataSource" url="jdbc:postgresql://127.0.0.1:5432/database" username="postgres"/> 
</GlobalNamingResources> 

/服務器器/ VMware的vFabric TC Server開發人員版V2.9-配置/ context.xml的

<ResourceLink name="jdbc/postgresPool" 
        global="jdbc/TestDB" 
        auth="Container" 
        type="javax.sql.DataSource" /> 

/primefaces-showcase/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml

<!-- using JEE namespace for lookup --> 
<jee:jndi-lookup id="dbDataSource" jndi-name="jdbc/postgresPool" expected-type="javax.sql.DataSource"/> 

回答

0

我認爲答案是,這是不可能的的vFabric tc之後,得到CMT這個服務器y,因爲它不提供開箱即用的交易管理器。所以我要看看如何使用Spring框架來解決這個問題。