8

Chcę robić klastrowanie z projektem ucha. Znalazłem jedno rozwiązanie do samodzielnego uruchamiania w klastrach przy użyciu konfiguracji standalone-ha.xml. Poszedłem za poniższym artykułem. Działa dobrze. Clustering in domain mode with wildfly9 Ale chcę uruchomić projekt ERP, który ma zarówno uszy, jak i stanowe ejb. Więc uruchamiam klastrowanie w trybie autonomicznym.W wildlfy9, jak wykonać replikację sesji stateful ejb z dwoma węzłami w trybie autonomicznym (klastrowanie)

Mam dwa urządzenia ip są różne np.

1.10.10.10.10 node1

  1. 20.20.20.20 NODE2

Oba urządzenia są wildfly9 i dla celów testowania Utworzono jedną próbkę z projektu stanową ejb składnik sieciowy.

Moje polecenie, aby uruchomić serwer jest:

standalone.bat -c standalone-ha.xml -b 10.10.10.10 -u 230.0.0.4 -Djboss.node.name=node1 

i

./standalone.sh -c standalone-ha.xml -b 20.20.20.20 -u 230.0.0.4 -Djboss.node.name=node2 

Mój projekt Test.war ma pełnostanowego ejb i serwletu i JSP. 1) Bank.java jest stanową EJB który realizuje zdalny oraz lokalny interfejs

@Stateful(passivationCapable=true) 
public class Bank implements BankRemote,BankLocal { 

private int amount=0; 

@Override 
public boolean withdraw(int amount) { 
    if(amount<=this.amount){ 
      this.amount-=amount; 
      return true; 
     }else{ 
      return false; 
     } 
} 
@Override 
public void deposit(int amount) { 
    this.amount+=amount; 

} 
@Override 
public int getBalance() { 
    return amount; 
}} 

2) OpenAccount.java jest serwlet

@WebServlet("/OpenAccount") 
public class OpenAccount extends HttpServlet { 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
try{ 
     HttpSession bankSession = request.getSession(); 
     BankRemote bank = (BankRemote) bankSession.getAttribute("remote"); 
     if(bank == null) 
      { 
       System.out.println("Session is Null So initialized with new session"); 
       Properties p = new Properties(); 
       /*p.put("jboss.naming.client.ejb.context", true);*/ 
       p.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 
       InitialContext context=new InitialContext();     
       BankRemote b=(BankRemote)context.lookup("java:global/Test/Bank!com.ejb.BankRemote");     
       request.getSession().setAttribute("remote",b); 
      } 
      else 
      { 
       System.out.println("Session is present id is :["+bankSession.getId()+"]"); 
      } 
      request.getRequestDispatcher("/operation.jsp").forward(request, response); 
} 
    catch(Exception e){System.out.println(e);} 

3) index.jsp jest strona główna zawiera poniżej jednej linii, który przekierowuje do serwletu

<a href="OpenAccount">Open Account</a> 

4) operation.jsp które przekazywane z serwlet:

<body> 
 
<form action="operationprocess.jsp"> 
 
Enter Amount:<input type="text" name="amount"/><br>  
 
Choose Operation: 
 
Deposit<input type="radio" name="operation" value="deposit"/> 
 
Withdraw<input type="radio" name="operation" value="withdraw"/> 
 
Check balance<input type="radio" name="operation" value="checkbalance"/> 
 
<br> 
 
<input type="submit" value="submit"> 
 
</form> 
 
</body>

4) operationprocess.jsp jest

<body> 
 
<% 
 
try 
 
{ 
 
BankRemote remote=(BankRemote)session.getAttribute("remote"); 
 
String operation=request.getParameter("operation"); 
 
String amount=request.getParameter("amount");  
 
if(remote != null) 
 
{if(operation!=null){ 
 
try{  
 
    if(operation.equals("deposit")) 
 
    { 
 
     remote.deposit(Integer.parseInt(amount)); 
 
     out.print("Amount successfully deposited!"); 
 
    } 
 
    else 
 
    {    \t 
 
    if(operation.equals("withdraw")){ 
 
     boolean status=remote.withdraw(Integer.parseInt(amount)); 
 
     if(status){ 
 
     out.print("Amount successfully withdrawn!"); } 
 
     else{ 
 
     out.println("Enter less amount"); } 
 
    }else{ 
 
     out.println("Current Amount: "+remote.getBalance()); 
 
    \t } 
 
\t } 
 
\t }catch(NumberFormatException numex){ 
 
\t \t \t out.println("Number is not valid");} 
 
\t } 
 
} 
 
else 
 
{out.print("Session is null"); } 
 
}catch(Exception ee){ 
 
\t System.out.println("in jsp exception"); 
 
\t ee.printStackTrace();} 
 
%> 
 
<hr/> 
 
<jsp:include page="operation.jsp"></jsp:include> 
 
</body>

5) web.xml zawiera

<distributable/> 

znaczniki dla umożliwienia klastrów.

6) również ścieżka klasa ma jboss-ejb-client.properties

remote.clusters=ejb 
remote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 
remote.cluster.ejb.connect.options.org.xnio.Options.SSL_ENABLED=false 

z tych wszystkich rzeczy, ja rozmieszczone Test.war zarówno serwera i próbować dostępu z apache_mode_cluster tj 10.10.10.10/Test/ . To wywołanie ejb i dać mi wyjście, ale kiedy 1) zamykam serwer 10.10.10.10 i odświeżam przeglądarkę (Nie wyczyściłem historii przeglądarki dla podtrzymywania sesji), tym razem daje mi to błąd, ponieważ dystrybuowalny kontener nie ma zastosowania do identycznych podanie.

2) 10.10.10.10 jest wyłączony i wyczyściłem historię i ponownie uzyskałem dostęp do adresu URL 10.10.10.10/Przetestuj przekierowanie do serwera 20.20.20.20, tj. Węzła2 i uruchom z powodzeniem. Ale sesja nie jest replikowana.

Proszę, pomóż mi. standalone-ha.xml - podsystem infinispan jest:

<cache-container name="server" default-cache="default" module="org.wildfly.clustering.server" aliases="singleton cluster"> 
      <transport lock-timeout="60000"/> 
      <replicated-cache name="default" mode="SYNC"> 
       <transaction mode="BATCH"/> 
      </replicated-cache> 
     </cache-container> 
     <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan"> 
      <transport lock-timeout="60000"/> 
      <distributed-cache name="dist" mode="ASYNC" owners="2" l1-lifespan="0"> 
       <locking isolation="REPEATABLE_READ"/> 
       <transaction mode="BATCH"/> 
       <file-store/> 
      </distributed-cache> 
     </cache-container> 
     <cache-container name="ejb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan" aliases="sfsb"> 
      <transport lock-timeout="60000"/> 
      <distributed-cache name="dist" mode="ASYNC" owners="2" l1-lifespan="0"> 
       <locking isolation="REPEATABLE_READ"/> 
       <transaction mode="BATCH"/> 
       <file-store/> 
      </distributed-cache> 
     </cache-container> 
+1

proszę opublikować zawartość podsystemu inifnispan ' z pliku' standalone-ha.xml '. – Shiva

+1

Tag [tag: cluster-analysis] (aliasowy z: clustering) odnosi się do zadania data mining, a nie do serwera [tag: load-balancing] lub [tag: cluster-computing]. Zwróć szczególną uwagę na wybór odpowiednich tagów i ich opisu. –

+1

SCRIPTLETS ????????? o.O –

Odpowiedz

0

miałem podobny problem (post) i zaczął oglądać swoje stanowisko. Po jakimś czasie dostałem to, co go spowodowało.

Może masz podobny problem. Sprawdź to.