2012-05-16 54 views
10

Dịch vụ web của tôi sẽ chạy trên Máy chủ ứng dụng Jboss hoặc Máy chủ ứng dụng Websphere. Đối với cả hai người trong số họ tôi cần phải biết tên dụ, cho Jboss tôi có thể sử dụng System.getProperty("jboss.server.name"), nhưng những gì tôi có thể sử dụng cho WebSphere? Tôi không thể sử dụng phương pháp WebSphere cụ thể, tôi cần phải gọi System.propertiesLấy tên mẫu của máy chủ ứng dụng WebSphere

Cảm ơn

Trả lời

7

Để giữ cho nó nền tảng trung lập bạn có thể đặt một biến như một đối số JVM cho máy chủ Websphere (một cho mỗi nút nếu cụm của nó). Đối với Websphere 7, bạn sẽ tìm thấy sau trong Admin Console ...

Servers > Server Types > Websphere application servers > [your cluster node] > 
    > Java and Process Management > Process Definition > Java Virtual Machine > 
    > Generic JVM arguments 

và thêm một biến như thế này ...

-DServerName=serverNodeA 

Sau đó bạn có thể truy cập các giá trị trong mã của bạn như. ..

String serverName = System.getproperty("ServerName"); 

Kỹ thuật này có thể được sử dụng với tất cả các máy chủ ứng dụng miễn là bạn có quyền truy cập để thêm đối số vào JVM. Tôi chắc rằng phải có API cụ thể của Websphere để truy vấn tên nút, nhưng sau đó bạn nhập mã của mình vào máy chủ khiến việc kiểm tra đơn vị trở nên khó khăn và không thể di chuyển được. Tôi thích cách tiếp cận này.

3

Cách tiếp cận do Brad đề xuất là tốt nhưng tôi sẽ làm điều đó một cách tinh tế khác nhau.

Trong thuộc tính tùy chỉnh của JVM máy chủ, tôi sẽ thêm thuộc tính Tên máy chủ và chỉ định giá trị của nó là WAS_SERVER_NAME.

đây là cốm bánh mì cho việc này:

Servers -> -> Process Definition -> Java Virtual Machine> properties Tuỳ chỉnh

Thêm một cái mới wiht nói ServerName với giá trị $ {WAS_SERVER_NAME}

Mỗi cá thể máy chủ WAS có bộ biến WebSphere này được đặt thành tên của cá thể Máy chủ. Bạn không cần phải lo lắng về việc tạo lỗi chính tả (hoặc các lỗi tương tự ở đây) và cách tiếp cận này làm việc cho tất cả các máy chủ WAS.

Bạn có thể tạo một Máy chủ có các giá trị như được đặt làm mẫu và khi bạn tạo một máy chủ mới, các máy chủ này luôn có mặt cho bạn.

HTH

9

Tôi đồng ý với quy định cụ thể tên máy chủ như là một biến môi trường (touch Manglu cũng là tốt). Chỉ cần để làm cho cuộc thảo luận hoàn thành, đây là cách bạn nhận được tên dụ thông qua thời gian chạy (API này không được chấp nhận trong các phiên bản gần đây nhưng vẫn được sử dụng);

import com.ibm.websphere.runtime.ServerName; 

System.out.println("Display name: " + ServerName.getDisplayName()); 
System.out.println("Full name: " + ServerName.getFullName()); 

Mẫu đầu ra sẽ như thế nào

Display name: server1
Họ và tên: was7host01Node01Cell \ was7host01Node01 \ server1

+0

Tôi đã thử giải pháp và nó hoạt động tốt. – Stony

+0

Chính xác những gì tôi cần. Làm việc như một say mê. –

6

giải pháp kurtcebe hoạt động tốt. Đối với những người sử dụng maven, bạn sẽ không thể lấy lọ dễ dàng vào dự án của bạn. Bởi vì điều này, sử dụng Class.forname ...

try { 
    Class<?> c = Class.forName("com.ibm.websphere.runtime.ServerName"); 
    LOGGER.debug("Class found" + c); 
    Method m = c.getMethod("getFullName", new Class<?>[0]); 
    LOGGER.debug("Method found" + m); 
    Object o = m.invoke(DeliveryServiceUtils.class, new Object[0]); 
    LOGGER.debug("Method invoked, response is " + o); 
    processName = o.toString(); 
} 
catch (Exception ex) { 
    processName = "unknown - " + ex.getClass().getName() + ": " + ex.getMessage(); 
} 
13

Một thay thế, ít nhất là cho WebSphere, là tìm kiếm trong cây JNDI. Đây là những gì tôi sử dụng:

InitialContext ic = new javax.naming.InitialContext(); 
String serverName = ic.lookup("servername").toString(); 

Bằng cách này tôi không cần phải cấu hình bất cứ điều gì như WebSphere liên kết thông tin đó cho tôi.

Tên ô và nút cũng có thể được truy xuất bằng cách sử dụng "thisNode/cell/cellname" và "thisNode/nodename". Một cái gì đó hữu ích trong các cụm.

+0

Nó cũng làm việc cho tôi! – Stony

+0

Tuyệt vời, xin đừng quên để upvote :) – IsidroGH

+0

Điều này đã giúp tôi rất nhiều đau đầu vì tôi không muốn gửi trong một tham số JVM cho mỗi webapp. +1 –

Các vấn đề liên quan