Hi Kito, I just got two days from my employer to debug it out, and
frankly spoken the WAS toolchain did not work for me, I got the server
up and running standalone, but I could not deploy the hello world war
(ran out of time to investigate that further probably a missing config
entry)
The combination with Eclipse did not work at all for me.
Have in mind I am not an expert on WAS I never really have used it.
If anyone from the IBM guys is reading this, I could need some help
here. Ext-Scripting would be a great extension for WAS if it could be
made to run on it.
Anyways:
But I was able to debug the thing out for WAS Liberty profile as well as
Glassfish, here is the info on WAS LB (Glassfish should now work out of
the box with the latest snapshot and myfaces in)
I noticed that WAS LB does not unpack the wars as other app servers do,
hence the compilation failed due to the compiler not having the jars
available.
What you can do is following
a) Build the latest snapshot from the trunk, should be self contained
within the maven repos, so no additional work is needed mvn clean
install should suffice.
b) Replace the 1.0.2 jars with the ones from the Snapshot
in your web.xml add following:
<context-param>
<description>Some containers do not expand their war/ear files
and do not return a proper classpath for the
compilers.
For those you can set an additional classpath as comma
separated list of paths so that the compiler can pick
up dependencies from other directories. Wildcarding regarding
jar and zip files is allowed.
</description>
<param-name>org.apache.myfaces.extensions.scripting.ADDITIONAL_CLASSPATH</param-name>
<param-value>/whatever/myfaces20-extscript-helloworld/target/myfaces20-extscript-helloworld-1.0.4-SNAPSHOT/WEB-INF/lib/*.jar,
/whatever/myfaces20-extscript-helloworld/target/myfaces20-extscript-helloworld-1.0.4-SNAPSHOT/WEB-INF/classes</param-value>
</context-param>
adjust the paths to your needs so that the compiler can pick up the
paths with the jars as needed.
This works at least under WAS liberty profile, give it a shot with the
snapshot release.
also one change, the servlet filter is not needed anymore, it still is
in with auto setup, but you wont need the filter in your web.xml
anymore, it either is picked up doing nothing or not does not matter.
(I will remove the servlet filter asap to avoid confusion)
Werner
Am 11.09.12 15:35, schrieb Kito Mann:
Hello Werner,
Have you had a chance to debug this yet?
___
Kito D. Mann | @kito99 | Author, JSF in Action
Virtua, Inc. | http://www.virtua.com | JSF/Java EE training and consulting
http://www.JSFCentral.com - JavaServer Faces FAQ, news, and info | @jsfcentral
+1 203-404-4848 x246
* Listen to the latest headlines in the JSF and Java EE newscast:
http://blogs.jsfcentral.com/JSFNewscast/
* Sign up for the JSFCentral Newsletter: http://oi.vresp.com/?fid=ac048d0e17
On Tue, Sep 4, 2012 at 3:15 PM, Werner Punz <[email protected]> wrote:
Ext-scripting registers short lived classloaders which register the newly to
be loaded classes and drops the classloaders afterwards.
(so called throw away classloaders)
there is no long lived classloader pushed into the system on top of it to
avoid container problems.
Either way thanks for all the links and debugging hints, I will have a look
at it.
Werner
Am 04.09.12 21:09, schrieb Rohit Kelapure:
For further classloader debugging you can enable the WebSphere Classloader
viewer service which will show you the exact set of classes loaded in your
app. I also suggest enabling verbose classloading.
In order to reload the class in WAS, the application classloader needs to
be unloaded and reloaded back again. Not sure how Ext-Scripting achieves
this.
If you are interested in further deep dive debugging these are the steps
...
-
MustGather:
http://www-01.ibm.com/support/docview.wss?uid=swg21196187
-
Diagnostic Trace > com.ibm.ws.classloader.*=all
-
JVM > Verbose class loading
-
JVM > Custom Properties -> ws.ext.debug=true
-
Verbose class loading:
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.multipl<http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/urun_rconfproc_jvm.html>
atform.doc/info/ae/ae/urun_rconfproc_jvm.html<http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/urun_rconfproc_jvm.html>
-
Prints each class that was loaded and the absolute path of the
JAR.
-
ws.ext.debug goes to native_stdout.log or SystemOut.log
-
See also ws.ext.dirs in SystemOut.log which is the classpath
passed into com.ibm.ws.bootstrap.ExtClassLoader (which
details of which are
printed due to ws.ext.debug).
-
On the IBM JDK, use -Dibm.cl.verbose=classpattern
-
classpattern example: com.ibm.msg.client.commonservices.trace*
-
Takes any regular expression.
-
Normally goes to native_stdout.log, but sometimes goes to
SystemOut.log.
-
Shows verbose debug for sun.misc.Launcher$ExtClassLoader and
sun.misc.Launcher$AppClassLoader classloaders.
-
Remember that just because a class is not found in these two
classloaders, does not mean it is not found at all. After
it is not found
in AppClassLoader, it may delegate up, for example to
com.ibm.ws.bootstrap.ExtClassLoader, and that's why
classloader trace, and
for com.ibm.ws.bootstrap.ExtClassLoader in particular,
ws.ext.debug are
useful.
-
From the DMGR, use the Class Loader Viewer under Troubleshooting.
Drill down to a particular application in a server, and you can
export the
table as XML to send to others.
-
There are two tabs, Hierarchy and Search order. View both and
export both.
-
By default, the class loader viewer just shows which JARs get
loaded into which classloader. You can also view which
classes get loaded
into which classloader by clicking Table View > Enable the
class loader
viewer service to view the list of classes loaded. Click here
to enable. >
Enable service at server startup > Restart the server
-
This can be enabled/disabled in Application Server >
Additional
Properties > Class loader viewer service
-
Common search order (#6 = EAR, #7 = WAR):
-
1 - JDK Extension - sun.misc.Launcher$ExtClassLoader
-
2 - JDK Application - sun.misc.Launcher$AppClassLoader
-
3 - OSGI -
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader
-
4 - Extension - com.ibm.ws.bootstrap.ExtClassLoader
-
5 - WAS Protection Class Loader -
com.ibm.ws.classloader.ProtectionClassLoader
-
6 - Module - com.ibm.ws.classloader.CompoundClassLoader
-
7 - Module – com.ibm.ws.classloader.CompoundClassLoader
-
Background
-
http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/topic/com.ibm.java.doc.diagnostics.50/diag/understanding/class_loader.html
-
http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/topic/com.ibm.java.doc.diagnosti<http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/topic/com.ibm.java.doc.diagnostics.50/diag/tools/javadump_tags_classes.html>
cs.50/diag/tools/javadump_tags_classes.html<http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/topic/com.ibm.java.doc.diagnostics.50/diag/tools/javadump_tags_classes.html>
-
http://www-128.ibm.com/developerworks/java/library/j-dclp1/
-
http://www-128.ibm.com/developerworks/java/library/j-dclp2.html
-
http://www-128.ibm.com/developerworks/java/library/j-dclp3/
-
http://www-128.ibm.com/developerworks/java/library/j-dclp4/
-
http://www.redbooks.ibm.com/redpapers/pdfs/redp4307.pdf
-
http://www.ibm.com/developerworks/websphere/library/techarticles/0112_deboer/deboer.html
-cheers,
Rohit
On Tue, Sep 4, 2012 at 2:38 PM, Kito Mann <[email protected]> wrote:
On Tue, Sep 4, 2012 at 2:36 PM, Rohit Kelapure <[email protected]>
wrote:
WAS 8 is free for developers. No license needed.
See http://www.ibm.com/developerworks/downloads/ws/wasdevelopers/
What is the exact symptom of the problem ?
Basically, Ext-Scripting thinks it is re-loading classes, but it has no
affect on the runtime. It's almost like it's using the wrong class loader
or something.
-cheers,
ROhit
On Tue, Sep 4, 2012 at 2:30 PM, Werner Punz <[email protected]>
wrote:
The config looks correct to me
I guess that we will have an incompatibility with WAS then.
I have tested the code only on servlet runners like tomcat and Jetty.
I will try to get hold on a WAS 8.0 testlicense to debug that out.
Won´t happen this week anymore though due to time constraints.
Are you running in an EAR environment or simple WAR environment?
Werner
Am 04.09.12 17:02, schrieb Kito Mann:
Hello Werner,
Thanks for looking into this. Here is the web.xml. I just realized
that
it's set to Servlet 2.5 instead of 3.0; could that be the problem?
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/**2001/XMLSchema-instance<
http://www.w3.org/2001/XMLSchema-instance>
"
xmlns="http://java.sun.com/**xml/ns/javaee<
http://java.sun.com/xml/ns/javaee>"
xmlns:web="
http://java.sun.com/xml/ns/**javaee/web-app_2_5.xsd<
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd>
"
xsi:schemaLocation="http://**java.sun.com/xml/ns/javaee<
http://java.sun.com/xml/ns/javaee>
http://java.sun.com/xml/ns/**javaee/web-app_2_5.xsd<
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd>
"
id="WebApp_ID" version="2.5">
<filter>
<filter-name>scriptingFilter</**filter-name>
<filter-class>org.apache.**myfaces.extensions.scripting.**servlet.**
ScriptingServletFilter</**filter-class>
</filter>
<filter-mapping>
<filter-name>scriptingFilter</**filter-name>
<url-pattern>/faces/*</url-**pattern>
<dispatcher>REQUEST</**dispatcher>
<dispatcher>FORWARD</**dispatcher>
<dispatcher>INCLUDE</**dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<context-param>
<description> Initializes the plugins for our scripting
support
</description>
<param-name>org.apache.**myfaces.FACES_INIT_PLUGINS</**
param-name>
<param-value>org.apache.**myfaces.extensions.scripting.**servlet.**
StartupServletContextPluginCha**inLoader</param-value>
</context-param>
<context-param>
<description>Additional comma separated loader paths to
allow
direct editing on the sources directory instead of the deployment dir
</description>
<param-name>org.apache.**myfaces.extensions.scripting.**
java.LOADER_PATHS</param-name>
<param-value>C:/workspaces/**src</param-value>
</context-param>
<context-param>
<param-name>**log4jConfigLocation</param-**name>
<param-value>/WEB-INF/log4j.**properties</param-value>
</context-param>
<context-param>
<param-name>javax.faces.**PROJECT_STAGE</param-name>
<param-value>Development</**param-value>
</context-param>
<context-param>
<param-name>javax.faces.**FACELETS_REFRESH_PERIOD</**param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_**SAVING_METHOD</param-name>
<param-value>server</param-**value>
</context-param>
<context-param>
<param-name>javax.faces.**validator.DISABLE_DEFAULT_**
BEAN_VALIDATOR</param-name>
<param-value>true</param-**value>
</context-param>
<context-param>
<param-name>org.apache.**myfaces.NUMBER_OF_VIEWS_IN_**
SESSION</param-name>
<param-value>25</param-value>
</context-param>
<context-param>
<param-name>javax.faces.**FACELETS_LIBRARIES</param-**name>
<param-value>/WEB-INF/custom.**taglib.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.**VALIDATE_EMPTY_FIELDS</param-**name>
<param-value>true</param-**value>
</context-param>
<context-param>
<param-name>javax.faces.**PARTIAL_STATE_SAVING</param-**name>
<param-value>true</param-**value>
</context-param>
<context-param>
<param-name>primefaces.THEME</**param-name>
<param-value>none</param-**value>
</context-param>
<context-param>
<param-name>primefaces.SUBMIT<**/param-name>
<param-value>partial</param-**value>
</context-param>
<context-param>
<param-name>org.apache.**myfaces.SERIALIZE_STATE_IN_**
SESSION</param-name>
<param-value>false</param-**value>
</context-param>
<context-param>
<param-name>org.apache.**myfaces.COMPRESS_STATE_IN_**SESSION</param-name>
<param-value>false</param-**value>
</context-param>
<context-param>
<param-name>org.apache.**myfaces.NUMBER_OF_SEQUENTIAL_**
VIEWS_IN_SESSION</param-name>
<param-value>7</param-value>
</context-param>
<context-param>
<param-name>org.apache.**myfaces.USE_FLASH_SCOPE_PURGE_**
VIEWS_IN_SESSION</param-name>
<param-value>true</param-**value>
</context-param>
<context-param>
<param-name>org.apache.**myfaces.ADD_RESOURCE_CLASS</**
param-name>
<param-value>org.apache.**myfaces.component.html.util.**
StreamingAddResource</param-**value>
</context-param>
<context-param>
<param-name>org.apache.**myfaces.USE_ENCRYPTION</param-**name>
<param-value>false</param-**value>
</context-param>
<filter>
<display-name>LoginFilter</**display-name>
<filter-name>LoginFilter</**filter-name>
<filter-class>
gov.nh.dhhs.newheights.**presentation.framework.**
application.filter.LoginFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</**filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<listener>
<listener-class>
org.apache.myfaces.webapp.**StartupServletContextListener<**
/listener-class>
</listener>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.**webapp.FacesServlet</servlet-**
class>
<load-on-startup>1</load-on-**startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-**pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces
Servlet
</servlet-name>
<url-pattern>*.jsf</url-**pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-**pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-**pattern>
</servlet-mapping>
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-**type>
</mime-mapping>
<login-config>
<auth-method>FORM</auth-**method>
<realm-name>developinjava</**realm-name>
<form-login-config>
<form-login-page>/login.xhtml<**/form-login-page>
<form-error-page>/error.jspx</**form-error-page>
</form-login-config>
</login-config>
<error-page>
<exception-type>java.lang.**Exception</exception-type>
<location>/faces/error.xhtml</**location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/faces/error.xhtml</**location>
</error-page>
<session-config>
<session-timeout>30</session-**timeout>
</session-config>
</web-app>
___
Kito D. Mann | @kito99 | Author, JSF in Action
Virtua, Inc. | http://www.virtua.com | JSF/Java EE training and
consulting
http://www.JSFCentral.com - JavaServer Faces FAQ, news, and info |
@jsfcentral
+1 203-404-4848 x246
* Listen to the latest headlines in the JSF and Java EE newscast: *
http://blogs.jsfcentral.com/**JSFNewscast/*<
http://blogs.jsfcentral.com/JSFNewscast/*>
* Sign up for the JSFCentral Newsletter: http://oi.vresp.com/?fid=**
ac048d0e17 <http://oi.vresp.com/?fid=ac048d0e17>
On Mon, Sep 3, 2012 at 7:59 AM, Werner Punz <[email protected]>
wrote:
Am 03.09.12 13:52, schrieb Werner Punz:
Am 31.08.12 21:44, schrieb Kito Mann:
I'm trying to get MyFaces Extensions-Scripting running on RAD 8.0
with
WAS
8.0 on Win 7 (no this isn't my choice of tools...) The goal is to
use
the
dynamic Java class loading to avoid the hideously long WAS publish
times.
For the most part, everything is working fine now, and
Ext-Scripting
notices when the class has changed and outputs the full list of
classes
that are being loaded to the console. Unfortunately, the changes
aren't
being picked up by the application. I've tried several different
scenarios
(using a specific LOADER_PATH, the default WEB-INF/java path,
changing
the
publishing settings, turning Build Automatically on or off, etc.),
but
I
haven't had any luck. Perhaps WAS is doing something different at
the
classloader level than Ext-Scripting expects? Any ideas?
___
Kito D. Mann | @kito99 | Author, JSF in Action
Virtua, Inc. | http://www.virtua.com | JSF/Java EE training and
consulting
http://www.JSFCentral.com - JavaServer Faces FAQ, news, and info |
@jsfcentral
+1 203-404-4848 x246
* Listen to the latest headlines in the JSF and Java EE newscast: *
http://blogs.jsfcentral.com/****JSFNewscast/*<
http://blogs.jsfcentral.com/**JSFNewscast/*>
<http://blogs.**jsfcentral.com/JSFNewscast/*<
http://blogs.jsfcentral.com/JSFNewscast/*>
* Sign up for the JSFCentral Newsletter:
http://oi.vresp.com/?fid=****ac048d0e17<
http://oi.vresp.com/?fid=**ac048d0e17>
<http://oi.vresp.**com/?fid=ac048d0e17<
http://oi.vresp.com/?fid=ac048d0e17>
Mhh Hi Kito, currently Ext-Scripting is not tested on WAS,
normally
it
should be picked up, normally the files should be picked up as soon
as
you have the loader path set or WEB-INF/java is set.
Sorry for not having been able to test Ext-Scripting on the big
irons
currently.
Also I forgot, can you post your web.xml configuration?
You might have missed the init plugin for myfaces.
Werner