persistence@glassfish.java.net

Re: Please review: changes to push new versions to maven repository

From: Craig L Russell <Craig.Russell_at_Sun.COM>
Date: Tue, 13 Feb 2007 19:56:19 -0800

Hi Wonseok,

On Feb 13, 2007, at 7:40 PM, Wonseok Kim wrote:

> Hi Craig,
>
> I'm curious that if we publish every build such as 2.0-b35, 2.0-
> b36..., is it required to publish the SNAPSHOT build too to the
> maven repository?

  No, what and when we publish artifacts to the repository is our
decision.

What I've seen from other projects is that they publish SNAPSHOT
builds nightly or when there is something important for users on the
bleeding edge to test. Some projects like to have users run automated
tests on interim (non-promoted) builds to get early warning about
regressions, performance problems, etc.

> I think it's enough to publish every (weekly)promoted builds only.
> If a user use SNAPSHOT version for dependency, he will get a latest
> promoted build and I think it's enough.

That's our decision, and I have no strong opinion. The Glassfish
project is so big that many users won't want a non-promoted build
even if they want "the latest".
>
> My intention of the SNAPSHOT version is just for developers who
> build manually in the workspace. Currently, "9.1 build: not
> promoted (02/12/2007)" is being used for this (in MANIFEST and
> logging). I don't know how to get the lastest or next build number
> in Ant script. So I believe that " 2.0-SNAPSHOT (02/12/2007)" is
> good enough.

For developers who don't expect a promoted build, this seems reasonable.
>
> Marina, I see there are three places related to TopLink Essentials
> in the java.net maven repository,
> https://maven-repository.dev.java.net/nonav/repository/
> javax.persistence/
> https://maven-repository.dev.java.net/nonav/repository/
> oracle.toplink.essentials/
> https://maven-repository.dev.java.net/nonav/repository/
> oracle.toplink.essentials.agent/
>
> java.persistence contains API and toplink-essentials.jar.
> oracle.toplink.essentials and oracle.toplink.essentials.agent
> contain only agent jar. This is very confusing.
> As Craig said before, I believe the groupId for toplink-
> essentials.jar and the agent jar should be
> "oracle.toplink.essentials".

I think we're awaiting word from Oracle's team on what they want to
call the groupId for the toplink contributions. If I were king, I'd
call the groupId toplink.essentials for both the essentials jar and
the agent jar. This is to preserve the toplink brand but dissociate
it from Oracle, as they are trying to promote the open source brand.

Craig

> Even if we have no option to remove already-published files, we'd
> better use the groupId for the two jar files from now.
>
> Marina, I think you can publish next promoted build(b36?) to the
> repository after I finish this versioning fix. I can check-in
> anytime if there is no more concern.
>
> Thanks,
> -Wonseok
>
> On 2/14/07, Craig L Russell <Craig.Russell_at_sun.com> wrote:
> Hi Wonseok,
>
> Thanks for the update.
>
> On Feb 12, 2007, at 9:27 PM, Wonseok Kim wrote:
>
>> Hi Craig,
>>
>> To compromise the issue, I fixed more things to my previous patch.
>> * The full version will be like 2.0-b35 or 2.0-SNAPSHOT which does
>> not include datestamp. This is used in POM.
>
> Good. I'd like to see the artifacts built only once and published
> under two different names. You would probably have an ant <copy>
> task defined to copy the artifacts to the file names with SNAPSHOT
> designation.
>
>> * The "Implementation-Version" entry of MANIFEST.MF will have the
>> full version and a build datestamp like "2.0-b35 (02/12/2007) or
>> 2.0-SNAPSHOT (02/12/2007)" for more information.
>
> I don't think that the SNAPSHOT is an Implementation-Version. It's
> just a shorthand notation for "the latest", so I'd rather have the
> 2.0-b35 (02/12/2007) be the version that is published under two
> different names. "Next week", the SNAPSHOT will be replaced.
>
> What I'm not 100% sure of is if the artifact is named, e.g .
> toplink-essentials-2.0-SNAPSHOT.jar but the pom inside the jar says
> the version is 2.0-b35. I think it's ok but might need some testing
> to be sure.
>
>> * The version string of the runtime which is printed in logs will
>> also include the date timestamp like below.
>> [TopLink Info]: 2007.02.13 01:50:01.198--ServerSession (25062038)--
>> TopLink, version: Oracle TopLink Essentials - 2.0 (Build b35
>> (02/12/2007))
>
> ok.
>>
>> * One more thing is done to consolidate the agent class into
>> toplink-essentials.jar. Which can be used as an java agent instead
>> of toplink-essentials-agent.jar file. It still generates the agent
>> jar file for existing users.
>
> ok. My main concern with the separate agent jar is usability.
> Currently, as a separate maven artifact, the user's project has to
> declare a dependency on two different essentials artifacts in their
> pom, and these need to be kept in sync manually. If we combine the
> two jars, then only one artifact dependency needs to be declared.
>
>> I think we can remove it later(GFv3?) after some campaign.
>
> The agent stuff will take some getting used to, since it was not
> widely used before this technology was published. So I agree that
> we can delay removal of the agent jar until everyone "gets it".
> Meantime, we should change the documentation to refer to the
> essentials jar and keep the agent jar only for those folks who are
> already using it.
>
> Craig
>
>>
>> Team members, Please review the diff and the attached file.
>> Thanks,
>> -Wonseok
>>
>> Index: build.xml
>> ===================================================================
>> RCS file: /cvs/glassfish/entity-persistence/build.xml,v
>> retrieving revision 1.17
>> diff -c -w -r1.17 build.xml
>> *** build.xml 4 Oct 2006 17:16:54 -0000 1.17
>> --- build.xml 13 Feb 2007 04:59:46 -0000
>> ***************
>> *** 48,62 ****
>>
>> &commonBuild;
>>
>> <tstamp>
>> <format property="build_date" pattern="MM/dd/yyyy"/>
>> </tstamp>
>> ! <condition property="build_string" value="${build_id}">
>> <not>
>> <equals arg1="${build_id}" arg2="" trim="true"/>
>> </not>
>> </condition>
>> ! <property name="build_string" value="non promoted: $
>> {build_date}"/>
>>
>> <!-- all -->
>> <target name="all" depends="compile, assemble"
>> --- 48,70 ----
>>
>> &commonBuild;
>>
>> + <!-- versioning -->
>> + <!-- ${build_id} will be given by the build system. Manual
>> build is SNAPSHOT -->
>> <tstamp>
>> <format property="build_date" pattern="MM/dd/yyyy"/>
>> </tstamp>
>> ! <condition property="build_number" value="${build_id}">
>> <not>
>> + <or>
>> <equals arg1="${build_id}" arg2="" trim="true"/>
>> + <equals arg1="${build_id}" arg2="local"
>> trim="true"/>
>> + </or>
>> </not>
>> </condition>
>> ! <property name="build_number" value="SNAPSHOT"/>
>> ! <property name="build_number_string" value="${build_number}
>> (${build_date})"/>
>> ! <property name="full_version" value="${release.version}-$
>> {build_number}"/>
>> ! <property name="full_version_string" value="${full_version}
>> (${build_date})"/>
>>
>> <!-- all -->
>> <target name="all" depends="compile, assemble"
>> ***************
>> *** 83,89 ****
>> description="Compile TopLink Essentials sources">
>> <copy file="${src.dir}/oracle/toplink/essentials/
>> Version.java"
>> tofile="${ component.classes.dir}/oracle/toplink/
>> essentials/Version.java"/>
>> ! <replace file="${ component.classes.dir}/oracle/toplink/
>> essentials/Version.java" token="ESSENTIALS_BUILD_NUMBER" value="$
>> {build_string}"/>
>> <javac srcdir="${component.classes.dir}"
>> destdir="${ component.classes.dir}"
>> includes="oracle/toplink/essentials/Version.java"
>> --- 91,100 ----
>> description="Compile TopLink Essentials sources">
>> <copy file="${ src.dir}/oracle/toplink/essentials/
>> Version.java"
>> tofile="${component.classes.dir }/oracle/toplink/
>> essentials/Version.java"/>
>> ! <replace file="${component.classes.dir }/oracle/toplink/
>> essentials/Version.java">
>> ! <replacefilter token="@VERSION@" value="$
>> { release.version}"/>
>> ! <replacefilter token="@BUILD_NUMBER@" value="$
>> {build_number_string}"/>
>> ! </replace>
>> <javac srcdir="${component.classes.dir }"
>> destdir="${component.classes.dir}"
>> includes="oracle/toplink/essentials/Version.java"
>> ***************
>> *** 140,146 ****
>> <attribute name="Specification-Version" value="
>> 1.0"/>
>> <attribute name="Implementation-Title"
>> value="TopLink Essentials"/>
>> <attribute name="Implementation-Vendor"
>> value="Sun Microsystems, Inc., Oracle Corp."/>
>> ! <attribute name="Implementation-Version" value="
>> 9.1 build: ${build_string}"/>
>> </manifest>
>> <fileset dir="${component.classes.dir }">
>> <include name="javax/persistence/**/*.class"/>
>> --- 151,158 ----
>> <attribute name="Specification-Version"
>> value="1.0"/>
>> <attribute name="Implementation-Title"
>> value="TopLink Essentials"/>
>> <attribute name="Implementation-Vendor"
>> value="Sun Microsystems, Inc., Oracle Corp."/>
>> ! <attribute name="Implementation-Version" value="$
>> {full_version_string}"/>
>> ! <attribute name="Premain-Class"
>> value="oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializ
>> erAgent " />
>> </manifest>
>> <fileset dir="${ component.classes.dir}">
>> <include name="javax/persistence/**/*.class"/>
>> ***************
>> *** 149,155 ****
>> <include name="orm*.xsd"/>
>> <include name="persistence*.xsd"/>
>> <include name="persistence/antlr/**/*.class"/>
>> - <exclude name="oracle/toplink/essentials/
>> internal/ejb/cmp3/JavaSECMPInitializerAgent.class"/>
>> </fileset>
>> <fileset dir="${component.classes.dir }">
>> <include name="${platform.mapping.file}"/>
>> --- 161,166 ----
>> ***************
>> *** 159,164 ****
>> --- 170,177 ----
>> </fileset>
>> </jar>
>>
>> + <!-- The agent jar is deprecated, but is generated for
>> old version users.
>> + ${entity-persistence.jar } now has the agent
>> facility. -->
>> <jar jarfile="${entity-persistence-agent.jar }">
>> <manifest>
>> <attribute name="Class-Path" value=" toplink-
>> essentials.jar" />
>> ***************
>> *** 168,174 ****
>> <attribute name="Specification-Version" value="
>> 1.0"/>
>> <attribute name="Implementation-Title"
>> value="TopLink Essentials "/>
>> <attribute name="Implementation-Vendor"
>> value="Sun Microsystems, Inc., Oracle Corp."/>
>> ! <attribute name="Implementation-Version" value="
>> 9.1 build: ${build_string}"/>
>> </manifest>
>> <fileset dir="${component.classes.dir }">
>> <include name="oracle/toplink/essentials/
>> internal/ejb/cmp3/JavaSECMPInitializerAgent.class"/>
>> --- 181,187 ----
>> <attribute name="Specification-Version" value="
>> 1.0"/>
>> <attribute name="Implementation-Title"
>> value="TopLink Essentials "/>
>> <attribute name="Implementation-Vendor"
>> value="Sun Microsystems, Inc., Oracle Corp."/>
>> ! <attribute name="Implementation-Version" value="$
>> {full_version_string}"/>
>> </manifest>
>> <fileset dir="${component.classes.dir}">
>> <include name="oracle/toplink/essentials/
>> internal/ejb/cmp3/JavaSECMPInitializerAgent.class"/>
>> ***************
>> *** 235,241 ****
>> <copy todir="${release.dir}/manifest">
>> <fileset dir="." includes="*.mf" />
>> <filterset>
>> ! <filter token="VERSION" value="$
>> {release.version}"/>
>> </filterset>
>> </copy>
>> </target>
>> --- 248,254 ----
>> <copy todir="${ release.dir}/manifest">
>> <fileset dir="." includes="*.mf" />
>> <filterset>
>> ! <filter token="VERSION" value="$
>> {full_version_string}"/>
>> </filterset>
>> </copy>
>> </target>
>> ***************
>> *** 268,274 ****
>> <include name="oracle/toplink/essentials/**/
>> *.class"/>
>> <include name="oracle/toplink/libraries/**/
>> *.class"/>
>> <include name="persistence/antlr/**/*.class"/>
>> - <exclude name="oracle/toplink/essentials/
>> internal/ejb/cmp3/JavaSECMPInitializerAgent.class"/>
>> </fileset>
>> <fileset dir="${release.dir}">
>> <include name="javax/persistence/**/*.class"/>
>> --- 281,286 ----
>> ***************
>> *** 299,305 ****
>> <include name="oracle/toplink/essentials/**/*.java"/>
>> <include name="oracle/toplink/libraries/**/*.java"/>
>> <include name="persistence/antlr/**/*.java"/>
>> - <exclude name="oracle/toplink/essentials/internal/
>> ejb/cmp3/JavaSECMPInitializerAgent.java"/>
>> </fileset>
>> <fileset dir="${basedir}/../persistence-api/src/java">
>> <include name="javax/persistence/**/*.java"/>
>> --- 311,316 ----
>> ***************
>> *** 320,326 ****
>> <target name="push-to-maven-prepare" depends="-push-to-maven-
>> init, jar"
>> description="creates an image for the 'push-to-maven'
>> goal">
>> <delete dir="build/maven-repo" /><!-- clean it -->
>> ! <maven-repository-importer destdir="build/maven-repo"
>> version="${ release.version}">
>> <artifact jar="${ release.dir}/toplink-
>> essentials.jar" pom="toplink-essentials.pom" srczip="$
>> {release.dir}/toplink-essentials.src.zip" />
>> <artifact jar="${ release.dir}/toplink-essentials-
>> agent.jar " pom="toplink-essentials-agent.pom" srczip="$
>> {release.dir}/toplink-essentials-agent.src.zip" />
>> </maven-repository-importer>
>> --- 331,337 ----
>> <target name="push-to-maven-prepare" depends="-push-to-maven-
>> init, jar"
>> description="creates an image for the 'push-to-maven'
>> goal">
>> <delete dir="build/maven-repo" /><!-- clean it -->
>> ! <maven-repository-importer destdir="build/maven-repo"
>> version="${full_version}">
>> <artifact jar="${release.dir}/toplink-
>> essentials.jar" pom="toplink-essentials.pom " srczip="$
>> {release.dir}/toplink-essentials.src.zip" />
>> <artifact jar="${ release.dir}/toplink-essentials-
>> agent.jar" pom="toplink-essentials-agent.pom" srczip="$
>> { release.dir}/toplink-essentials-agent.src.zip" />
>> </maven-repository-importer>
>> Index: build.properties
>> ===================================================================
>> RCS file: /cvs/glassfish/entity-persistence/build.properties,v
>> retrieving revision 1.2
>> diff -c -w -r1.2 build.properties
>> *** build.properties 13 May 2006 01:34:16 -0000 1.2
>> --- build.properties 13 Feb 2007 04:59:46 -0000
>> ***************
>> *** 26,32 ****
>>
>> ### Additonal Component Properties for standalone release ###
>> release.dir=build/release
>> ! release.version=1.0
>> release.toplink-essentials.jar=${release.dir}/toplink-
>> essentials.jar
>> release.toplink-essentials-agent.jar=${release.dir}/toplink-
>> essentials-agent.jar
>>
>> --- 26,32 ----
>>
>> ### Additonal Component Properties for standalone release ###
>> release.dir=build/release
>> ! release.version=2.0
>> release.toplink-essentials.jar=${release.dir}/toplink-
>> essentials.jar
>> release.toplink-essentials-agent.jar=${release.dir}/toplink-
>> essentials-agent.jar
>>
>> Index: toplink-essentials.mf
>> ===================================================================
>> RCS file: /cvs/glassfish/entity-persistence/toplink- essentials.mf,v
>> retrieving revision 1.1
>> diff -c -w -r1.1 toplink-essentials.mf
>> *** toplink-essentials.mf 13 May 2006 01:34:15 -0000 1.1
>> --- toplink-essentials.mf 13 Feb 2007 04:59:46 -0000
>> ***************
>> *** 1,8 ****
>> Extension-Name: javax.persistence
>> ! Specification-Title: Java Platform, Persistence Specification
>> ! Specification-Version: @VERSION@
>> Specification-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> ! Implementation-Version: @VERSION@
>> Implementation-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> Implementation-Vendor-Id: oracle.toplink.essentials
>> ! Implementation-Title: Sun Java System Application Server
>> --- 1,9 ----
>> Extension-Name: javax.persistence
>> ! Specification-Title: Java Persistence API
>> ! Specification-Version: 1.0
>> Specification-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> ! Implementation-Title: TopLink Essentials
>> Implementation-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> Implementation-Vendor-Id: oracle.toplink.essentials
>> ! Implementation-Version: @VERSION@
>> ! Premain-Class:
>> oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializerAgent
>> Index: toplink-essentials-agent.mf
>> ===================================================================
>> RCS file: /cvs/glassfish/entity-persistence/toplink-essentials-
>> agent.mf,v
>> retrieving revision 1.2
>> diff -c -w - r1.2 toplink-essentials-agent.mf
>> *** toplink-essentials-agent.mf 16 May 2006 01:01:27 -0000 1.2
>> --- toplink-essentials-agent.mf 13 Feb 2007 04:59:46 -0000
>> ***************
>> *** 1,9 ****
>> Extension-Name: oracle.toplink.essentials.agent
>> ! Specification-Title: Java Platform, Persistence Specification
>> ! Specification-Version: @VERSION@
>> Specification-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> ! Implementation-Version: @VERSION@
>> Implementation-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> Implementation-Vendor-Id: oracle.toplink
>> ! Implementation-Title: Sun Java System Application Server
>> Premain-Class:
>> oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializerAgent
>> --- 1,9 ----
>> Extension-Name: oracle.toplink.essentials.agent
>> ! Specification-Title: Java Persistence API
>> ! Specification-Version: 1.0
>> Specification-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> ! Implementation-Title: TopLink Essentials
>> Implementation-Vendor: Sun Microsystems, Inc., Oracle Corp.
>> Implementation-Vendor-Id: oracle.toplink
>> ! Implementation-Version: @VERSION@
>> Premain-Class:
>> oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializerAgent
>> Index: src/java/oracle/toplink/essentials/Version.java
>> ===================================================================
>> RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/
>> toplink/essentials/Version.java,v
>> retrieving revision 1.47
>> diff -c -w -r1.47 Version.java
>> *** src/java/oracle/toplink/essentials/Version.java 4 Jan 2007
>> 14:30:28 -0000 1.47
>> --- src/java/oracle/toplink/essentials/Version.java 13 Feb 2007
>> 04:59:46 -0000
>> ***************
>> *** 36,43 ****
>> // The current version of TopLink.
>> // This will be used by all product components and included
>> in exceptions.
>> private static String product = "Oracle TopLink Essentials";
>> ! private static final String version = "9.1";
>> ! private static final String buildNumber =
>> "ESSENTIALS_BUILD_NUMBER";
>>
>> /** Keep track of JDK version in order to make some
>> decisions about datastructures. **/
>> public static final int JDK_VERSION_NOT_SET = 0;
>> --- 36,43 ----
>> // The current version of TopLink.
>> // This will be used by all product components and included
>> in exceptions.
>> private static String product = "Oracle TopLink Essentials";
>> ! private static final String version = "@VERSION@";
>> ! private static final String buildNumber = "@BUILD_NUMBER@";
>>
>> /** Keep track of JDK version in order to make some
>> decisions about datastructures. **/
>> public static final int JDK_VERSION_NOT_SET = 0;
>>
>>
>> On 2/13/07, Craig L Russell < Craig.Russell_at_sun.com > wrote:
>> As I understand the way maven works, having both SNAPSHOT and a
>> date stamp is wrong.
>>
>> In fact, having both a build number and SNAPSHOT is wrong.
>>
>> What SNAPSHOT does on the maven client side is to ask maven to
>> download a new version of the software each time it's invoked
>> without the -o (offline) option. So it makes sense to create a 2.0-
>> SNAPSHOT.jar to represent all of the working versions of the 2.0-
>> in-process jars that you build. But if you publish a 2.0-b56-
>> SNAPSHOT, and the next version is 2.0-b57-SNAPSHOT, the user will
>> have to declare a dependency on the specific version. That is,
>> either 2.0-b56-SNAPSHOT or 2.0-b57-SNAPSHOT. And there is no point
>> in declaring a dependency on a specific build number as a SNAPSHOT
>> since it will never be refreshed.
>>
>> To effectively use SNAPSHOT, it should simply be 2.0-SNAPSHOT.
>> When you refresh the repository, you typically publish both 2.0-
>> b57 and 2.0-SNAPSHOT, which are the identical file. When you then
>> publish 2.0-b58 and 2.0-SNAPSHOT, folks who depend on the 2.0-
>> SNAPSHOT will get the new file, folks who want specifically 2.0-
>> b57 will never see the new download, and if folks want the new
>> stuff but nothing beyond it, they ask for 2.0-b58.
>>
>> Craig
>>
>> On Feb 12, 2007, at 5:37 PM, Wonseok Kim wrote:
>>
>>> That is what is being discussed. Until then, it's a manual
>>> process. Also,
>>> SNAPSHOT is not an automated push unless every nightly build
>>> pushes the update out.
>>>
>>> So may be we should use 2 versions of the full-version - one with
>>> the date, and
>>> one without. What do you think?
>>>
>>> I hope that it become part of automated process soon.
>>> We have an option to use date both for the two versions like 2.0-
>>> b35-20070212 and 2.0-SNAPSHOT-20070212. I'm not sure this is
>>> required. If anyone have better idea, please tell ASAP.
>>>
>>> Thanks,
>>> -Wonseok
>>>
>>
>> Craig Russell
>> Architect, Sun Java Enterprise System http://java.sun.com/products/
>> jdo
>> 408 276-5638 mailto:Craig.Russell_at_sun.com
>> P.S. A good JDO? O, Gasp!
>>
>>
>>
>> <tle_version_fix.jar>
>
> Craig Russell
> Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
> 408 276-5638 mailto:Craig.Russell_at_sun.com
> P.S. A good JDO? O, Gasp!
>
>
>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell_at_sun.com
P.S. A good JDO? O, Gasp!