Mailing List webobjects-dev@wocommunity.org Message #349
From: Markus Ruggiero (rucotec) <markus.ruggiero@rucotec.ch>
Subject: Re: [WO-DEV] Installation on osx Monterey - deployment
Date: Wed, 29 Dec 2021 23:49:55 -0500
To: Stavros Panidis <stavros.panidis@gmail.com>
Cc: WebObjects & WOnder Development <webobjects-dev@wocommunity.org>
Signed Data (Text SHA256)
Stavros,

I cannot see any relevant difference between your build.xml and the one in my project.

When you build your wo-app check the following file:

dist/XYZ.woa/Content/UNIX/UNIXClassPath.txt

It should have this header:

# JVM              == java
# JVMOptions       == --add-exports java.base/sun.security.action=ALL-UNNAMED
# JDB              == jdb
# JDBOptions       == 
# ApplicationClass == ch.kastl.immodata.Application

Important is the JVMOptions line! The modifications in the build.xml add the part to the right of the == sign, which is empty with a non-modified build.xml

You can for a test edit the UNIXClassPath.txt file manually on the deployment system and see whether this then allows your app to start. You DID set the compiler compatibility to 1.8, did you not?

What is the exact error message you get? Is it still complaining about NSTimestamp? Or is there actually a different message? 
Other than that I am at a loss.

Hope you just made a typo and can fix it. Let me know the outcome. If there is a different error message then we have to look further
---markus---

On 29 Dec 2021, at 22:36, Stavros Panidis <stavros.panidis@gmail.com> wrote:



On 28 Dec 2021, at 9:20 PM, Markus Ruggierorucotec <markus.ruggiero@rucotec.ch> wrote:

Even if you do not go with Maven it is actually very simple.

Edit your build.xml file a little bit (see below). When you ant build your app one file that gets created is UNIXClasspath.txt (or some such) that contains header comments that the run script will use. One such comment is JVMOptions. These are not populated but you can fix this easily:

build.xml:

in the init.properties target define a variable:

<target name="init.properties">
add this >>>> <property name="jvmOptions" value="--add-exports java.base/sun.security.action=ALL-UNNAMED"/>

then in the target build.woapp add jvmOptions=“${jvmOptions}” as you can see on the next line

<woapplication name="${build.app.name}" jvmOptions="${jvmOptions}” frameworksBas ...........

All done, build your deployment app with ant and the woapplication builder will happily put the jvmOptions into the UNIXClasspath.txt file from where the run script will take it an put into the right place on the command line.

One time setup, all done. Its work, I have just recently deployed a Wonder app on Ubuntu 20.something running with JRE 17.

Have fun, IT SIMPLY WORKS! Really, it does. Someone put a lot of thought into this 15 years ago.

---markus---



Dear Marcus,

Probably I am doing something wrong, I am also sure that this is something very simple, as usual, but sorry, I can’t find what it is.

There is no problem with server for sure. The same application compiled before upgrade to Monterey - Eclipse - Java 17 is deployed with no problems.

The new one can’t be started. Following is my build.xml where I suppose that there is something wrong:

<project name="EasyShop" default="build" basedir=".">
<target name="build" depends="init.build,build.woapp,javaclient,ssdd,war,split,package" />

<target name="install" depends="init.install,build.woapp,javaclient,ssdd,war,split,package" />

<target name="clean" depends="init.properties">
<delete dir="bin" />
<delete dir="dist" />
</target>

<!-- basic initializations  -->
<target name="init.install" depends="init.properties">
<tstamp />
<property name="dest.dir" value="${wo.apps.root}" />
</target>

<target name="init.build" depends="init.properties">
<tstamp />
<property name="dest.dir" value="dist" />
</target>

<!-- property determination  -->
<target name="init.properties">
<property name="jvmOptions" value="--add-exports java.base/sun.security.action=ALL-UNNAMED"/>

<property file="build.properties" />

<property name="wolips.properties" value="${user.home}${file.separator}Library${file.separator}Application Support${file.separator}WOLips${file.separator}wolips.properties" />
<property file="${wolips.properties}" />
<condition property="wo.properties.check.failed">
<not>
<and>
<isset property="wo.system.frameworks" />
<isset property="wo.local.frameworks" />
</and>
</not>
</condition>
<fail message="The properties 'wo.system.frameworks' and 'wo.local.frameworks' must be set. Check that your ${wolips.properties} is correct." if="wo.properties.check.failed" />

<property name="build.app.name" value="${project.name}" />
<property name="build.app.name.lowercase" value="${project.name.lowercase}" />
</target>

<!-- This copies webserver resources from app.woa's embedded frameworks into split install bundle -->
<target name="split" description="Adds embedded framework webserver resources to the split install bundle by copying from deployment build bundle" unless="servletDeployment">
<property name="wsdest.dir" value="${dest.dir}/Split" />
<mkdir dir="${wsdest.dir}"/>
<copy todir="${wsdest.dir}/WebObjects/${build.app.name}.woa" verbose="true">
<fileset dir="${dest.dir}/${build.app.name}.woa/Contents">
<include name="Frameworks/*.framework/WebServerResources/**"/>
</fileset>
<fileset dir="${dest.dir}/${build.app.name}.woa">
<include name="Contents/WebServerResources/**"/>
</fileset>
</copy>
</target>

  <target name="package" unless="servletDeployment">
    <tar destfile="${dest.dir}/${build.app.name}-Application.tar.gz"
        compression="gzip"
        longfile="gnu">
      <tarfileset dir="${dest.dir}" mode="750">
        <include name="${build.app.name}.woa/${build.app.name}"/>
      </tarfileset>
      <tarfileset dir="${dest.dir}">
        <exclude name="${build.app.name}.woa/${build.app.name}"/>
        <include name="${build.app.name}.woa/**"/>
      </tarfileset>
    </tar>
    <tar destfile="${dest.dir}/${build.app.name}-WebServerResources.tar.gz"
        compression="gzip"
        basedir="${wsdest.dir}/WebObjects"
        longfile="gnu"
        includes="${build.app.name}.woa/**">
    </tar>
</target>

<!-- woproject tasks -->
<target name="build.woapp" depends="compile">
<taskdef name="woapplication" classname="org.objectstyle.woproject.ant.WOApplication"/>
<woapplication name="${build.app.name}" jvmOptions="${jvmOptions}" frameworksBaseURL="/WebObjects/${build.app.name}.woa/Frameworks" destDir="${dest.dir}" customInfoPListContent="${customInfoPListContent}" principalClass="${principalClass}" webXML="${webXML}" webXML_CustomContent="${webXML_CustomContent}" servletAdaptor="er.extensions.jspservlet.ERXServletAdaptor">
<classes dir="${classes.dir}">
<includesfile name="woproject/classes.include.patternset" />
<excludesfile name="woproject/classes.exclude.patternset" />
        <exclude if="javaClient" name="**/client/**/*.*"/>
</classes>

<wsresources dir=".">
<includesfile name="woproject/wsresources.include.patternset" />
<excludesfile name="woproject/wsresources.exclude.patternset" />
</wsresources>

<resources dir=".">
<includesfile name="woproject/resources.include.patternset" />
<excludesfile name="woproject/resources.exclude.patternset" />
        <exclude if="javaClient" name="**/client/**/*.*"/>
</resources>

<frameworks root="ProjectLocal" embed="${embed.ProjectLocal}" eclipse="true" />
<frameworks root="External" embed="${embed.External}" eclipse="true" />
<frameworks root="Local" embed="${embed.Local}" eclipse="true" />
<frameworks root="User" embed="${embed.User}" eclipse="true" />
<frameworks root="System" embed="${embed.System}" eclipse="true" />
<frameworks root="Network" embed="${embed.Network}" eclipse="true" />

<lib dir="Libraries">
<include name="*.jar" />
</lib>
</woapplication>
</target>

<target name="javaclient" if="javaClient" depends="build.woapp">
<mkdir dir="${dest.dir}/${build.app.name}.woa/Contents/WebServerResources/Java" />
<jar basedir="${classes.dir}" excludes="**/server/**/*.*, **/server/**/" jarfile="${dest.dir}/${build.app.name}.woa/Contents/WebServerResources/Java/${build.app.name}.jar"/>
</target>

<target name="war" if="servletDeployment" depends="ssdd">
<war destfile="${dest.dir}/${build.app.name}.war" webxml="${dest.dir}/${build.app.name}/WEB-INF/web.xml">
<fileset dir="${dest.dir}/${build.app.name}">
<include name="**" />
</fileset>
</war>
</target>

<!-- To use this target
    1) create the LICENSE in your project directory
    2) add JavaWOJSPServlet in your WOFrameworks build path
    3) set servlet deployment to true in WOLips Properties
    -->
<target name="ssdd" if="servletDeployment" depends="build.woapp">
<mkdir dir="${dest.dir}/${build.app.name}/WEB-INF/classes" />
<mkdir dir="${dest.dir}/${build.app.name}/WEB-INF/tlds" />
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/">
<fileset dir="${dest.dir}/${build.app.name}.woa/Contents/">
<include name="web.xml" />
</fileset>
</copy>
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/">
<fileset dir="..">
<include name="LICENSE" />
</fileset>
</copy>
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/">
<fileset dir="${dest.dir}">
<include name="${build.app.name}.woa/**" />
</fileset>
</copy>
<!-- copy the frameworks to the WEBINFROOT/Library directory -->
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/">
<fileset dir="${dest.dir}/${build.app.name}.woa/Contents">
<include name="Library/**" />
</fileset>
</copy>
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/">
<fileset dir="${dest.dir}/${build.app.name}.woa">
<include name="Resources/**" />
</fileset>
</copy>
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/lib/">
<fileset dir="${dest.dir}/${build.app.name}/WEB-INF">
<include name="**/Resources/**/*.jar" />
</fileset>
<mapper type="flatten" />
</copy>

<!--  Get the necessary Frameworks from the webobjects system root instead of the project wrapper -->
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/lib" file="${wo.system.frameworks}/JavaWOJSPServlet.framework/WebServerResources/Java/JavaWOJSPServlet_client.jar" />

<copy todir="${dest.dir}/${build.app.name}/WEB-INF/tlds">
<fileset dir="${wo.system.frameworks}/JavaWOJSPServlet.framework/Resources/">
<include name="WOtaglib_1_0.tld" />
</fileset>
</copy>

<!-- the WebObject Extensions -->
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/lib">
<fileset dir="${wo.extensions}">
<include name="*.jar" />
<exclude name="servlet.jar" />
</fileset>
<mapper type="flatten" />
</copy>

<!-- the Java Client Client-Side Classes   -->
<copy todir="${dest.dir}/${build.app.name}/WEB-INF/${build.app.name}.woa/Contents/WebServerResources/Java">
<fileset dir="${wo.local.frameworks}"> 
<include name="**/WebServerResources/Java/*.jar"/> 
</fileset> 
<mapper type="flatten"/>
</copy>

<!-- fix the Macos*ClassPath.txt files  -->
<replaceregexp file="${dest.dir}/${build.app.name}/WEB-INF/${build.app.name}.woa/Contents/MacOS/MacOSClassPath.txt" match="APPROOT/Resources/Java/${build.app.name.lowercase}.jar" replace="APPROOT/${build.app.name}.woa/Contents/Resources/Java/${build.app.name.lowercase}.jar" byline="true" />
<replaceregexp file="${dest.dir}/${build.app.name}/WEB-INF/${build.app.name}.woa/Contents/MacOS/MacOSXServerClassPath.txt" match="APPROOT/Resources/Java/${build.app.name.lowercase}.jar" replace="APPROOT/${build.app.name}.woa/Contents/Resources/Java/${build.app.name.lowercase}.jar" byline="true" />

<!-- fix the web.xml file:  the app itself needs build.app.name/Contents -->
<replaceregexp file="${dest.dir}/${build.app.name}/WEB-INF/web.xml" match="WEBINFROOT/Resources/Java/${build.app.name.lowercase}.jar" replace="WEBINFROOT/${build.app.name}.woa/Contents/Resources/Java/${build.app.name.lowercase}.jar" byline="true" />

<!-- fix the web.xml file to remove the extra Frameworks/ directory level for the frameworks -->
<replaceregexp file="${dest.dir}/${build.app.name}/WEB-INF/web.xml" match="WEBINFROOT/Frameworks//" replace="WEBINFROOT/" byline="true" />
</target>

<target name="compile" depends="init.properties">
<taskdef name="wocompile" classname="org.objectstyle.woproject.ant.WOCompile" />

<mkdir dir="bin" />
<wocompile srcdir="Sources" destdir="bin">
<frameworks root="ProjectLocal" embed="false" eclipse="true" />
<frameworks root="External" embed="false" eclipse="true" />
<frameworks root="Local" embed="false" eclipse="true" />
<frameworks root="User" embed="false" eclipse="true" />
<frameworks root="System" embed="false" eclipse="true" />
<frameworks root="Network" embed="false" eclipse="true" />
<classpath>
<fileset dir="Libraries">
<include name="*.jar" />
</fileset>
<fileset dir="${wo.extensions}">
<include name="*.jar" />
</fileset>
</classpath>
</wocompile>
</target>
</project>

Can you please suggest something more? Last chance to save my New Year Eve.

Stavros



Markus Ruggiero


rucotec GmbH                        web https://rucotec.ch
Steinenvorstadt 79                email markus.ruggiero@rucotec.ch
4051 Basel / Switzerland         mobile +41 79 508 4701








Content Unaltered as verified By:
<markus.ruggiero@rucotec.ch>
Subscribe (FEED) Subscribe (DIGEST) Subscribe (INDEX) Unsubscribe Mail to Listmaster