> Are you sure you added tapestry-jpa dependency? I knew I was missing something obvious :-) Thanks Igor, for the reminder!
So now I added tapestry-jpa and the CommitAfter annotation resolves without Hibernate dependency and the EntityManagerSource service is now visible! I can now run app with mvn jetty:run, but am getting this when http://localhost:8080/jpaapp/ org.apache.tapestry5.internal.services.RenderQueueException Render queue error in SetupRender[Index:grid]: Failure reading parameter 'source' of component Index:grid: Failed to create EntityManagerFactory for persistence unit 'DemoUnit' This occurs when using @PersistenceContext (unitName = "DemoUnit") and the with-XML configuration file with <persistence-unit name="DemoUnit". So presumably the two should match... Does this mean that the persistence.xml file is not found by the application? When using the without-XML code as per the JPA doc, I am getting a different error: Caused by: java.lang.RuntimeException: Exception constructing service 'EntityManagerSource': Error invoking service builder method org.apache.tapestry5.jpa.JpaModule.buildEntityManagerSource(Logger, Resource, PersistenceUnitConfigurer, Map, RegistryShutdownHub) (at JpaModule.java:94) (for service 'EntityManagerSource'): javax.naming.NameNotFoundException; remaining name 'jdbc/JPATest' Let me know if you want the full error stack Thanks Mat On Thu, Aug 11, 2011 at 9:42 AM, Igor Drobiazko <igor.drobia...@gmail.com>wrote: > Are you sure you added tapestry-jpa dependency? > > On Thu, Aug 11, 2011 at 12:39 AM, mat -- <mat...@gmail.com> wrote: > > Two other questions, regarding the JPA integration doc: > > > > Q: Should one keep the tapestry-hibernate dependency when integrating > with > > JPA: import org.apache.tapestry5.hibernate.annotations.CommitAfter? if > not, > > how to resolve the @CommitAfter annotation? > > > > No, tapestry-hibernate is not needed. > > > > Q: should this service be seen in the Tapestry IoC Services Status? > > > > EntityManagerSource service should be visible as any other service. > > > > > Mat > > > > On Wed, Aug 10, 2011 at 10:50 PM, Lenny Primak <lpri...@hope.nyc.ny.us > > >wrote: > > > > > If you are not getting the eclipse link login messages it's not going > to > > > work. > > > The file is supposed to be in classpath/META-INF directory. Not > web-inf. > > > Whatever your source package is just add META-INF To that. > > > > > > Also what's your content of the WEB-INF/lib directory? The lack or > > > incorrect libraries may also hurt you. > > > > > > On Aug 10, 2011, at 2:03 PM, mat -- <mat...@gmail.com> wrote: > > > > > > > Hi > > > > > > > > What's your persistence.xml look like? <-- Here it it: > > > > (as per the JPA integration instruction)? > > > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > > <persistence xmlns="http://java.sun.com/xml/ns/persistence" > > > > version="2.0"> > > > > <persistence-unit name="DemoUnit" > transaction-type="RESOURCE_LOCAL"> > > > > <properties> > > > > <property name="javax.persistence.jdbc.driver" > > > > value="org.h2.Driver" /> > > > > <property name="javax.persistence.jdbc.url" > > > > value="jdbc:h2:mem:test" /> > > > > <property name="javax.persistence.jdbc.username" > > > > value="sa" /> > > > > <property name="eclipselink.ddl-generation" > > > > value="create-tables"/> > > > > <property name="eclipselink.logging.level" > > > > value="fine"/> > > > > </properties> > > > > </persistence-unit> > > > > </persistence> > > > > > > > > Where exactly should the persistence.xml file be located? > > > > In the doc it says: "and is expected to be located on the classpath > in > > > the * > > > > META-INF* directory." Is that under the WEB-INF directory? > > > > > > > > Do you get login messages int he logs for EclipseLink? <-- No. > > > > > > > > What are the contents of your WEB-INF/lib? <-- There is no lib older > > > under > > > > WEB-INF in my sample app? > > > > > > > > AppModule.java? <-- Here is it (much the same as in the Hibernate / > > > Tutorial > > > > sample app). > > > > (I didn't add any of the configuration code mentioned in the JPA > > > > instructions as I understood this was needed only in XML-less JPA > > > > configuration > > > > > > > > package com.example.jpa.services; > > > > > > > > import java.io.IOException; > > > > > > > > import org.apache.tapestry5.*; > > > > import org.apache.tapestry5.ioc.Configuration; > > > > import org.apache.tapestry5.ioc.MappedConfiguration; > > > > import org.apache.tapestry5.ioc.OrderedConfiguration; > > > > import org.apache.tapestry5.ioc.ServiceBinder; > > > > import org.apache.tapestry5.ioc.annotations.Contribute; > > > > import org.apache.tapestry5.ioc.annotations.Local; > > > > import org.apache.tapestry5.services.Request; > > > > import org.apache.tapestry5.services.RequestFilter; > > > > import org.apache.tapestry5.services.RequestHandler; > > > > import org.apache.tapestry5.services.Response; > > > > import org.slf4j.Logger; > > > > > > > > /** > > > > * This module is automatically included as part of the Tapestry IoC > > > > Registry, it's a good place to > > > > * configure and extend Tapestry, or to place your own service > > > definitions. > > > > */ > > > > public class AppModule > > > > { > > > > public static void bind(ServiceBinder binder) > > > > { > > > > // binder.bind(MyServiceInterface.class, MyServiceImpl.class); > > > > > > > > // Make bind() calls on the binder object to define most IoC > > > > services. > > > > // Use service builder methods (example below) when the > > > > implementation > > > > // is provided inline, or requires more initialization than > > simply > > > > // invoking the constructor. > > > > } > > > > public static void contributeApplicationDefaults( > > > > MappedConfiguration<String, String> configuration) > > > > { > > > > // Contributions to ApplicationDefaults will override any > > > > contributions to > > > > // FactoryDefaults (with the same key). Here we're restricting > > the > > > > supported > > > > // locales to just "en" (English). As you add localised > message > > > > catalogs and other assets, > > > > // you can extend this list of locales (it's a comma separated > > > > series of locale names; > > > > // the first locale name is the default when there's no > > reasonable > > > > match). > > > > > > > > configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en"); > > > > > > > > // The factory default is true but during the early stages of > an > > > > application > > > > // overriding to false is a good idea. In addition, this is > > often > > > > overridden > > > > // on the command line as -Dtapestry.production-mode=false > > > > configuration.add(SymbolConstants.PRODUCTION_MODE, "false"); > > > > > > > > // The application version number is incorprated into URLs for > > > some > > > > // assets. Web browsers will cache assets because of the far > > > future > > > > expires > > > > // header. If existing assets are changed, the version number > > > should > > > > also > > > > // change, to force the browser to download new versions. > > > > configuration.add(SymbolConstants.APPLICATION_VERSION, > > > > "1.0-SNAPSHOT"); > > > > } > > > > > > > > /** > > > > * This is a service definition, the service will be named > > > > "TimingFilter". The interface, > > > > * RequestFilter, is used within the RequestHandler service > > pipeline, > > > > which is built from the > > > > * RequestHandler service configuration. Tapestry IoC is > responsible > > > for > > > > passing in an > > > > * appropriate Logger instance. Requests for static resources are > > > > handled at a higher level, so > > > > * this filter will only be invoked for Tapestry related requests. > > > > * > > > > * <p> > > > > * Service builder methods are useful when the implementation is > > > inline > > > > as an inner class > > > > * (as here) or require some other kind of special initialization. > > In > > > > most cases, > > > > * use the static bind() method instead. > > > > * > > > > * <p> > > > > * If this method was named "build", then the service id would be > > > taken > > > > from the > > > > * service interface and would be "RequestFilter". Since Tapestry > > > > already defines > > > > * a service named "RequestFilter" we use an explicit service id > > that > > > we > > > > can reference > > > > * inside the contribution method. > > > > */ > > > > public RequestFilter buildTimingFilter(final Logger log) > > > > { > > > > return new RequestFilter() > > > > { > > > > public boolean service(Request request, Response response, > > > > RequestHandler handler) > > > > throws IOException > > > > { > > > > long startTime = System.currentTimeMillis(); > > > > > > > > try > > > > { > > > > // The responsibility of a filter is to invoke the > > > > corresponding method > > > > // in the handler. When you chain multiple filters > > > > together, each filter > > > > // received a handler that is a bridge to the next > > > > filter. > > > > > > > > return handler.service(request, response); > > > > } > > > > finally > > > > { > > > > long elapsed = System.currentTimeMillis() - > > startTime; > > > > > > > > log.info(String.format("Request time: %d ms", > > > elapsed)); > > > > } > > > > } > > > > }; > > > > } > > > > > > > > /** > > > > * This is a contribution to the RequestHandler service > > configuration. > > > > This is how we extend > > > > * Tapestry using the timing filter. A common use for this kind of > > > > filter is transaction > > > > * management or security. The @Local annotation selects the > desired > > > > service by type, but only > > > > * from the same module. Without @Local, there would be an error > > due > > > to > > > > the other service(s) > > > > * that implement RequestFilter (defined in other modules). > > > > */ > > > > public void > > > contributeRequestHandler(OrderedConfiguration<RequestFilter> > > > > configuration, > > > > @Local > > > > RequestFilter filter) > > > > { > > > > // Each contribution to an ordered configuration has a name, > > When > > > > necessary, you may > > > > // set constraints to precisely control the invocation order > of > > > the > > > > contributed filter > > > > // within the pipeline. > > > > > > > > configuration.add("Timing", filter); > > > > } > > > > > > > > } > > > > > > > > > > > > On Wed, Aug 10, 2011 at 7:34 PM, Lenny Primak < > lpri...@hope.nyc.ny.us > > > >wrote: > > > > > > > >> I think your issue is environmental. What's your persistence.xml > look > > > >> like? > > > >> AppModule.java? Do you get login messages int he logs for > > EclipseLink? > > > >> What are the contents of your WEB-INF/lib? > > > >> > > > >> > > > >> On Aug 10, 2011, at 12:27 PM, Igor Drobiazko wrote: > > > >> > > > >>> Looks like your PersistenceManager is null. You need to share some > of > > > >> your > > > >>> code with us in order to get help. > > > >>> > > > >>> On Wed, Aug 10, 2011 at 5:35 PM, mat -- <mat...@gmail.com> wrote: > > > >>> > > > >>>> Hi > > > >>>> > > > >>>> Also make sure your entities are in he correct entities package > <-- > > I > > > >> think > > > >>>> I have same files structure as in the Tapestry tutorial: > > > >>>> > > > >>>> - Address.java in entities package > > > >>>> - Index.java in pages package > > > >>>> - CreateAddress.java in pages.address package > > > >>>> - AppModule.java in services package > > > >>>> > > > >>>> Can you give a full exception listing <--- Here is it: > > > >>>> > > > >>>> > > > >>>> - locationclasspath:com/example/jpa/pages/Index.tml, line 29 > > > >>>> - java.lang.NullPointerExceptionHide uninteresting stack > framesStack > > > >>>> trace > > > >>>> - com.example.jpa.pages.Index.getAddresses(Index.java:33) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:59) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.transform.ParameterWorker$2$1.readFromBinding(ParameterWorker.java:328) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.transform.ParameterWorker$2$1.get(ParameterWorker.java:427) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.transform.BridgeClassTransformation$BridgeTransformField$WrapFieldHandleForFieldValueConduitAsFieldConduit.get(BridgeClassTransformation.java:210) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.corelib.components.Grid.getfieldvalue_source(Grid.java) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.corelib.components.Grid.setupDataSource(Grid.java:459) > > > >>>> - > > > >>>> > > > >>>> > > > org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java:445) > > > >>>> - > > > >>>> > > > >> > > > > > > org.apache.tapestry5.corelib.components.Grid$Shim_2ba81c88b285.invoke(Unknown > > > >>>> Source) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.plastic.MethodHandleImpl.invoke(MethodHandleImpl.java:48) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodHandleAsMethodAccess.invoke(BridgeClassTransformation.java:84) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$Invoker.invoke(RenderPhaseMethodWorker.java:117) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$RenderPhaseMethodAdvice.advise(RenderPhaseMethodWorker.java:86) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodAdviceAsComponentMethodAdvice.advise(BridgeClassTransformation.java:348) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:86) > > > >>>> - > > > >> org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:230) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:191) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.render(ComponentPageElementImpl.java:237) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:127) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$30.renderMarkup(TapestryModule.java:2147) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:2131) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:2113) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:2098) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:2084) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:2066) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$24.renderMarkup(TapestryModule.java:2047) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:67) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:64) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$37.handle(TapestryModule.java:2376) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:434) > > > >>>> - > com.example.jpa.services.AppModule$1.service(AppModule.java:94) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:1055) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:1045) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:385) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) > > > >>>> - > > > >>>> > > > >>>> > > > >> > > > > > > org.apache.tapestry5.services.TapestryModule$1.service(TapestryModule.java:1005) > > > >>>> - > > > >>>> > > > >> > org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:147) > > > >>>> > > > >>>> Tapestry FrameworkTapestry Version5.3.0Application > > Version1.0-SNAPSHOT > > > >>>> > > > >>>> On Wed, Aug 10, 2011 at 6:18 PM, Lenny Primak < > > lpri...@hope.nyc.ny.us > > > >>>>> wrote: > > > >>>> > > > >>>>> Can you give a full exception listing? Also make sure your > > entities > > > >> are > > > >>>> in > > > >>>>> he correct entities package. > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> On Aug 10, 2011, at 11:02 AM, mat -- <mat...@gmail.com> wrote: > > > >>>>> > > > >>>>>> Hi there, > > > >>>>>> > > > >>>>>> I have run the Hibernate version of the Tapestry tutorial: > > > >>>>>> http://tapestry.apache.org/using-tapestry-with-hibernate.htmland > > > it > > > >>>>> works > > > >>>>>> fine for me. > > > >>>>>> > > > >>>>>> I am now trying to integrate it with the new 5,3 Tapestry > version, > > > >>>>> running > > > >>>>>> JPA instead of Hibernate. > > > >>>>>> > > > >>>>>> I have read instructions at > > > >>>>>> http://tapestry.apache.org/integrating-with-jpa.html, but I am > > not > > > >>>> sure > > > >>>>> I > > > >>>>>> understand how to put the different parts together. > > > >>>>>> > > > >>>>>> Since I no longer use Hibernate session, I have replaced in > > > Index.java > > > >>>>> page: > > > >>>>>> > > > >>>>>> ... this code: > > > >>>>>> > > > >>>>>> /* @Inject > > > >>>>>> private Session session; > > > >>>>>> public List<Address> getAddresses() > > > >>>>>> { > > > >>>>>> return session.createCriteria(Address.class).list(); > > > >>>>>> }*/ > > > >>>>>> > > > >>>>>> ... with this one: > > > >>>>>> > > > >>>>>> @PersistenceContext > > > >>>>>> private EntityManager em; > > > >>>>>> public List<Address> getAddresses() > > > >>>>>> { > > > >>>>>> Query query = em.createQuery("SELECT a FROM Address a"); > > > >>>>>> return query.getResultList(); > > > >>>>>> } > > > >>>>>> > > > >>>>>> But I am getting this error in <t:grid source="addresses"/> of > > > >>>> Index.tml: > > > >>>>>> > > > >>>>>> Render queue error in SetupRender[Index:grid]: Failure reading > > > >>>> parameter > > > >>>>>>> 'source' of component Index:grid: > > > >>>>>>> org.apache.tapestry5.ioc.internal.util.TapestryException > > > >>>>>> > > > >>>>>> > > > >>>>>> Could someone explain what is the issue in the above code? > > > >>>>>> > > > >>>>>> Also, could someone briefly list/describe the tasks which are > > needed > > > >> to > > > >>>>>> switch the Tapestry tutorial from Hibernate to JPA support. > > > >>>>>> > > > >>>>>> Regards > > > >>>>>> > > > >>>>>> Mat > > > >>>>> > > > >>>>> > > --------------------------------------------------------------------- > > > >>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > > >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org > > > >>>>> > > > >>>>> > > > >>>> > > > >>> > > > >>> > > > >>> > > > >>> -- > > > >>> Best regards, > > > >>> > > > >>> Igor Drobiazko > > > >>> http://tapestry5.de > > > >> > > > >> > > > >> > --------------------------------------------------------------------- > > > >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > > >> For additional commands, e-mail: users-h...@tapestry.apache.org > > > >> > > > >> > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > > > > > > > > > -- > Best regards, > > Igor Drobiazko > http://tapestry5.de >