|
Glassfish example source code file (CMPTemplates.properties)
The Glassfish CMPTemplates.properties source code# # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # # Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved. # # The contents of this file are subject to the terms of either the GNU # General Public License Version 2 only ("GPL") or the Common Development # and Distribution License("CDDL") (collectively, the "License"). You # may not use this file except in compliance with the License. You can # obtain a copy of the License at # https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html # or packager/legal/LICENSE.txt. See the License for the specific # language governing permissions and limitations under the License. # # When distributing the software, include this License Header Notice in each # file and include the License file at packager/legal/LICENSE.txt. # # GPL Classpath Exception: # Oracle designates this particular file as subject to the "Classpath" # exception as provided by Oracle in the GPL Version 2 section of the License # file that accompanied this code. # # Modifications: # If applicable, add the following below the License Header, with the fields # enclosed by brackets [] replaced by your own identifying information: # "Portions Copyright [year] [name of copyright owner]" # # Contributor(s): # If you wish your version of this file to be governed by only the CDDL or # only the GPL Version 2, indicate your decision by adding "[Contributor] # elects to include this software in this distribution under the [CDDL or GPL # Version 2] license." If you don't indicate a single choice of license, a # recipient has the option to distribute your version of this file under # either the CDDL, the GPL Version 2 or to extend the choice of license to # its licensees as provided above. However, if you add GPL Version 2 code # and therefore, elected the GPL Version 2 license, then the option applies # only if the new code is made subject to such option by the copyright # holder. # # # ----------------------------------------------------------------------------- # CMP generic properties # ----------------------------------------------------------------------------- # # # Code Signature via CVS keyword substitution # signature = $RCSfile: CMPTemplates.properties,v $ $Revision: 1.3 $ # Concrete impl Class comments. cmpImplComments=This is the generated concrete CMP bean class to be used with Transparent Persistence runtime. # packages for bean import statements. # Important: NO non-jdk, and/or non-j2ee standard classes should be imported # to avoid name overlap with a user-defined classes. imports=\ java.util.Collection;\ java.util.ResourceBundle;\ javax.ejb.*; # interfaces to be implemented by the bean. interfaces=\ javax.transaction.Synchronization;\ com.sun.ejb.spi.container.BeanStateSynchronization # # Variables: # # PLEASE NOTE, all internal variables should start with _jdo # to avoid name clashes with CMR variables. # privateStaticVariables=\ com.sun.jdo.api.persistence.support.PersistenceManagerFactory _jdoPersistenceManagerFactory null\n\ com.sun.jdo.spi.persistence.support.sqlstore.utility.NumericConverter _jdoNumericConverter null # {0} - PC Class privateTransientVariables=\ {0} _jdoInstance null\n\ com.sun.jdo.api.persistence.support.PersistenceManager _jdoPersistenceManager null\n\ # {0} - PC Class # {1} - EJB Name privateStaticFinalVariables=\ boolean _logUsage Boolean.getBoolean("com.sun.jdo.persistence.support.ejb.ejbc.logLastInstanceUsage")\n\ Class _jdoInstanceClass {0}.class\n\ ResourceBundle _jdoMessages org.glassfish.persistence.common.I18NHelper.loadBundle(\ com.sun.jdo.spi.persistence.support.ejb.ejbc.LogHelperEJBCompiler.class)\n\ String _jdoBeanName \"{1}\" # {0} - Signatures of the generator classes # {1} - Signatures of the inputfiles for the codegen publicStaticFinalVariables=\ String _jdoGeneratorClassesSignature \"{0}\"\n\ String _jdoInputFilesSignature \"{1}\" # Per finder/selector: private static # {0} - queryVariableIdentifier finderSelectorStaticVariables=\ com.sun.jdo.api.persistence.support.Query _jdoQuery_{0} null # Per finder/selector: private static final # monitor object is final for faster access and preventing overwritten accidentally # {0} - queryVariableIdentifier finderSelectorStaticFinalVariables=\ Object _jdoMonitor_{0} new Object() otherVariables=\ StringBuffer __state new StringBuffer()\n\ EntityContext _jdoEntityContext null\n # {0} - variable name setNull=\ {0} = null;\n # # ----------------------------------------------------------------------------- # Generic Methods # ----------------------------------------------------------------------------- # # ejbFindByPrimaryKey ejbFindByPrimaryKey=\ assertPersistenceManagerIsNull();\n\ com.sun.jdo.api.persistence.support.PersistenceManager _jdoPersistenceManager = null;\n\ Object jdoObjectId = jdoGetObjectId(key); \n\ try {\n\ \t_jdoPersistenceManager = jdoGetPersistenceManager0(key);\n\ \tif(_logUsage) __state.append("\\n" + Thread.currentThread() + " IN ejbFindByPrimaryKey - jdoGetPersistenceManager: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ \tObject _jdoInstance = _jdoPersistenceManager.getObjectById(jdoObjectId, true);\n\ \tif (com.sun.jdo.api.persistence.support.JDOHelper.isDeleted(_jdoInstance)) {\n\ \t\tthrow new com.sun.jdo.api.persistence.support.JDOObjectNotFoundException(\n\ \t\t\torg.glassfish.persistence.common.I18NHelper.getMessage(\n\ \t\t\t_jdoMessages, "JDO.instancedeleted_exception", key.toString()));\n\ \t}\n\ } catch (com.sun.jdo.api.persistence.support.JDOObjectNotFoundException ex) {\n\ \tcom.sun.jdo.spi.persistence.support.ejb.cmp.CMPBeanHelper.handleJDOObjectNotFoundException(\n\ \t\tkey, _jdoBeanName, ex);\n\ } catch (com.sun.jdo.api.persistence.support.JDOException ex) {\n\ \tcom.sun.jdo.spi.persistence.support.ejb.cmp.CMPBeanHelper.logFinderException(\n\ \t\tcom.sun.jdo.spi.persistence.utility.logging.Logger.WARNING, _jdoBeanName, ex);\n\ \tthrow ex;\n\ } finally {\n\ \tjdoReleasePersistenceManager0(_jdoPersistenceManager);\n\ \tif(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN jdoPersistenceManager.close: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ }\n\ return key; # setEntityContext setEntityContext=\ super.setEntityContext(param0);\n\ try {\n\ \t_jdoEntityContext = param0;\n\ \tjdoLookupPersistenceManagerFactory(param0);\n\ } catch (com.sun.jdo.api.persistence.support.JDOException ex) {\n\ \tcom.sun.jdo.spi.persistence.support.ejb.cmp.CMPBeanHelper.logJDOExceptionWithLifecycleLogger(\n\ \t\t"GEN.generic_method_exception", _jdoBeanName, ex);\n\ \tthrow ex;\n\ } unsetEntityContext=\ super.unsetEntityContext();\n\ _jdoEntityContext = null;\n\ ejbPassivate=\ super.ejbPassivate();\n\ jdoCleanAllRefs(); # {0} - PK Class. # {1} - PC Class. jdoGetInstance=\ if(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN jdoGetInstance: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ {0} key = ({0}) _jdoEntityContext.getPrimaryKey();\n\ Object jdoObjectId = jdoGetObjectId(key); \n\ _jdoInstance = ({1}) _jdoPersistenceManager.getObjectById(jdoObjectId, true);\n\ if(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN jdoGetInstance: " + this + ":: " + _jdoInstance);\n\ if (com.sun.jdo.api.persistence.support.JDOHelper.isDeleted(_jdoInstance)) '{'\n\ \tthrow new com.sun.jdo.api.persistence.support.JDOObjectNotFoundException(\n\ \t\torg.glassfish.persistence.common.I18NHelper.getMessage(_jdoMessages, \n\ \t\t"JDO.instancedeleted_exception", key.toString()));\n\ '}'\n\ # {0} - Concrete Impl class name. jdoGetObjectId=\ return {0}_JDOHelper.getHelperInstance().convertPrimaryKeyToObjectId(key); jdoGetPersistenceManager=\ if(_jdoPersistenceManagerFactory == null) {\n\ \tthrow new com.sun.jdo.api.persistence.support.JDOFatalInternalException(\n\ \t\torg.glassfish.persistence.common.I18NHelper.getMessage(\n\ \t\t\t_jdoMessages, "JDO.pmfnull_exception"));\n\ }\n\ return _jdoPersistenceManagerFactory.getPersistenceManager();\n\ jdoClosePersistenceManager=\ if (_jdoPersistenceManager != null) {\n\ \t_jdoPersistenceManager.close();\n\ \tjdoCleanAllRefs(); // This nullifies all references.\n\ \tif(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN jdoClosePersistenceManager: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ } jdoReleasePersistenceManager0=\ jdoReleasePersistenceManager(param0); jdoReleasePersistenceManager=\ if (param0 != null) {\n\ \tparam0.close();\n\ } jdoGetPersistenceManager0=\ return jdoGetPersistenceManager(); # {0} - Concrete Impl class name. jdoLookupPersistenceManagerFactory=\ if (_jdoPersistenceManagerFactory == null) '{'\n\ \t_jdoPersistenceManagerFactory = com.sun.jdo.spi.persistence.support.sqlstore.ejb.CMPHelper.getPersistenceManagerFactory(\n\ \t\t{0}_JDOHelper.getHelperInstance().getContainer());\n\ \t_jdoPersistenceManagerFactory.setRequireCopyObjectId(false);\n\ \t_jdoPersistenceManagerFactory.setRequireTrackedSCO(false);\n\ \t_jdoNumericConverter = {0}_JDOHelper.getHelperInstance().getNumericConverter();\n\ '}' # {0} - Exception message. assertInTransaction=\ if (_jdoPersistenceManager != null && \n\ \t!_jdoPersistenceManager.currentTransaction().isActive()) '{'\n\ \t\tthrow new EJBException(\"{0}\");\n\ '}' # This template must have a new line at the end # to be displayed properly in the generated code. assertPersistenceManagerIsNull=\ try { \n\ \tcom.sun.jdo.spi.persistence.support.ejb.cmp.CMPBeanHelper.assertPersistenceManagerIsNull(_jdoPersistenceManager, this, __state);\n\ } finally {\n\ \tif(_logUsage)__state = new StringBuffer();\n\ } assertPersistenceManagerIsNullCall=\ assertPersistenceManagerIsNull(); # void no-args methods. commonPublicMethods=\ unsetEntityContext;\ ejbPassivate;\ ejbRemove;\ beforeCompletion;\ ejb__flush; commonPrivateMethods=\ # Other methods that differ for CMP2.0 and CMP1.1. otherPublicMethods=\ ejbLoad;\ ejbStore;\ jdoCleanAllRefs # Method returning an array. #{0} array type. jdoArrayCopy=\ if (param0 == null) \n\ \treturn null;\n\ {0}[] tmp = new {0}[param0.length];\n\ System.arraycopy(param0, 0, tmp, 0, param0.length);\n\ return tmp; # Getter method to access the jdoInstanceClass property jdoGetJdoInstanceClass = \ return _jdoInstanceClass; # Methods for post-transaction cleanup beforeCompletion=\ if(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN beforeCompletion: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction()); afterCompletion=\ if(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN afterCompletion start: " + this + ":: " + _jdoPersistenceManager);\n\ jdoCleanAllRefs();\n\ if(_logUsage) {\n\ \tif (param0 == 4) \n\ \t\t__state.append("\\n" + Thread.currentThread() + " IN afterCompletion rollback: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ \telse \n\ \t\t__state.append("\\n" + Thread.currentThread() + " IN afterCompletion commit: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ } # Bean synchronization methods ejb__flush=\ com.sun.jdo.api.persistence.support.PersistenceManager _jdoPersistenceManager = null;\n\ try {\n\ \t_jdoPersistenceManager = jdoGetPersistenceManager();\n\ \tcom.sun.jdo.spi.persistence.support.sqlstore.ejb.CMPHelper.flush(_jdoPersistenceManager);\n\ } finally {\n\ \tjdoReleasePersistenceManager(_jdoPersistenceManager);\n\ } ejb__refresh=\ ejb__remove=\ # # ----------------------------------------------------------------------------- # _JDOHelper templates # ----------------------------------------------------------------------------- # # Helper Class comments. # {0} concrete impl name. helperComments=This is the generated helper class for {0} to be used with Transparent Persistence runtime. # packages for helper class import statements. # Important: NO non-jdk, and/or non-j2ee standard classes should be imported # to avoid name overlap with a user-defined classes. helperImports=\ javax.ejb.*; # # Static variables. # # {0} - Concrete Impl name. # {1} - EJB Name. # {2} - Application Name. helperVariables=\ {0}_JDOHelper instance new {0}_JDOHelper()\n\ String _jdoBeanName \"{1}\"\n\ Object container com.sun.jdo.spi.persistence.support.sqlstore.ejb.CMPHelper.getContainer(new Object[]'{'\"{2}\", \"{1}\"'}') # # Methods. # # Static method. All other methods are instance methods. getHelperInstance=\ return instance; # # Templates for PK/Oid conversions: # # {0} - PK Class. castKey=\ {0} key = ({0})param0;\n # {0} - PK Class. newPK=\ {0} key = new {0}();\n # {0} - PC Class. castOid=\ {0}.Oid jdoObjectId = ({0}.Oid)param0;\n # {0} - PC Class. newOid=\ {0}.Oid jdoObjectId = new {0}.Oid();\n # Generated convertPrimaryKeyToObjectId() for a PK class # that is a single field of Object type # {0} - PK field. getOid1=\ jdoObjectId.{0} = key;\n # Generated convertPrimaryKeyToObjectId() for a String PK class # that is a single field of Object type # {0} - PK field. getOid1String=\ jdoObjectId.{0} = key.trim();\n # Generated convertPrimaryKeyToObjectId() for a mutable PK class # that is a single field of Object type # {0} - PK field. # {1} - PK type. getOid1Clone=\ jdoObjectId.{0} = ({1})key.clone();\n # Generated convertPrimaryKeyToObjectId() for a PK class that # is a single field of primitive type # {0} - PK field. # {1} - PK field type. getOid1primitive=\ jdoObjectId.{0} = key.{1}Value();\n # Generated convertPrimaryKeyToObjectId() for a PK class that has several fields. # {0} - PK field. getOid=\ jdoObjectId.{0} = key.{0};\n # Generated convertPrimaryKeyToObjectId() for a String PK field # for PK class that has several fields. # {0} - PK field. getOidString=\ jdoObjectId.{0} = key.{0}.trim();\n # Generated convertPrimaryKeyToObjectId() for a mutable PK field # for PK class that has several fields. # {0} - PK field. # {1} - PK type. getOidClone=\ jdoObjectId.{0} = ({1})key.{0}.clone();\n # convertObjectIdToPrimaryKey() for a single PK field of Object type. # {0} - PK field. getPK1=\ return jdoObjectId.{0};\n # convertObjectIdToPrimaryKey() for a single PK field of primitive type. # {0} - PK field. # {1} - Wrapper for PK field type. getPK1primitive=\ return new {1}(jdoObjectId.{0});\n # convertObjectIdToPrimaryKey() for a single PK field of mutable type. # {0} - PK field. getPK1Clone=\ return jdoObjectId.{0}.clone();\n # convertObjectIdToPrimaryKey() for a PK class with several fields. # {0} - PK field. getPK=\ key.{0} = jdoObjectId.{0};\n # convertObjectIdToPrimaryKey() for a mutable PK field # for PK class that has several fields. # {0} - PK field. # {1} - PK type. getPKClone=\ key.{0} = ({1})jdoObjectId.{0}.clone();\n # Assert that Primary Key is not null. assertPKNotNull=\ assertPrimaryKeyNotNull(param0);\n\ # Assert that ObjectId is not null. assertOidNotNull=\ assertObjectIdNotNull(param0);\n\ # Assert that PK field is not null. # {0} - PK field. assertPKFieldNotNull=\ assertPrimaryKeyFieldNotNull(key.{0}, "{0}", _jdoBeanName);\n # # Other helper methods. # # Assertion methods assertInstanceOfLocalInterfaceImpl=\ assertInstanceOfLocalInterfaceImpl(param0, _jdoBeanName); assertInstanceOfRemoteInterfaceImpl=\ assertInstanceOfRemoteInterfaceImpl(param0, _jdoBeanName); # Method returns Class # {0} concrete impl name. getPCClass=\ return {0}.jdoGetJdoInstanceClass(); # Method returns Object getContainer=\ return container; # # ----------------------------------------------------------------------------- # End of _JDOHelper templates # ----------------------------------------------------------------------------- # # # ----------------------------------------------------------------------------- # Generic finder method bodies # ----------------------------------------------------------------------------- # # common body of finder/selector methods # {0} - Type of the result # {1} - query variable identifier # {2} - concrete CMP bean class name # {3} - query filter # {4} - query parameters # {5} - query variables # {6} - query result # {7} - query ordering # {8} - query prefetchEnabled (boolean) # {9} - special JDOQL query setting for 1.1 finders ejbFinderSelectorBody = \ {0} rs;\n\ com.sun.jdo.api.persistence.support.Query q = null;\n\ Object[] params = null;\n\ com.sun.jdo.api.persistence.support.PersistenceManager _jdoPersistenceManager = null;\n\ try '{'\n\ \t_jdoPersistenceManager = jdoGetPersistenceManager();\n\ \tif(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN {1} - jdoGetPersistenceManager: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ \tsynchronized(_jdoMonitor_{1}) '{' \n\ \t\tif (_jdoQuery_{1} != null) '{' \n\ \t\t\tq = _jdoPersistenceManager.newQuery(_jdoQuery_{1});\n\ \t\t'}' else '{'\n\ \t\t\tq = _jdoPersistenceManager.newQuery();\n\ \t\t\tq.setClass({2}.jdoGetJdoInstanceClass());\n\ \t\t\tq.setFilter("{3}");\n\ \t\t\tq.declareParameters("{4}");\n\ \t\t\tq.declareVariables("{5}");\n\ \t\t\tq.setResult("{6}");\n\ \t\t\tq.setOrdering("{7}");\n\ \t\t\tq.setPrefetchEnabled({8});\n\ {9}\ \t\t\tq.compile();\n\ \t\t\t_jdoQuery_{1} = q; \n\ \t\t'}' \n\ \t'}' \n\ # Execution of JDO query w/o arguments. ejbQueryExecutionBody = \ \tjava.util.Collection result = (java.util.Collection)q.execute(); \n # Execution of JDO Query w/ arguments. # It first initializes the actual parameter array and then calls Query.execute. # {0} - the actual parameters of the JDO Query ejbQueryExecutionParamConvBody = \ \tparams = new Object[]'{'{0}'}';\n\ \tjava.util.Collection result = (java.util.Collection)q.executeWithArray(params); \n # Execution of JDO aggregate query w/o arguments. ejbAggregateQueryExecutionBody = \ \tObject result = q.execute(); \n # Execution of JDO aggregate Query w/ arguments. # It first initializes the actual parameter array and then calls Query.execute. # {0} - the actual parameters of the JDO Query ejbAggregateQueryExecutionParamConvBody = \ \tparams = new Object[]'{'{0}'}';\n\ \tObject result = q.executeWithArray(params); \n # Code to convert an actual parameter passed to Query.execute. # This is used to convert a local or remote interface instance to a pc instance. # {0} - concrete impl name # {1} - number of the actual parameter to be converted # {2} - conversion method name ejbQueryExecutionParamConvBodyArgument = \ ((param{1}==null) ? null : {0}_JDOHelper.getHelperInstance().{2}(param{1}, _jdoPersistenceManager, false)) # Specific return statement for a multi-object finder # {0} - name of concrete CMP bean class # {1} - catch clause ejbMultiFinderBody = \ \trs = {0}_JDOHelper.getHelperInstance().convertCollectionPCToPrimaryKey(result, _jdoPersistenceManager);\n\ {1}\n\ return rs; # Specific return statement for a CMP1.1 multi-object finder returning Enumeration # {0} - concrete CMP bean class name # {1} - catch clause ejbMultiFinderBodyEnumeration = \ \trs = java.util.Collections.enumeration({0}_JDOHelper.getHelperInstance().convertCollectionPCToPrimaryKey(result, _jdoPersistenceManager));\n\ {1}\n\ return rs; # Specific return statement of a single-object finder # {0} - finder method name # {1} - PK Class # {2} - concrete CMP bean class name # {3} - catch clause ejbSingleFinderBody = \ \tif (result.size() > 1) '{' \n\ \t\tString msg = org.glassfish.persistence.common.I18NHelper.getMessage(_jdoMessages, \n\ \t\t\t"GEN.toomanyinstances_finder_exception", "{0}", "" + result.size());\n\ \t\tif (params != null) '{'\n\ \t\t\tmsg = msg + " " + org.glassfish.persistence.common.I18NHelper.getMessage(_jdoMessages, "GEN.parameters") + \n\ \t\java.util.Arrays.asList(params);\n\ \t\t'}'\n\ \t\tFinderException ex = new FinderException(msg);\n\ \t\tcom.sun.jdo.spi.persistence.support.ejb.cmp.CMPBeanHelper.logFinderException(\n\ \t\t\tcom.sun.jdo.spi.persistence.utility.logging.Logger.FINE, _jdoBeanName, ex);\n\ \t\tthrow ex;\n\ \t'}' \n\ \tif (result.size() < 1) '{' \n\ \t\tString msg = org.glassfish.persistence.common.I18NHelper.getMessage(\n\ \t\t\t_jdoMessages, "GEN.noinstances_finder_exception", "{0}");\n\ \t\tif (params != null) '{'\n\ \t\t\tmsg = msg + " " + org.glassfish.persistence.common.I18NHelper.getMessage(_jdoMessages, "GEN.parameters") + \n\ \t\java.util.Arrays.asList(params);\n\ \t\t'}'\n\ \t\tObjectNotFoundException ex = new ObjectNotFoundException(msg);\n\ \t\tcom.sun.jdo.spi.persistence.support.ejb.cmp.CMPBeanHelper.logFinderException(\n\ \t\t\tcom.sun.jdo.spi.persistence.utility.logging.Logger.FINER, _jdoBeanName, ex);\n\ \t\tthrow ex;\n\ \t'}'\n\ \trs = ({1}){2}_JDOHelper.getHelperInstance().convertPCToPrimaryKey(result.iterator().next(), _jdoPersistenceManager);\n\ {3}\n\ return rs; # Catch clause of the try-catch block wrapping the complete generated code catchClause = \ }\n\ catch (com.sun.jdo.api.persistence.support.JDOException ex) {\n\ \tcom.sun.jdo.spi.persistence.support.ejb.cmp.CMPBeanHelper.logJDOExceptionWithFinderLogger(_jdoBeanName, params, ex);\n\ \tthrow ex;\n\ }\n\ finally {\n\ \tjdoReleasePersistenceManager(_jdoPersistenceManager);\n\ \tif(_logUsage)__state.append("\\n" + Thread.currentThread() + " IN jdoPersistenceManager.close: " + this + ":: " + com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper.getTransaction());\n\ } # # ----------------------------------------------------------------------------- # End of generic finder method bodies # ----------------------------------------------------------------------------- # # # ----------------------------------------------------------------------------- # End of CMP generic properties # ----------------------------------------------------------------------------- # Other Glassfish examples (source code examples)Here is a short list of links related to this Glassfish CMPTemplates.properties source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.