![Introduced in Feature Pack 2](../../com.ibm.commerce.base.doc/images/FEP2plus.gif)
Error handling when restoring a Recipe object from a different version
![Introduced in Feature Pack 2](../../com.ibm.commerce.base.doc/images/FEP2plus.gif)
About this task
Procedure
- Expand Project-Server > ejbModule > com.mycompany.commerce.project.logging package.
- Open the ProjectApplicationMessageKeys.java for editing
- Append the following code to the end of the file:
/** * Constant for the message that the catentry is deleted/MARKFORDELETED. */ public static final String _APP_PROJECT_CATENTRY_MARKFORDELETE = "_APP_PROJECT_CATENTRY_MARKFORDELETE";
- Expand com.mycompany.commerce.project.logging.properties.
- Open the file WcProjectMessages.properties for
editing, append the following code to the end of the file:
By doing this, you just defined a new error message for the error handling._APP_PROJECT_CATENTRY_MARKFORDELETE = The associated CatEntry no longer exists
- In the JAVA EE view, navigate to WebSphereCommerceServerExtensionsLogic > src.
- Right-click on src, click New > Package.
- In the name field, enter com.mycompany.commerce.project.version, then click Finish. A new package is created successfully.
- Right-click com.mycompany.commerce.project.version, click New > Class.
- In the name field, enter ProjectContentVersionServiceImpl.
- In the Superclass field, click on the Browse. Superclass Selection panel will pop up.
- In the Choose a type field, enter AbstractContentVersionServiceImpl; then click OK.
- Click Finish to create the class.
A new file is opened for editing. Paste the following code into the
file:
package com.mycompany.commerce.project.version; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import com.ibm.commerce.content.facade.datatypes.ContentVersionType; import com.ibm.commerce.content.version.AbstractContentVersionServiceImpl; import com.ibm.commerce.foundation.common.exception.AbstractApplicationException; import com.ibm.commerce.foundation.common.util.logging.LoggingHelper; import com.mycompany.commerce.project.facade.server.exception.ProjectApplicationException; import com.mycompany.commerce.project.logging.ProjectApplicationMessageKeys; public class ProjectContentVersionServiceImpl extends AbstractContentVersionServiceImpl { private final static String CLASSNAME = ProjectContentVersionServiceImpl.class .getName(); private static final java.util.logging.Logger LOGGER = LoggingHelper .getLogger(ProjectContentVersionServiceImpl.class); /* Error handling when restoring the project */ protected void restore() throws AbstractApplicationException { final String METHODNAME = "restore"; /* Enable the log trace for the method */ if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) { LOGGER.entering(CLASSNAME, METHODNAME); } super.restore(); /* Get the project noun */ ContentVersionType aProjectVersion = getNoun(); /* Get the storeId */ String storeId = aProjectVersion.getContentVersionIdentifier() .getExternalIdentifier().getStoreIdentifier().getUniqueID(); /* Get the projectId */ long objectId = aProjectVersion.getContentVersionIdentifier() .getExternalIdentifier().getObjectId(); /* Get the Catentry's column MARKFORDELETE */ String SQL =" Select CATENTRY.MARKFORDELETE FROM CATENTRY LEFT OUTER JOIN XPRJCATREL ON (CATENTRY.CATENTRY_ID = XPRJCATREL.CATENTRY_ID)WHERE XPRJCATREL.XPROJECT_ID IN (?)AND XPRJCATREL.STOREENT_ID IN (?)"; Connection connection = getConnection(); PreparedStatement ps = null; ResultSet rs = null; try { ps = connection.prepareStatement(SQL); ps.setLong(1, objectId); ps.setInt(2, Integer.parseInt(storeId)); rs = ps.executeQuery(); while (rs.next()) { int markfordelete = rs.getInt(1); if (markfordelete == 1) { if (LOGGER.isLoggable(Level.SEVERE)) { LOGGER.log(Level.SEVERE, "catentry is markfordelete"); } throw new ProjectApplicationException( ProjectApplicationMessageKeys._APP_PROJECT_CATENTRY_MARKFORDELETE, new Object[] { }, CLASSNAME, METHODNAME); } } } catch (SQLException ex) { if (LOGGER.isLoggable(Level.SEVERE)) { LOGGER.log(Level.SEVERE, "The sql: " + SQL + " (" + storeId + "," + objectId + ")" + " returns an error: " + ex.toString()); } throw new ProjectApplicationException( ProjectApplicationMessageKeys._APP_PROJECT_CATENTRY_MARKFORDELETE, new Object[] { }, CLASSNAME, METHODNAME); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { if (LOGGER.isLoggable(Level.WARNING)) { LOGGER.log(Level.WARNING, "Error:" + e.toString()); } } } if (ps != null) { try { ps.close(); } catch (SQLException e) { if (LOGGER.isLoggable(Level.WARNING)) { LOGGER.log(Level.WARNING, "Error:" + e.toString()); } } } } if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) { LOGGER.exiting(CLASSNAME, METHODNAME); } } }
- Save all your changes.
- Resolve compilation errors.You will encounter a compilation error "ProjectApplicationException cannot be resolved to a type".
- In the JAVA EE view, navigate to WebSphereCommerceServerExtensionsData.
- Right-click WebSphereCommerceServerExtensionsData, then click Properties.
- In the newly opened property panel, select Java EE Module Dependencies, and in JAR/Module field, click to add checkmark beside the Project-Server.jar.
- Click Apply and OK.
- Clean the WebSphereCOmmerceServerExtensionsLogic project.
- Navigate to the file wc-content-version.xml which is under WC > xml > config > com.mycompany.commerce.project.
Locate the following code:
<wc:ContentVersionContainer name="com.mycompany.commerce.project" id="1"> <wc:ContentVersionNoun name="Project" topTable="XPROJECT">
Change it to be:
<wc:ContentVersionContainer name="com.mycompany.commerce.project" id="1"> <wc:ContentVersionNoun name="Project" topTable="XPROJECT" className="com.mycompany.commerce.project.version.ProjectContentVersionServiceImpl">
- Restart the server.