[jbosstools-dev] Re: Deploying a .ds (or any resource)

Max Rydahl Andersen max.andersen at redhat.com
Wed Aug 8 21:48:15 EDT 2007


ok - It works now...it's a hack in its current shape, but it works ;)

/max

> 
>>> Here is some example code I've thrown together. The code below should 
>>> work, except that the publisher is *not* yet ready to handle it. 
>>> However, the APIs will work.
> 
> 
> I tried to do this code and on the way found a couple of NPE's (i've 
> committed fixes to that)
> 
>>>             // get a path somehow. you can also use resource. Look at 
>>> SingleDeployableFactory's static methods
>>>                    IPath p = new Path("/abc/1.txt");
>>>
>>> // mark this path or resource deployable.
>>>                    SingleDeployableFactory.makeDeployable(p);
>>>
>>> // get the actual module object from the factory
>>>                    IModule module = 
>>> SingleDeployableFactory.findModule(p);
> 
> until this point works..(had to use a job to make sure the resource 
> actually exists when running)
> 
>>>                                      IServer s = someServer // 
>>> wherever you get your server from
> 
> How do I get the Server/Runtime associated with a given project/wizard ?
> 
> without this i'm stumped ;(
> 
> here is an eclipse patch that just misses the server finding.
> 
> Index: 
> /home/max/work/os/jbosstools/trunk/seam/plugins/org.jboss.tools.seam.core/META-INF/MANIFEST.MF 
> 
> ===================================================================
> --- 
> /home/max/work/os/jbosstools/trunk/seam/plugins/org.jboss.tools.seam.core/META-INF/MANIFEST.MF 
> (revision 2988)
> +++ 
> /home/max/work/os/jbosstools/trunk/seam/plugins/org.jboss.tools.seam.core/META-INF/MANIFEST.MF 
> (working copy)
> @@ -33,7 +33,9 @@
>   org.eclipse.datatools.connectivity.db.generic.ui,
>   org.eclipse.datatools.connectivity.ui,
>   org.eclipse.datatools.connectivity.ui.dse,
> - org.eclipse.jst.common.project.facet.core
> + org.eclipse.jst.common.project.facet.core,
> + org.jboss.ide.eclipse.as.core,
> + org.eclipse.wst.server.core
>  Provide-Package: org.jboss.tools.seam.core,
>   org.jboss.tools.seam.internal.core,
>   org.jboss.tools.seam.internal.core.scanner,
> Index: 
> /home/max/work/os/jbosstools/trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/project/facet/SeamFacetInstallDelegete.java 
> 
> ===================================================================
> --- 
> /home/max/work/os/jbosstools/trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/project/facet/SeamFacetInstallDelegete.java 
> (revision 2988)
> +++ 
> /home/max/work/os/jbosstools/trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/project/facet/SeamFacetInstallDelegete.java 
> (working copy)
> @@ -20,6 +20,7 @@
>  import org.eclipse.core.resources.IResource;
> 
>  import org.eclipse.core.resources.ResourcesPlugin;
> 
>  import org.eclipse.core.runtime.CoreException;
> 
> +import org.eclipse.core.runtime.IPath;
> 
>  import org.eclipse.core.runtime.IProgressMonitor;
> 
>  import org.eclipse.core.runtime.IStatus;
> 
>  import org.eclipse.core.runtime.Path;
> 
> @@ -33,6 +34,11 @@
>  import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
> 
>  import org.eclipse.wst.common.project.facet.core.IDelegate;
> 
>  import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
> 
> +import org.eclipse.wst.server.core.IModule;
> 
> +import org.eclipse.wst.server.core.IServer;
> 
> +import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
> 
> +import 
> org.jboss.ide.eclipse.as.core.server.stripped.DeployableServerBehavior;
> 
> +import 
> org.jboss.ide.eclipse.as.core.singledeployable.SingleDeployableFactory;
> 
>  import org.jboss.tools.common.model.util.EclipseResourceUtil;
> 
>  import org.jboss.tools.seam.core.ISeamProject;
> 
>  import org.jboss.tools.seam.core.SeamCorePlugin;
> 
> @@ -172,7 +178,7 @@
>          WebArtifactEdit edit = 
> WebArtifactEdit.getWebArtifactEditForRead(project);
> 
>          IVirtualComponent com = ComponentCore.createComponent(project);
> 
>          IVirtualFolder webRootFolder = 
> com.getRootFolder().getFolder(new Path("/"));
> 
> -        IVirtualFolder srcRootFolder = 
> com.getRootFolder().getFolder(new Path("/WEB-INF/classes"));
> 
> +        final IVirtualFolder srcRootFolder = 
> com.getRootFolder().getFolder(new Path("/WEB-INF/classes"));
> 
>          IContainer folder = webRootFolder.getUnderlyingFolder();
> 
>          edit.dispose();
> 
>          
> model.setProperty(ISeamFacetDataModelProperties.SEAM_PROJECT_NAME, 
> project.getName());
> 
> @@ -296,6 +302,44 @@
>           
> if(model.getProperty(ISeamFacetDataModelProperties.JDBC_DRIVER_JAR_PATH)!=null) 
> 
> 
>               
> AntCopyUtils.copyFiles((String[])model.getProperty(ISeamFacetDataModelProperties.JDBC_DRIVER_JAR_PATH), 
> webLibFolder);
> 
> 
> 
> +            Job create = new Job("Deploying datasource to server") {
> 
> +                @Override
> 
> +                protected IStatus run(IProgressMonitor monitor) {
> 
> +
> 
> +                    IServer s = (IServer) 
> project.getAdapter(IServer.class);
> 
> +           
> 
> +                    if(s==null) {
> 
> +                        return new Status(Status.WARNING, 
> SeamCorePlugin.PLUGIN_ID, "No server selected to deploy datasource 
> to");                           
> 
> +                    }
> 
> +                   
> 
> +                    // convert it to a DeployableServer instance
> 
> +                    DeployableServerBehavior deployer = 
> (DeployableServerBehavior) s.loadAdapter(DeployableServerBehavior.class, 
> null);
> 
> +
> 
> +                    // if its not null, the adaptation worked.
> 
> +                    if( deployer == null ) {
> 
> +                        return new Status(Status.WARNING, 
> SeamCorePlugin.PLUGIN_ID, "Server did not support deploy of datasource.");
> 
> +                    }
> 
> +
> 
> +                    IContainer underlyingFolder = 
> srcRootFolder.getUnderlyingFolder();
> 
> +                   
> 
> +                    IPath projectPath = new 
> Path("/"+underlyingFolder.getProject().getName());
> 
> +                    IPath projectRelativePath = 
> underlyingFolder.getProjectRelativePath();
> 
> +                   
> 
> +                    IPath append = 
> projectPath.append(projectRelativePath).append(project.getName()+"-ds.xml"); 
> 
> 
> +                   
> 
> +                    if(SingleDeployableFactory.makeDeployable(append)) {
> 
> +                   
> 
> +                        IModule module = 
> SingleDeployableFactory.findModule(append);
> 
> +                       
> 
> +                         // custom API to deploy / publish only one 
> module.
> 
> +                        return 
> deployer.publishOneModule(IServer.PUBLISH_FULL, new IModule[] { module}, 
> ServerBehaviourDelegate.ADDED, monitor);                       
> 
> +                    } else {
> 
> +                        return new Status(Status.WARNING, 
> SeamCorePlugin.PLUGIN_ID, "Could not deploy datasource " + append);
> 
> +                    }
> 
> +                }
> 
> +            };
> 
> +            create.setRule(ResourcesPlugin.getWorkspace().getRoot());
> 
> +            create.schedule();
> 
>             
> 
>          } else {
> 
>             
> 
> 
> 
> 
> _______________________________________________
> jbosstools-dev mailing list
> jbosstools-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jbosstools-dev




More information about the jbosstools-dev mailing list