JBOSS 实现网站的发布,停用,重发布操作。

   

JBOSS 的JMX 应用 ... 2
1 访问JMX 的安全性设置 ... 2
2 关闭JBOSS 的自动发布功能 ... 2
2.1 修改server/default/conf/jboss-service.xml 热发布问题 ... 2
3 JMX 网站的发布、停用、重发布、判断是否发 操作 ... 3
3.1 本地调用JMX .. 4
3.1.1 deploy 操作 ... 4
3.1.2 unDeploy 操作 ... 5
3.1.3 isDeployed 操作 ... 5
3.1.4 reDeploy 操作 ... 6
3.2 通过JNDI 远程调用 ... 6
3.2.1 配置jndi.properties 文件 ... 7
3.2.2 deploy 操作 ... 7
3.2.3 unDeploy 操作 ... 7
3.2.4 isDeployed 操作 ... 8
3.2.5 reDeploy 操作 ... 9
 


 
JBOSS 的JMX 应用
主要讨论用 JBOSS 如何管理网站的发布,停用操作。其中关闭 JBOSS 的自动发布功能是为服务器的性能考滤,设置 JMX 的安全性是为了操作的安全。不影响网站的发布等操作。代码实例在 src 文件夹中。
1 访问JMX 的安全性设置
1.1Jmx-console安全控制
   
Jboss的jmx-console默认是不使用安全验证,这对于运行时的服务器是非常不安全。
在实际应用中往往需要打开其验证功能:
首先,C:/jboss-4.0.4.GA/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml 中的java:/jaas/jmx-console取消注释。
然后,将C:/jboss-4.0.4.GA/server/default/deploy/jmx-console.war/WEB-INF/ web.xml 中的
    
       HtmlAdaptor
       An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
      
       /*
       GET
       POST
    
    
       JBossAdmin
    
  
取消注释。
 
再访问jmx-conlose时需要提供用户名admin,密码admin.
用户所属于的权限组可以在C:/jboss-4.0.4.GA/server/default/conf/props/ jmx-console-roles.properties 和jmx-console-users.properties 中更改。
 
1.2 JMX Connection的安全设置
参考:
http://wiki.jboss.org/wiki/Wiki.jsp?page=SecureTheInvokers
 
取消注释 server/xxx/deploy/jmx-invoker-service.xml中的.
< descriptors >
   < interceptors >
   < interceptor code =" org.jboss.jmx.connector.invoker.AuthenticationInterceptor " securityDomain =" java:/jaas/jmx-console "/>
interceptors >
descriptors >
后使用jmx连接时需要使用安全验证了.
 
 
 
 
使用JMX时远程连接需要在初始化InitialContext 时设置用户名和密码,并且使用
org.jboss.security.jndi.JndiLoginInitialContextFactory 实现安全登陆.
详细如下:
Properties env = new Properties();
env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
   env.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099/");
   env.setProperty(Context.SECURITY_PRINCIPAL, "username");
   env.setProperty(Context.SECURITY_CREDENTIALS, "password");
  InitialContext ctx = new InitialContext(env);
 
 
本地连接如何进行安全验证还没有找到.
2 关闭JBOSS 的自动发布功能
1 JBoss 热发布时如果更改 application.xml 文件时,服务器将重新加载 ear 中的所有资源,这个过程服务器会有一段时间中止响应。在应用中我们只需要加载改到的 war 就可以, 需要关闭热发布的功能。
2 )服务器在执行发布时 undeploy deploy 时,并不会更改 application.xml 文件 , 需要手工去更改 application 文件。
 
2.1 修改server/default/conf/jboss-service.xml 热发布问题
JBOSS 在默认情况下自动发布所配置目录下的资源文件。在数商应用中需要关闭这一种功。
 
关闭这个功能时将会解决热发布的问题,在更改 xml 后,不会自动装载进去
如果更改 ear 中的 application.xml 时将会引起整个 ear 包的资源重新加载。
 
 
方法:
1). conf/jboss-service.xml 中在 > 修改
< attribute name ="ScanEnabled"> trueattribute>
 
< attribute name ="ScanEnabled"> falseattribute>
. 重新启动JBOSS
3 JMX 网站的发布、停用、重发布、判断是否发 操作
  JBOSS 支持远程和本地两种调用 JMX   Mbeans 的方法,主要区别在于取得 JMX 服务器的方法不同。远程使用时需要配置 jndi.properties 文件。
 
JMX网站的发布、停用、重发布、判断是否发 操作主要由 org.jboss.deployment.MainDeployerMBean类完成。主要方法有:
+void addDeployer(org.jboss.deployment.SubDeployer jboss.system:service=MainDeployer)
+ void removeDeployer(org.jboss.deployment.SubDeployer jboss.system:service=MainDeployer)
+ void deploy(java.lang.String jboss.system:service=MainDeployer)
+ void deploy(java.net.URL jboss.system:service=MainDeployer)
+ void deploy(org.jboss.deployment.DeploymentInfo jboss.system:service=MainDeployer)
+ void start(java.lang.String jboss.system:service=MainDeployer)
+ void stop(java.lang.String jboss.system:service=MainDeployer)
+ org.jboss.deployment.DeploymentInfo getDeployment(java.net.URL jboss.system:service=MainDeployer)
+ java.net.URL getWatchUrl(java.net.URL jboss.system:service=MainDeployer)
+ boolean isDeployed(java.net.URL jboss.system:service=MainDeployer)
+ boolean isDeployed(java.lang.String jboss.system:service=MainDeployer)
+ java.util.Collection listDeployed()
+ java.lang.String listDeployedAsString()
+ java.util.Collection listDeployedModules()
+ java.util.Collection listDeployers()
+ void checkIncompleteDeployments()
+ java.util.Collection listIncompletelyDeployed()
+ java.util.Collection listWaitingForDeployer()
+ void redeploy(java.lang.String jboss.system:service=MainDeployer)
+ void redeploy(java.net.URL jboss.system:service=MainDeployer)
+ void redeploy(org.jboss.deployment.DeploymentInfo jboss.system:service=MainDeployer)
+ void shutdown()
+ void undeploy(java.lang.String jboss.system:service=MainDeployer)
+ void undeploy(java.net.URL jboss.system:service=MainDeployer)
+ void undeploy(org.jboss.deployment.DeploymentInfo jboss.system:service=MainDeployer)
+ void create()
+ void start()
+ void stop()
+ void destroy()
+ void jbossInternalLifecycle(java.lang.String jboss.system:service=MainDeployer)
3.1 本地调用JMX
3.1.1 deploy 操作
// 得到 JMX  服务器对象
  MBeanServer server = MBeanServerLocator.locateJBoss();
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name,"deploy", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
3.1.2 unDeploy 操作
// 得到 JMX  服务器对象
  MBeanServer server = MBeanServerLocator.locateJBoss();
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name,"undeploy", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
3.1.3 isDeployed 操作
// 得到 JMX  服务器对象
  MBeanServer server = MBeanServerLocator.locateJBoss();
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name," isDeployed ", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
3.1.4 reDeploy 操作
// 得到 JMX  服务器对象
  MBeanServer server = MBeanServerLocator.locateJBoss();
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name," reDeploy ", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
3.2 通过JNDI 远程调用
1.  需要 jar 文件
.jndi.properties 需要放在环境变量中。
3.2.1 配置jndi.properties 文件
### JBossNS properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
3.2.2 deploy 操作
// 创建远程 JMX 服务器连接环境,并得到 JMX 服务器
     InitialContext ic = new InitialContext();
      RMIAdaptor server = (RMIAdaptor) ic.lookup("jmx/rmi/RMIAdaptor");
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name,"deploy", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
3.2.3 unDeploy 操作
// 创建远程 JMX 服务器连接环境,并得到 JMX 服务器
     InitialContext ic = new InitialContext();
      RMIAdaptor server = (RMIAdaptor) ic.lookup("jmx/rmi/RMIAdaptor");
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name," unDeploy ", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
3.2.4 isDeployed 操作
// 创建远程 JMX 服务器连接环境,并得到 JMX 服务器
     InitialContext ic = new InitialContext();
      RMIAdaptor server = (RMIAdaptor) ic.lookup("jmx/rmi/RMIAdaptor");
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name," isDeployed ", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
3.2.5 reDeploy 操作
// 创建远程 JMX 服务器连接环境,并得到 JMX 服务器
     InitialContext ic = new InitialContext();
      RMIAdaptor server = (RMIAdaptor) ic.lookup("jmx/rmi/RMIAdaptor");
// 创建 ObjectName 对象
   ObjectName name = org.jboss.deployment.MainDeployerMBean.OBJECT_NAME;
      // Invoke the list(boolean) op
         String[] sig = {"java.lang.String"};
         Object[] opArgs = {  "file:/C:/jboss-4.0.4.GA/server/default/deploy/newEbiz1.ear/jianshe.war/" };
try{
Object  result = server.invoke(name," reDeploy ", opArgs, sig); 
      } catch (InstanceNotFoundException e) {
         e.printStackTrace();
      } catch (MBeanException e) {
         e.printStackTrace();
      } catch (ReflectionException e) {
         e.printStackTrace();
      }
 
 

你可能感兴趣的:(JAVA技术)