Registry is an another solution for those which can’t be cached using Dyna cache. Another use would be to store configuration data for a store. By using registry, you don't need a server restart every time as organization admin console provides an interface to refresh registry. The new custom registries will be appearing in the admin console under the registry section.
Steps to create a new custom registry in WCS
Step 1. Register the registry in wc-server.xml.
<Registries>
......
.....
<registry
name="TestRegistry" regClassName="com.wcs.registry.TestRegistry "/>
......
.....
<registry
name="TestRegistry" regClassName="com.wcs.registry.TestRegistry "/>
</Registries>
Step 2.Create a class that implements interface com.ibm.commerce.registry.Registry
package com.wcs.registry;
import java.util.HashMap;
import com.ibm.commerce.exception.ECException;
import com.ibm.commerce.registry.Registry;
import com.ibm.commerce.registry.RegistryManager;
public class TestRegistry implements Registry {
private HashMap sampleRegistry ;
/** * @return Returns the hashSampleRegistry. */
public Hashtable getSampleRegistry()
{
return sampleRegistry ;
}
/**
* This method initializes the registry. It is being called when server starts.
*/
public void initialize() throws Exception {
RegistryManager.singleton().addRegistry("TestRegistry ", this);
try {
this.initialRegistry();
} catch (ECException e) {
e.printStackTrace();
}
}
/**
*This method is used to refresh the registry. It is being called when user updates the registry through Site Admin console.
*/
public void refresh() throws Exception {
try {
//Write the business logic to fetch data and put it in a variable
RoleAccessBean rab = new RoleAccessBean();
rab = rab.findByName("Site Administrator");
sampleRegistry .put(rab.getRoleId(), rab.getName());
} catch (ECException e) {
e.printStackTrace();
}
}
/**
* This methods refreshes the registry with initial data.
*/
private void initialRegistry() throws Exception {
//Write the business logic to fetch initial data and put it in a variable
}
}
Step3: Create the Data bean which will be used for reading registry values.
package com.wcs.registry;
public class TestRegistryBean extends SmartDataBeanImpl implements SmartDataBean
{
private HashMap registry;
public void populate() throws com.ibm.commerce.exception.ECException {
TestRegistry testRegistry ;
testRegistry =( TestRegistry )(RegistryManager.singleton().getRegistry("TestRegistry"));
//Set the Registry
setRegistry(testRegistry .getSampleRegistry());
}
public Hashtable getRegistry()
{
return registry;
}
public void setRegistry(HashMap mapRegistry) {
this.registry = mapRegistry;
}
}
Step4: Print the registry values in Jsp using the data bean
<jsp:useBean id="testRegistryBean" class=" com.test.registry. TestRegistryBean" scope="page"> <%com.ibm.commerce.beans.DataBeanManager.activate(testRegistryBean,request); %>
</jsp:useBean>
<c:forEach var="registry" items="${testRegistryBean.registry}">
c:out value="${registry.value}"/>
< /c:forEach>
Step 2.Create a class that implements interface com.ibm.commerce.registry.Registry
package com.wcs.registry;
import java.util.HashMap;
import com.ibm.commerce.exception.ECException;
import com.ibm.commerce.registry.Registry;
import com.ibm.commerce.registry.RegistryManager;
public class TestRegistry implements Registry {
private HashMap sampleRegistry ;
/** * @return Returns the hashSampleRegistry. */
public Hashtable getSampleRegistry()
{
return sampleRegistry ;
}
/**
* This method initializes the registry. It is being called when server starts.
*/
public void initialize() throws Exception {
RegistryManager.singleton().addRegistry("TestRegistry ", this);
try {
this.initialRegistry();
} catch (ECException e) {
e.printStackTrace();
}
}
/**
*This method is used to refresh the registry. It is being called when user updates the registry through Site Admin console.
*/
public void refresh() throws Exception {
try {
//Write the business logic to fetch data and put it in a variable
RoleAccessBean rab = new RoleAccessBean();
rab = rab.findByName("Site Administrator");
sampleRegistry .put(rab.getRoleId(), rab.getName());
} catch (ECException e) {
e.printStackTrace();
}
}
/**
* This methods refreshes the registry with initial data.
*/
private void initialRegistry() throws Exception {
//Write the business logic to fetch initial data and put it in a variable
}
}
Step3: Create the Data bean which will be used for reading registry values.
package com.wcs.registry;
public class TestRegistryBean extends SmartDataBeanImpl implements SmartDataBean
{
private HashMap registry;
public void populate() throws com.ibm.commerce.exception.ECException {
TestRegistry testRegistry ;
testRegistry =( TestRegistry )(RegistryManager.singleton().getRegistry("TestRegistry"));
//Set the Registry
setRegistry(testRegistry .getSampleRegistry());
}
public Hashtable getRegistry()
{
return registry;
}
public void setRegistry(HashMap mapRegistry) {
this.registry = mapRegistry;
}
}
Step4: Print the registry values in Jsp using the data bean
<jsp:useBean id="testRegistryBean" class=" com.test.registry. TestRegistryBean" scope="page"> <%com.ibm.commerce.beans.DataBeanManager.activate(testRegistryBean,request); %>
</jsp:useBean>
<c:forEach var="registry" items="${testRegistryBean.registry}">
c:out value="${registry.value}"/>
< /c:forEach>
Comments
Post a Comment