You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Harald Geritzer <h....@gmail.com> on 2008/01/14 09:33:26 UTC

Injecting LibraryMapping to "core"

hi all,

i am building a webapp consisting of serveral plugins each having a set of pages which should be 
injected into the "core" of the webapp.

e.g

webapp context: /testapp
plugin1       : /testapp/pluginpage1
		/testapp/subdir/page1
plugin2       : /testapp/pluginpage2

i found out, that those pages can be addressed in two ways:
1) the way its intended with /testapp/subdir/page1
2) by appending a "core" prefix: /testapp/core/subdir/page1
    tapestry renders all links using the "core"-prefix

is it considered a bug or a feature?




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


RE: Injecting LibraryMapping to "core"

Posted by Bret Gregory <br...@reged.com>.
Sorry, wrong thread.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


RE: Injecting LibraryMapping to "core"

Posted by Bret Gregory <br...@reged.com>.
Here is some more information on the problem:

It seems almost like an ordering issue, like the objects are created and
added, but that Tapestry doesn't know that they are components despite
having transformed the classes already.  Below is the log from Tapestry
for the class transformations and also the stack trace for the NPE that
I am getting when tapestry tries to render the menu item for the test
that I have set up.  


Transformation Log:
[DEBUG] MenuBanner Finished class transformation:
InternalClassTransformation[
public com.reged.components.MenuBanner extends java.lang.Object
  implements org.apache.tapestry.runtime.Component,
org.apache.tapestry.runtime.RenderCommand

add default method: public void postRenderCleanup()
<default>

add default method: public void
setupRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
beginRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
beforeRenderTemplate(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
afterRenderTemplate(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
beforeRenderBody(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
afterRenderBody(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
afterRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
cleanupRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public boolean
handleComponentEvent(org.apache.tapestry.runtime.ComponentEvent $1)
<default>

add default method: public org.apache.tapestry.ComponentResources
getComponentResources()
<default>

add default method: public void containingPageDidLoad()
<default>

add default method: public void containingPageDidDetach()
<default>

add default method: public void containingPageDidAttach()
<default>

add field: protected final
org.apache.tapestry.internal.InternalComponentResources _$resources;

replace method: public final org.apache.tapestry.ComponentResources
getComponentResources()
return _$resources;

add method: private void
_$write_resources(org.apache.tapestry.ComponentResources $1)
throw new java.lang.RuntimeException("Field
com.reged.components.MenuBanner._resources is read-only.");

replace write _resources: _$write_resources();

add method: private void
_$write_pageMenuLink(com.reged.components.nav.PageMenuLink $1)
throw new java.lang.RuntimeException("Field
com.reged.components.MenuBanner.pageMenuLink is read-only.");

replace write pageMenuLink: _$write_pageMenuLink();

extend method: public void containingPageDidLoad()
pageMenuLink = (com.reged.components.nav.PageMenuLink)
_$resources.getEmbeddedComponent("pageMenuLink");

add default method: public void render(org.apache.tapestry.MarkupWriter
$1, org.apache.tapestry.runtime.RenderQueue $2)
<default>

replace method: public void render(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.RenderQueue $2)
_$resources.queueRender($2);

replace method: public void setupRender(org.apache.tapestry.MarkupWriter
$1, org.apache.tapestry.runtime.Event $2)
{
  initialize();
}


extend method: public void postRenderCleanup()
_$resources.postRenderCleanup();

add field: private com.reged.base.AbstractMenuItem _$item_default;

extend method: public void containingPageDidLoad()
_$item_default = _item;

extend method: public void containingPageDidDetach()
_item = _$item_default;

add field: private java.util.List _$menuItems_default;

extend method: public void containingPageDidLoad()
_$menuItems_default = _menuItems;

extend method: public void containingPageDidDetach()
_menuItems = _$menuItems_default;

Checking field read _menuItems in method getMenuItems(): field not
transformed
Checking field write _menuItems in method setMenuItems(): field not
transformed
Checking field write _item in method setItem(): field not transformed
Checking field read _item in method getItem(): field not transformed
Checking field write _menuItems in method initialize(): field not
transformed
Checking field read _menuItems in method initialize(): field not
transformed
Checking field read _$resources in method postRenderCleanup(): added
method
Checking field read _$resources in method containingPageDidLoad(): added
method
Checking field write pageMenuLink in method containingPageDidLoad():
added method
Checking field read _item in method containingPageDidLoad(): added
method
Checking field write _$item_default in method containingPageDidLoad():
added method
Checking field read _menuItems in method containingPageDidLoad(): added
method
Checking field write _$menuItems_default in method
containingPageDidLoad(): added method
Checking field read _$item_default in method containingPageDidDetach():
added method
Checking field write _item in method containingPageDidDetach(): added
method
Checking field read _$menuItems_default in method
containingPageDidDetach(): added method
Checking field write _menuItems in method containingPageDidDetach():
added method
Checking field read _$resources in method getComponentResources(): added
method
Checking field read _$resources in method render(): added method

convert default constructor: initializer();

add constructor:
com.reged.components.MenuBanner(org.apache.tapestry.internal.InternalCom
ponentResources $1)
{
  _$resources = $1;
_resources = _$resources;
  initializer();

}

]
[DEBUG] AbstractMenuItem Finished class transformation:
InternalClassTransformation[
public com.reged.base.AbstractMenuItem extends java.lang.Object
  implements org.apache.tapestry.runtime.Component,
org.apache.tapestry.runtime.RenderCommand

add default method: public void postRenderCleanup()
<default>

add default method: public void
setupRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
beginRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
beforeRenderTemplate(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
afterRenderTemplate(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
beforeRenderBody(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
afterRenderBody(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
afterRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public void
cleanupRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
<default>

add default method: public boolean
handleComponentEvent(org.apache.tapestry.runtime.ComponentEvent $1)
<default>

add default method: public org.apache.tapestry.ComponentResources
getComponentResources()
<default>

add default method: public void containingPageDidLoad()
<default>

add default method: public void containingPageDidDetach()
<default>

add default method: public void containingPageDidAttach()
<default>

add field: protected final
org.apache.tapestry.internal.InternalComponentResources _$resources;

replace method: public final org.apache.tapestry.ComponentResources
getComponentResources()
return _$resources;

add method: private void
_$write_resouces(org.apache.tapestry.ComponentResources $1)
throw new java.lang.RuntimeException("Field
com.reged.base.AbstractMenuItem._resouces is read-only.");

replace write _resouces: _$write_resouces();

add default method: public void render(org.apache.tapestry.MarkupWriter
$1, org.apache.tapestry.runtime.RenderQueue $2)
<default>

replace method: public void render(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.RenderQueue $2)
_$resources.queueRender($2);

extend method: public void postRenderCleanup()
_$resources.postRenderCleanup();

add field: private java.lang.String _$displayName_default;

extend method: public void containingPageDidLoad()
_$displayName_default = _displayName;

extend method: public void containingPageDidDetach()
_displayName = _$displayName_default;

Checking field read _displayName in method getDisplayName(): field not
transformed
Checking field write _displayName in method setDisplayName(): field not
transformed
Checking field read _$resources in method postRenderCleanup(): added
method
Checking field read _displayName in method containingPageDidLoad():
added method
Checking field write _$displayName_default in method
containingPageDidLoad(): added method
Checking field read _$displayName_default in method
containingPageDidDetach(): added method
Checking field write _displayName in method containingPageDidDetach():
added method
Checking field read _$resources in method getComponentResources(): added
method
Checking field read _$resources in method render(): added method

convert default constructor: initializer();

add constructor:
com.reged.base.AbstractMenuItem(org.apache.tapestry.internal.InternalCom
ponentResources $1)
{
  _$resources = $1;
_resouces = _$resources;
  initializer();

}

]
[DEBUG] MenuLink Finished class transformation:
InternalClassTransformation[
public com.reged.base.MenuLink extends com.reged.base.AbstractMenuItem
  implements com.reged.base.ClickableMenuItem

add field: private java.lang.Object[] _$context_default;

extend method: public void containingPageDidLoad()
_$context_default = _context;

extend method: public void containingPageDidDetach()
_context = _$context_default;

add field: private boolean _$popupLink_default;

extend method: public void containingPageDidLoad()
_$popupLink_default = _popupLink;

extend method: public void containingPageDidDetach()
_popupLink = _$popupLink_default;

convert default constructor: initializer_0();

add constructor:
com.reged.base.MenuLink(org.apache.tapestry.internal.InternalComponentRe
sources $1)
{ super($1);
  initializer_0();

}

]
[DEBUG] PageMenuLink Finished class transformation:
InternalClassTransformation[
public com.reged.components.nav.PageMenuLink extends
com.reged.base.MenuLink

add method: private void
_$write_resources(org.apache.tapestry.ComponentResources $1)
throw new java.lang.RuntimeException("Field
com.reged.components.nav.PageMenuLink._resources is read-only.");

replace write _resources: _$write_resources();

add method: public void beginRender(org.apache.tapestry.MarkupWriter $1,
org.apache.tapestry.runtime.Event $2)
{
  super.beginRender($$);
  if ($2.isAborted()) return;
  test();
}


add field: private java.lang.String _$page_default;

extend method: public void containingPageDidLoad()
_$page_default = _page;

extend method: public void containingPageDidDetach()
_page = _$page_default;

Checking field read out in method test(): field not transformed
Checking field read _page in method getPage(): field not transformed
Checking field write _page in method setPage(): field not transformed
Checking field read _page in method containingPageDidLoad(): added
method
Checking field write _$page_default in method containingPageDidLoad():
added method
Checking field read _$page_default in method containingPageDidDetach():
added method
Checking field write _page in method containingPageDidDetach(): added
method

convert default constructor: initializer_1();

add constructor:
com.reged.components.nav.PageMenuLink(org.apache.tapestry.internal.Inter
nalComponentResources $1)
{ super($1);
_resources = _$resources;
  initializer_1();

}

]


StackTrace:
Start Render queue error in
com.reged.components.nav.PageMenuLink@19b622d:
java.lang.NullPointerException
java.lang.NullPointerException
	at com.reged.base.AbstractMenuItem.render(AbstractMenuItem.java)
	at
org.apache.tapestry.internal.services.RenderQueueImpl.run(RenderQueueImp
l.java:58)
	at
org.apache.tapestry.internal.services.PageRenderQueueImpl.render(PageRen
derQueueImpl.java:58)
	at
$PageRenderQueue_11779b5a65c.render($PageRenderQueue_11779b5a65c.java)
	at
$PageRenderQueue_11779b5a65a.render($PageRenderQueue_11779b5a65a.java)
	at
org.apache.tapestry.services.TapestryModule$18.renderMarkup(TapestryModu
le.java:1320)
	at
org.apache.tapestry.services.TapestryModule$22.renderMarkup(TapestryModu
le.java:1431)
	at
$MarkupRenderer_11779b5a660.renderMarkup($MarkupRenderer_11779b5a660.jav
a)
	at
org.apache.tapestry.services.TapestryModule$21.renderMarkup(TapestryModu
le.java:1412)
	at
$MarkupRenderer_11779b5a660.renderMarkup($MarkupRenderer_11779b5a660.jav
a)
	at
org.apache.tapestry.services.TapestryModule$20.renderMarkup(TapestryModu
le.java:1394)
	at
$MarkupRenderer_11779b5a660.renderMarkup($MarkupRenderer_11779b5a660.jav
a)
	at
org.apache.tapestry.services.TapestryModule$19.renderMarkup(TapestryModu
le.java:1376)
	at
$MarkupRenderer_11779b5a660.renderMarkup($MarkupRenderer_11779b5a660.jav
a)
	at
$MarkupRenderer_11779b5a659.renderMarkup($MarkupRenderer_11779b5a659.jav
a)
	at
org.apache.tapestry.internal.services.PageMarkupRendererImpl.renderPageM
arkup(PageMarkupRendererImpl.java:55)
	at
$PageMarkupRenderer_11779b5a657.renderPageMarkup($PageMarkupRenderer_117
79b5a657.java)
	at
org.apache.tapestry.internal.services.PageResponseRendererImpl.renderPag
eResponse(PageResponseRendererImpl.java:51)
	at
$PageResponseRenderer_11779b5a613.renderPageResponse($PageResponseRender
er_11779b5a613.java)
	at
org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handl
e(PageRenderRequestHandlerImpl.java:87)
	at
$PageRenderRequestHandler_11779b5a60f.handle($PageRenderRequestHandler_1
1779b5a60f.java)
	at
org.apache.tapestry.internal.services.RootPathDispatcher.dispatch(RootPa
thDispatcher.java:52)
	at
$Dispatcher_11779b5a611.dispatch($Dispatcher_11779b5a611.java)
	at
$Dispatcher_11779b5a605.dispatch($Dispatcher_11779b5a605.java)
	at
org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.ja
va:938)
	at
org.apache.tapestry.internal.services.LocalizationFilter.service(Localiz
ationFilter.java:43)
	at
$RequestHandler_11779b5a606.service($RequestHandler_11779b5a606.java)
	at
org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.jav
a:520)
	at
$RequestHandler_11779b5a606.service($RequestHandler_11779b5a606.java)
	at
org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFi
lesFilter.java:79)
	at
$RequestHandler_11779b5a606.service($RequestHandler_11779b5a606.java)
	at
org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(Che
ckForUpdatesFilter.java:94)
	at
org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(Che
ckForUpdatesFilter.java:85)
	at
org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(Concurr
entBarrier.java:77)
	at
org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(Chec
kForUpdatesFilter.java:107)
	at
$RequestHandler_11779b5a606.service($RequestHandler_11779b5a606.java)
	at
$RequestHandler_11779b5a5fe.service($RequestHandler_11779b5a5fe.java)
	at
org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.ja
va:921)
	at
com.reged.traxtools.services.TraxToolsServiceFilter.service(TraxToolsSer
viceFilter.java:34)
	at
$HttpServletRequestFilter_11779b5a5fd.service($HttpServletRequestFilter_
11779b5a5fd.java)
	at
$HttpServletRequestHandler_11779b5a5ff.service($HttpServletRequestHandle
r_11779b5a5ff.java)
	at
com.reged.services.JaasTapestryFilter$RegedPrivilegedAction.run(JaasTape
stryFilter.java:66)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAsPrivileged(Subject.java:454)
	at
com.reged.security.AbstractPrivilegedSecurityManager.doAsPrivileged(Abst
ractPrivilegedSecurityManager.java:74)
	at
com.reged.services.JaasTapestryFilter.service(JaasTapestryFilter.java:27
)
	at
$HttpServletRequestFilter_11779b5a5fc.service($HttpServletRequestFilter_
11779b5a5fc.java)
	at
$HttpServletRequestHandler_11779b5a5ff.service($HttpServletRequestHandle
r_11779b5a5ff.java)
	at
$HttpServletRequestHandler_11779b5a5fb.service($HttpServletRequestHandle
r_11779b5a5fb.java)
	at
org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:215)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:188)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:213)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:174)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:127)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:117)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:108)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:1
51)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:87
4)
	at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.proc
essConnection(Http11BaseProtocol.java:665)
	at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint
.java:528)
	at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollow
erWorkerThread.java:81)
	at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:689)
	at java.lang.Thread.run(Thread.java:595)

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Injecting LibraryMapping to "core"

Posted by Howard Lewis Ship <hl...@gmail.com>.
That's a feature.

You can remove the ambiguity by injecting them into a non-core folder,
say "/common".  You'd then reference them as
<t:common.foo> or <span t:type="common/foo"/>

On Jan 14, 2008 12:33 AM, Harald Geritzer <h....@gmail.com> wrote:
>
> hi all,
>
> i am building a webapp consisting of serveral plugins each having a set of pages which should be
> injected into the "core" of the webapp.
>
> e.g
>
> webapp context: /testapp
> plugin1       : /testapp/pluginpage1
>                 /testapp/subdir/page1
> plugin2       : /testapp/pluginpage2
>
> i found out, that those pages can be addressed in two ways:
> 1) the way its intended with /testapp/subdir/page1
> 2) by appending a "core" prefix: /testapp/core/subdir/page1
>     tapestry renders all links using the "core"-prefix
>
> is it considered a bug or a feature?
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>



-- 
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org