programing

JBoss에 핫 배포-JBoss가 변경 사항을 "보도록"하려면 어떻게해야합니까?

projobs 2021. 1. 18. 07:30
반응형

JBoss에 핫 배포-JBoss가 변경 사항을 "보도록"하려면 어떻게해야합니까?


개발 중에 로컬 JBoss 설치에 반복해서 배포하는 Java EE 애플리케이션을 개발 중입니다. 내 애플리케이션을 [JBOSS] / server / default / deploy / myApp에 직접 핫 배포하여 빌드 속도를 높이고 싶습니다.

작동하는 것처럼 보이지만 하드 배포와 JBoss가 새 클래스를 사용하기 시작할 때 사이에 다소 임의적 인 지연이있는 것 같습니다. 나는 JBoss에 익숙하지 않지만 그것이 클래스를 캐시하고 이것이 문제의 원인이라고 가정합니다.

내가 맞습니까? 그렇다면 JBoss가 캐시를 플러시하도록하려면 어떻게해야합니까?


내 번들 (Eclipse IDE + JBoss 서버 어댑터) + JBoss AS 7.0.1 (커뮤니티 프로젝트)에서 동일한 문제가 발생했습니다.

솔루션 은 매우 간단합니다. JBoss 관리 패널 (기본적으로 localhost : 9990)로 이동하여 프로필 설정에서 Core-Deployment Scanners를 엽니 다. Autodeploy-Exploded (true로 설정)를 켜고 원하는대로 스캐너 시간 (기본적으로 5000ms)을 사용자에게 적합하게 설정할 수 있습니다 (프로젝트를 변경할 때 Eclipse에서 더 빠른 증분 게시를 위해 2000으로 설정). . 그게 다야. 이제 JBoss는 HTML (JSF, XHTML 등) 파일에 대해 HOT 배포를 할뿐만 아니라 POJO 클래스 (빈 등) 파일도 처리합니다.


불행히도 그렇게 쉽지는 않습니다. JBoss (대부분 ClassLoader 관련)의이면에는 애플리케이션 핫 배포를 방지하는 더 복잡한 것들이 있습니다.

예를 들어 클래스 서명 중 일부가 변경되면 HOT-DEPLOY를 수행 할 수 없습니다.

지금까지 MyEclipse IDE (Eclipse의 유료 배포판)를 사용하는 것이 매우 성공적으로 핫 배포를 수행하는 유일한 방법입니다. 하지만 100 % 정확도는 아닙니다. 그러나 확실히 JBoss Tools, Netbeans 또는 다른 Eclipse 기반 솔루션보다 낫습니다.

나는 당신이 단지에 의해 기술 한 내용을 수행하는 무료 도구를 찾고 있었어요 묻는 당신이보고 싶을 경우 StackOverflow의 사람들을.


핫 배포 작업을 꽤 잘 수행하는 JRebel 을 사용해보십시오 . 약간 비싸지 만 그만한 가치가 있습니다. 평가판이 있습니다.


핫 배포는 애플리케이션의 정적 부분 (jsf, xhtml 등)에 대한 변경 사항에만 안정적입니다.

다음은 JBoss AS 7.1.1.Final 에 따른 작업 솔루션입니다 .

  • 프로젝트를 빌드하십시오.
  • [JBOSS_HOME] / standalone / tmp / vfs로 이동합니다.
  • "deployment [some_alphanumeric_values]"라는 가장 최근에 수정 된 폴더 (예 : "deployment344b1c870c8edbd")를 엽니 다.
  • 편집하려는 특정보기 (일반적으로 패키지 .war폴더에 포함되어 있음 )로 이동하여 텍스트 편집기 (예 : 메모장 ++)로 엽니 다.
  • 원하는대로 변경하고 파일을 저장합니다.
  • 브라우저에서 해당 페이지를 새로 고칩니다. 이제 변경 사항이 표시됩니다.
  • 완료되면 이러한 변경 사항을 실제 개발 환경에 복사하고 다시 빌드하고 재배포하는 것을 잊지 마십시오.


    내 두 센트 :

    • 콜드 배포 는 응용 프로그램을 중지 (또는 전체 서버 중지) 한 다음 새 버전을 설치하고 마지막으로 응용 프로그램을 다시 시작 (또는 전체 서버 시작) 할 때 응용 프로그램을 배포하는 방법입니다. 공식 프로덕션 배포에 적합하지만 개발 중에이 작업을 수행하는 것이 끔찍할 것입니다. 이 작업을한다면 빠른 개발은 잊으십시오.

    • 자동 배포 는 서버가 새로운 EAR / WAR를 주기적으로 다시 스캔하고 자동으로 배포해야하는 기능입니다. 소스 코드를 변경할 때 IDE (Eclipse)가 전체 애플리케이션을 자동으로 배포 할 수 있습니다. . JBoss가이를 수행하지만 JBoss의 마케팅 부서에서는이를 " 핫 배포 "라고 오해 합니다 . 자동 배포는 콜드 배포에 비해 느리지 않지만 핫 배포에 비해 정말 느립니다.

    • 핫 배포 는 " 입력 한대로 "백그라운드에서 배포 할 수있는 기능 입니다. 변경할 때 전체 애플리케이션을 다시 배포 할 필요가 없습니다. 핫 배포 는 변경 사항 배포합니다. 자바 소스 코드를 변경하면 짜잔! 이미 실행 중입니다. 당신은 그것이 그것을 배치하고 있다는 것을 결코 알지 못했습니다. JBoss는 JRebel (또는 유사)을 위해 사지 않는 한 이것을 할 수 없지만 이것은 나에게 너무 많은 $$입니다 (저는 저렴합니다).

    이제 내 "판매 피치": D

    개발 중에 Tomcat사용하는 것은 어떻습니까? 함께 제공 뜨거운 배포 하루 종일 ... 무료. 개발하는 동안 항상 그렇게하고 나서 WebSphere, JBoss 또는 Weblogic에 배포합니다. 오해하지 마십시오.이 세 가지는 프로덕션에는 좋지만 로컬 머신에서 빠르게 개발하기에는 정말 끔찍합니다. 이 세 가지를 하루 종일 사용하면 개발 생산성이 저하됩니다.

    제 경험상 저는 빠른 개발을 위해 WebSphere, JBoss 및 Weblogic 사용을 중단했습니다. 그래도 여전히 로컬 환경에 설치되어 있지만 가끔 테스트를 실행하는 경우에만 실행해야 할 수 있습니다. 나는 놀라운 개발 속도를 얻는 동안 JRebel에 대한 비용을 지불하지 않습니다. Tomcat이 JBoss와 완전히 호환된다고 언급 했습니까?

    Tomcat은 무료이며 자동 배포뿐만 아니라 Eclipse에 입력 할 때 REAL 핫 배포 (Java 코드, JSP, JSF, XHTML)도 있습니다 ( 예, 잘 읽었습니다 ). MYKong에는 설정 방법에 대한 세부 정보 가있는 페이지 ( https://www.mkyong.com/eclipse/how-to-configure-hot-deploy-in-eclipse/ )가 있습니다.

    내 판매 홍보물이 마음에 드 셨나요?

    건배!


    나는 똑같은 문제가 있었지만 지금은 그것을 통제하고 있다고 생각합니다.

    Eclipse 또는 명령 줄을 사용하고 있습니까?

    명령 줄을 사용할 때 "seam clean"또는 "seam undeploy"또는 "seam restart"다음에 "seam explode"를 수행 한 것 같습니다. 나는 아마이 모든 것을 한 번에 시도해 보았을 것입니다.

    아이디어는 배포 된 전쟁 파일을 두 곳에서 제거하는 것입니다.

    1. $JBOSS_HOME/server/default/deploy
    2. $PROJECT_HOME/exploded_archives
    

    나는 "seam undeploy"가 첫 번째를 제거하고 "seam clean"이 두 번째를 제거한다고 확신합니다.

    eclipse를 사용할 때 (무료 사용) 먼저 "Project / Build Automatically"를 끄고 배포 할 준비가되면 변경 한 내용에 따라 Project / Build Project 또는 Project / Build All을 수행합니다. xhtml을 변경하면 프로젝트 빌드로 충분합니다. Java 소스를 변경하면 모두 빌드가 작동합니다. 이것들이 똑같은 일을 할 수 있고 그 차이는 내 상상력에 있지만,이 것들의 조합이 당신을 위해 일할 것입니다.

    그래도 출력을 봐야합니다. 간혹 앱이 정리되거나 배포 취소되지 않습니다. 이로 인해 변경 사항이 표시되지 않습니다. 가끔 서버를 먼저 종료 한 다음 프로젝트를 다시 빌드 / 정리 / 배포합니다.

    도움이 되었기를 바랍니다.

    TDR


    링크 에서 솔루션을 찾았습니다 .

    해야 할 일 :

    1. .war 확장자를 갖도록 폭발 된 전쟁 아티팩트 구성
    2. 폭발 한 아티팩트를 WildFly 또는 Jboss에 배포
    3. 업데이트 작업에서 리소스를 업데이트하도록 IntelliJ 구성

    페이지 (웹)를 수정할 때 업데이트하고 웹 브라우저를 새로 고치면 모드가 모두 있습니다. 자동 스캔을 위해 Jboss를 구성했습니다 (도움이되었는지 확실하지 않음).


    실제로 내 문제는 명령 줄 mvn 유틸리티가 어떤 이유로 든 변경 사항을 볼 수 없다는 것입니다. 배포 스캐너에서 자동 배포를 켰지 만 여전히 차이가 없었습니다. 그러나 ... 나는 이클립스 환경을 돌아 다니며 서버 창에 JBoss 서버를 추가했기 때문에 작업 공간에서 모듈을 "추가 또는 제거 ..."할 수있는 기능이 있음을 발견했습니다. 코드를 변경할 때마다 프로젝트가 추가되면 Deployment Scanner가 코드 변경을 감지했고 JBoss는 코드 업데이트주기를 거쳤습니다 !!! 매력처럼 작동합니다.

    이를 설정하는 데 필요한 단계는 다음과 같습니다.

    먼저 파일-> 새로 만들기-> 기타-> 서버를 사용하여 JBoss 서버를 Eclipse에 추가 한 다음 JBoss AS 7 서버를 추가하는 동작을 수행하십시오. 사용중인 디렉토리를 찾아야합니다.

    추가 한 후에는 Eclipse 하단에서 "서버"탭을 찾아보십시오. JBoss 서버가 표시되어야합니다. 강조 표시하고 "추가 또는 제거 ..."를 찾습니다. 거기에서 프로젝트를 볼 수 있습니다.

    추가 한 후에는 코드를 약간 변경하고 JBoss가 최신 배포로 이동하는 것을 지켜보십시오.


    Eclipse와 Wildfly를 사용하여 프로젝트를 개발 중이며 응용 프로그램에 필요한 모든 타사 라이브러리를 배포하여 폭발적인 EAR 파일이 커졌습니다. 매번 항아리를 다시 복사하고 있다고 생각하는 Maven 저장소에 배포를 지시했습니다. 그래서 서비스 계층에서 Java 코드를 변경할 때마다 애플리케이션을 재배포하는 것은 악몽이되었습니다.

    그런 다음 Hotswap 에이전트로 전환하여 애플리케이션을 재배포하지 않고 EJB 코드의 변경 사항을 확인하는 데 많은 도움이되었습니다.

    However I have recently upgraded to Wildfly 10, Java 8 and JBoss Developer Studio 10 and during that process I took the time to move all my 3rd party application jars e.g. primefaces into Wildfly modules and I removed my Maven repo from my deployment config. Now redeploying the entire application which is a pretty big one via Eclipse takes just a few seconds and it is much much faster than before. I don't even feel the need to install Hotswap and don't want to risk it anyway right now.

    So if you are building under Eclipse with Wildfly then keep you application clear of 3rd party libs using Wildfly Modules and you'll be much better off.


    Solution for Netbeans 8.02 and 8.1 IDE and JBOSS EAP 6.4:

    1. From the services tab of Netbeans, add JBOSS server to your "servers" node.
    2. If you are using MAVEN, netbeans compiles files and maven copies files to ./target directory. You need to create a symbolic link from .\target to JBOSS_HOME\standalone\deployments. Under windows, an example command would be

      cd %JBOSS_HOME%\standalone\deployments mklink /d MyWebApplication.war %PROJECTS_HOME%\MyWebApplication\target\MyWebApplication-1.0.0

      The above creates a symbolic link from %JBOSS_HOME%\standalone\deployments\MyWebApplication.war to \target\MyWebApplication-1.0.0 which is where maven transfers all files after compilation, or after a jsp, html or any other file changes.

    3. Last think to do is to create a CentralManagement.war.dodeploy file in %JBOSS_HOME%\standalone\deployments. This file will tell JBOSS to deploy the war "file" as a web application


    Start the server in debug mode and It will track changes inside methods. Other changes It will ask to restart the module.


    I am using JBoss AS 7.1.1.Final. Adding following code snippet in my web.xml helped me to change jsp files on the fly :

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>development</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    

    Hope this helps.!!


    Deploy the app as exploded (project.war folder), add in your web.xml:

    <web-app>
        <context-param>
            <param-name>org.jboss.weld.development</param-name>
            <param-value>true</param-value>
        </context-param>
    

    Update the web.xml time every-time you deploy (append blank line):

    set PRJ_HOME=C:\Temp2\MyProject\src\main\webapp
    set PRJ_CLSS_HOME=%PRJ_HOME%\WEB-INF\classes\com\myProject
    
    set JBOSS_HOME= C:\Java\jboss-4.2.3.GA-jdk6\server\default\deploy\MyProject.war
    set JBOSS_CLSS_HOME= %JBOSS_HOME%\WEB-INF\classes\com\myProject
    
    copy %PRJ_CLSS_HOME%\frontend\actions\profile\ProfileAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\ProfileAction.class
    copy %PRJ_CLSS_HOME%\frontend\actions\profile\AjaxAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\AjaxAction.class
    
    ECHO.>>%JBOSS_HOME%\WEB-INF\web.xml
    

    This worked for me in Eclipse Mars with WildFly 11. Double-click on WildFly server under Servers to open the configuration page. In the Overview tab -> Publishing, choose "Automatically publish when resources change" and set the interval to 1. Next, Overview tab -> Application Reload Behavior, uncheck the use default pattern and set the pattern to \.jar$|\.class$. In the Deployment tab, uncheck Deploy project as compressed archives. Hope this helps.


    In case you are working with the Eclipse IDE there is a free plugin Manik-Hotdeploy.

    This plugin allows you to connect your eclipse workspace with your wildfly deployment folder. After a maven build your artifact (e.g. war or ear) will be automatically pushed into the deployment folder of your server. Also web content files (e.g. .xhtml .jsf ...) will be hot deployed.

    The plugin runs for wildfly, glassfish and payara.

    Read the section JBoss/Wildfly Support for more details.


    Use Ant script and make target deploy.

    The deploy target should:

    1. Stop JBoss
    2. Copy the ear or war to the deploy directory
    3. Start JBoss

    ==> No caching + also no out of memory issues after subsequent deploys during testing.

    ReferenceURL : https://stackoverflow.com/questions/969279/hot-deploy-on-jboss-how-do-i-make-jboss-see-the-change

    반응형