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

   

 


 
主要讨论用 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 中的<security-domain>java:/jaas/jmx-console</security-domain>取消注释。
然后,将C:/jboss-4.0.4.GA/server/default/deploy/jmx-console.war/WEB-INF/ web.xml 中的
<security-constraint>
     <web-resource-collection>
       <web-resource-name>HtmlAdaptor</web-resource-name>
       <description>An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
       </description>
       <url-pattern>/*</url-pattern>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
     </web-resource-collection>
     <auth-constraint>
       <role-name>JBossAdmin</role-name>
     </auth-constraint>
   </security-constraint>
取消注释。
 
再访问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的安全设置
参考:
 
取消注释 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 文件。
 
JBOSS 在默认情况下自动发布所配置目录下的资源文件。在数商应用中需要关闭这一种功。
 
关闭这个功能时将会解决热发布的问题,在更改 xml 后,不会自动装载进去
如果更改 ear 中的 application.xml 时将会引起整个 ear 包的资源重新加载。
 
 
方法:
1). conf/jboss-service.xml 中在 > 修改
< attribute name ="ScanEnabled"> true</attribute>
 
< attribute name ="ScanEnabled"> false</attribute>
. 重新启动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.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();
      }
// 得到 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();
      }
// 得到 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();
      }
// 得到 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 需要放在环境变量中。
### 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();
      }
// 创建远程 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();
      }
// 创建远程 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();
      }
// 创建远程 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();
      }
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值