package samples; import org.exist.jboss.XmlDbService; import org.exist.jboss.exist.EXistService; import org.xmldb.api.base.Collection; import org.xmldb.api.base.XMLDBException; import org.xmldb.api.base.Resource; import org.xmldb.api.modules.CollectionManagementService; import org.xmldb.api.modules.XMLResource; import org.jboss.system.ServiceMBeanSupport; import org.apache.log4j.Category; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Arrays; /** * This class represent a server component living on the JBoss server e.g a Servler * an EJB, another JMX MBean or whatever. It might also be possible to access the database * remotely but this has not been tested at all * * @author Per Nyfelt */ public class XmlDbClientService extends ServiceMBeanSupport implements XmlDbClientServiceMBean { private static Category LOG = Category.getInstance( XmlDbClientService.class.getName() ); private static final String INVENTORY_NAME = "inventory"; private Collection inventory; public XmlDbClientService() { } protected void startService() throws Exception { super.startService(); } protected void stopService() throws Exception { super.stopService(); } public String useXmlDbService() { try { verifyInventory(); String result = "ChildCollection: " + Arrays.asList(inventory.listChildCollections()); result += "Resources: " + Arrays.asList(inventory.listResources()); if (inventory == null) { String msg = "Whoa!!! No Inventory Collection found, this should have been created by the inventory service"; System.out.println(msg); return msg; } return result; } catch (Exception e) { e.printStackTrace(); return e.toString(); } } public String addXMLforResourceName(String xml, String resourceName) { try { verifyInventory(); Resource res = inventory.getResource(resourceName); if (res == null) { LOG.info("creating resource"); res = inventory.createResource(resourceName, XMLResource.RESOURCE_TYPE); } LOG.info("Storing xml content"); res.setContent(xml); LOG.info("Storing resource to eXist"); inventory.storeResource(res); inventory.close(); return resourceName + " stored successfully!"; } catch (Exception e) { e.printStackTrace(); return e.toString(); } } public String fetchXMLforResurceName(String resourceName) { try { verifyInventory(); Resource res = inventory.getResource(resourceName); if (res == null) { return "resource " + resourceName + " was not found"; } LOG.info("Getting xml content"); return (String)res.getContent(); } catch (Exception e) { e.printStackTrace(); return e.toString(); } } private void verifyInventory() throws NamingException, XMLDBException { Context ctx = new InitialContext(); XmlDbService xmlDbService = (XmlDbService) ctx.lookup(XmlDbService.class.getName()); Collection baseCol = xmlDbService.getBaseCollection(); LOG.info("Got base Collection " + baseCol); inventory = baseCol.getChildCollection(INVENTORY_NAME); if (inventory == null) { LOG.info("Creating a new Collection for " + INVENTORY_NAME); CollectionManagementService mgtService = XmlDbService.getCollectionManagementService(baseCol); LOG.info("got CollectionManagementService"); inventory = mgtService.createCollection(INVENTORY_NAME); LOG.info("Collection " + INVENTORY_NAME + " created."); } else { LOG.info("Found existing inventory collection "); } } }