MyFacesCore114 - wendysmoak/wiki GitHub Wiki

MyFaces Core 1.1.4 Release Diary

Release Plan: http://wiki.apache.org/myfaces/CoreRelease114

Staging Repository: http://people.apache.org/builds/myfaces/m2-staging-repository

To avoid repeated password prompts, in settings.xml, add a for the staging repository:

<settings>
...
   <servers>
      <server>
         <id>myfaces-staging</id>
         <username>wsmoak</username>
         <privateKey>/path/to/private/key</privateKey>
      </server>
   ...

Also, add a profile to your settings.xml with the myfaces staging repository, so you can enable it as needed:

      <profile>
         <id>myfaces-staging</id>
         <repositories>
            <repository>
               <id>myfaces-staging</id>
               <url>http://people.apache.org/builds/myfaces/m2-staging-repository</url>
               <snapshots><enabled>false</enabled></snapshots>
               <releases><enabled>true</enabled></releases>
            </repository>
         </repositories>
      </profile>

'''Maven'''

Change the version to 1.0.4 in the myfaces-master pom and comment out the IDEA plugin snapshot version. mvn deploy to the staging repo.

rm -rf $M2_REPO/org/apache/myfaces
mvn deploy

Tag:

svn cp -r441982 https://svn.apache.org/repos/asf/myfaces/maven/branches/1_0_4
https://svn.apache.org/repos/asf/myfaces/maven/tags/1_0_4 -m "Tagged Myfaces Maven v1.0.4 at r441982"

''Note:'' Next time, let the version numbers of the master pom, the wagon plugin, etc. diverge, and only tag the individual piece you need.

'''Shared'''

Change the parent pom version in Shared to 1.0.4, and the version of Shared itself to 2.0.3 (in the parent, api and impl poms.)

rm -rf $M2_REPO/org/apache/myfaces
mvn deploy -Pmyfaces-staging 

Profile is in your settings.xml (see above) to pick up the myfaces-master pom not yet on ibiblio.

Tag:

svn cp -r441992 https://svn.apache.org/repos/asf/myfaces/shared/branches/2_0_3/
https://svn.apache.org/repos/asf/myfaces/shared/tags/2_0_3 -m "Tagged MyFaces Shared v2.0.3 at r441992"

'''Core'''

Comment out the build-tools (for code generation) and wagon plugin (for nightly builds) dependencies as I am not releasing them.

Change versions to myfaces master 1.0.4, shared 2.0.3, and Core API/Impl 1.1.4

Rather than deleting the repo at this point, set aside everything that you built for shared. Then build core.

mv $M2_REPO/org/apache/myfaces /path/to/somewhere/else  
mvn deploy -Pmyfaces-staging,generate-assembly
cd assembly
mvn assembly:assembly -Pmyfaces-staging
scp target/assembly/out/* people.apache.org:/www/people.apache.org/builds/myfaces/core-1.1.4

Tag:

svn cp -r442016 https://svn.apache.org/repos/asf/myfaces/core/branches/1_1_4/
https://svn.apache.org/repos/asf/myfaces/core/tags/1_1_4 -m "Tagged MyFaces Core v1.1.4 at r442016"

Create signatures for all artifacts in $M2_REPO/org/apache/myfaces with the sign-recursive.sh script, and upload to the staging repo.

When everything is built, '''move''' the staging repo underneath core-1.1.4. Each release (or group of related releases) will be staged separately.

Go back and tag the repository at the correct (last updated) revision for each branch.

Update the release plan wiki page with information on testing the distribution.

TODO: Advance the version numbers on the branches to 1.1.4.1-SNAPSHOT, 2.0.3.1-SNAPSHOT, 1.0.4.1-SNAPSHOT.


=== Moving the release to www.apache.org/dist and m2-ibiblio-rsync-repository ===

[#dist] The distributions in www.apache.org/dist:

ssh people.apache.org
$ cd /www/people.apache.org/builds/myfaces/core-1.1.4
$ pwd
/www/people.apache.org/builds/myfaces/core-1.1.4
$ cp  *bin*  /www/www.apache.org/dist/myfaces/binaries
$ cp  *src*  /www/www.apache.org/dist/myfaces/source

[#current] Update the symbolic links to the "current" version:

ssh people.apache.org
$ cd /www/www.apache.org/dist/myfaces/
$ ln -s source/myfaces-core-1.1.4-src.tar.gz myfaces-core-current-src.tar.gz
$ ln -s source/myfaces-core-1.1.4-src.zip    myfaces-core-current-src.zip
$ ln -s source/myfaces-core-1.1.4-bin.tar.gz myfaces-core-current-bin.tar.gz
$ ln -s source/myfaces-core-1.1.4-bin.zip    myfaces-core-current-bin.zip

$ ln -s source/myfaces-core-1.1.4-src.tar.gz.asc myfaces-core-current-src.tar.gz.asc
$ ln -s source/myfaces-core-1.1.4-src.zip.asc    myfaces-core-current-src.zip.asc
$ ln -s source/myfaces-core-1.1.4-bin.tar.gz.asc myfaces-core-current-bin.tar.gz.asc
$ ln -s source/myfaces-core-1.1.4-bin.zip.asc    myfaces-core-current-bin.zip.asc

$ ln -s source/myfaces-core-1.1.4-src.tar.gz.md5 myfaces-core-current-src.tar.gz.md5
$ ln -s source/myfaces-core-1.1.4-src.zip.md5    myfaces-core-current-src.zip.md5
$ ln -s source/myfaces-core-1.1.4-bin.tar.gz.md5 myfaces-core-current-bin.tar.gz.md5
$ ln -s source/myfaces-core-1.1.4-bin.zip.md5    myfaces-core-current-bin.zip.md5

New release managers may need to update the KEYS file. Add your key to the file in the MyFaces svn repo, then:

ssh people.apache.org
$ cd /www/www.apache.org/dist/myfaces/
$ svn export http://svn.apache.org/repos/asf/myfaces/maven/trunk/KEYS

The Maven artifacts:

Let's see if just copying it over will work. Rumor has it that releases are found by constructing the path directly, not by looking at the repository metadata. (That's apparently more important for snapshots.)

ssh people.apache.org
$ cd /www/people.apache.org/builds/myfaces/core-1.1.4/m2-staging-repository
$ pwd
/www/people.apache.org/builds/myfaces/core-1.1.4/m2-staging-repository
$ cp -r org/apache/myfaces/* /www/people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/myfaces/

cp: /www/people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/myfaces/shared/myfaces-shared-project/2.0.3: Permission denied

... problem, 'shared' is not group writeable. Ask Sean and infra@ on IRC, wait... and (20060918) they're fixed. :)

Trying again.

ssh people.apache.org
$ cd /www/people.apache.org/builds/myfaces/core-1.1.4/m2-staging-repository
$ pwd
/www/people.apache.org/builds/myfaces/core-1.1.4/m2-staging-repository
$ cp -r org/apache/myfaces/* /www/people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/myfaces/

Now test it:

$ cd $svn/myfaces/current/tomahawk
$ svn up
$ mvn install
$ cd examples
$ rm -rf $M2_REPO/org/apache/myfaces/core              (1)
$ rm -rf $M2_REPO/org/apache/myfaces/shared
$ rm -rf $M2_REPO/org/apache/myfaces/maven
$ mvn install -Dmyfaces=1.1.4 -Pibiblio-rsync          (2)
$ cd simple
$ mvn install -Dmyfaces=1.1.4 -Pselenium cargo:start   (3)
--> visit http://localhost:8080/myfaces-example-simple/selenium/core/TestRunner.html to run the tests.
--> press CTRL-C to stop Tomcat
$ ls target/myfaces-example-simple/WEB-INF/lib         (4)

Delete locally built stuff so it will be downloaded

The ibiblio-rsync profile in settings.xml has m2-ibiblio-rsync-repository so you can test before it gets synced to ibiblio.

Core 1.1.4 is already in your local repo, so you don't need the ibiblio-rsync profile

Verify that WEB-INF/lib contains the Core 1.1.4 jars

Done! Now ask on dev@maven for a sync.

=== Bulk Change JIRA Issues ===

  • Add the 1.1.4 version to JIRA

Bulk change:

  • Find Issues ** Project: MyFaces Core ** Fix For: 1.1.4-SNAPSHOT ** Bulk Change (link @ top right, might need to scroll over) *** Check top checkbox to select all (16 issues) *** Next *** ./ Check 'fix version', select 1.1.4 *** Verify & Confirm

  • Admin -> Core -> Manage Versions

  • Archive 1.1.4-SNAPSHOT

  • Release 1.1.4

[#compat] === Is Core 1.1.4 compatible with Tomahawk 1.1.3 ? ===

Under discussion on the dev list:

"When you told me that you reverted the getScrolling stuff, I remembered that I also changed the name of the clear..._formName() method. Now if old tomahawk 1.1.3 components expect to call this clear-method, they'd have a java-script exception. So essentially - if you use an h:form and a t:commandLink, you should see this exception, apart from that, you should be safe." --Martin Marinschek [http://www.nabble.com/Re%3A-Release-Announcement-for-MyFaces-Core-1.1.4-p6348519.html here]

I built myfaces-example-simple from the Tomahawk 1.1.3 tag with Core 1.1.4. It's [http://people.apache.org/~wsmoak/myfaces/tomahawk/ here]. A few of the examples have the <h:form><t:commandLink> construct, but do not show any Javascript errors.

New theory: The incompatible change is on the Core 1.1.5-SNAPSHOT and not in Core 1.1.4 at all.

I'm still looking for the exact change that caused the initial confusion. Mike suggests two possible revisions in [http://www.nabble.com/%22exact-change-that-caused-the-initial-confusion%22-t2292475.html this thread.]

[#propnotfound] === PropertyNotFoundException <t:updateActionListener> ===

TODO: Check this on the 1.1.5-SNAPSHOT trunks

Probably unrelated to the JavaScript changes, but...

In the myfaces-example-simple app built with Tomahawk 1.1.3 and Core 1.1.4 [http://people.apache.org/~wsmoak/myfaces/tomahawk here], clicking a country name on the masterDetail.jsf produced by this:

<h:form>
   ...
   <t:commandLink action="go_country" immediate="true">
      <h:outputText value="#{currentCountry.name}" />
      <!-- for convenience: MyFaces extension. sets id of current row in countryForm -->
      <!-- you don't have to implement a custom action! -->
      <t:updateActionListener property="#{countryForm.id}" value="#{country.id}" />
   </t:commandLink>
   ...
</h:form>

causes this:

MyFaces encountered an error.
Message: Bean: org.apache.myfaces.examples.misc.Country, property: id

javax.faces.el.PropertyNotFoundException: Bean: org.apache.myfaces.examples.misc.Country, property: id
	at org.apache.myfaces.el.PropertyResolverImpl.getPropertyDescriptor(PropertyResolverImpl.java:483)
	at org.apache.myfaces.el.PropertyResolverImpl.getPropertyDescriptor(PropertyResolverImpl.java:454)
	at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:417)
	at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:82)
	at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:532)
	at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:383)
	at org.apache.myfaces.custom.updateactionlistener.UpdateActionListener.getValue(UpdateActionListener.java:93)
	at org.apache.myfaces.custom.updateactionlistener.UpdateActionListener.processAction(UpdateActionListener.java:127)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:48)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:484)
	at javax.faces.component.UICommand.broadcast(UICommand.java:75)
	at javax.faces.component.UIData.broadcast(UIData.java:513)
	at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:136)
	at org.apache.myfaces.lifecycle.LifecycleImpl.applyRequestValues(LifecycleImpl.java:219)
	at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:71)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)

javax.servlet.ServletException: Bean: org.apache.myfaces.examples.misc.Country, property: id
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)

MyFaces Exception Report
⚠️ **GitHub.com Fallback** ⚠️