Showing posts with label Websphere. Show all posts
Showing posts with label Websphere. Show all posts

Saturday, June 28, 2014

"Manage keys and Certificates" and "Copy to Web server key store directory" buttons were disabled on WASND


พอดีตอนเจอปัญหาว่าหลังจาก Create Web Server บน WebSphere Application Server แล้ว
ตอนไปที่ Plug-in Properties เพื่อจะกดปุ่ม "Copy to Web server key store directory" ให้ copy "plugin-key.kdb" แต่ปุ่มกลับ disable ไม่สามารถกดได้ จะดำเนินการด้วยวิธี manual ก็พบว่าไม่มีไฟล์ "plugin-key.kdb" อยู่ งานเข้าสิครับ!!
วิธีแก้คือการกำหนดค่า security ให้กับ Inbound ตามคู่มือนี้นะครับ

"Manage keys and certificates" link for plugin-key.kdb is broken in the WebSphere Application Server administrative console

http://www-01.ibm.com/support/docview.wss?uid=swg21426980

อันล่างนี้สร้าง plugin-key.sth
http://www-01.ibm.com/support/docview.wss?uid=swg21177702
ใช้ ikeyman browse ไปที่
profile_root/dmgr_profile/config/cells/cell_name/nodes/node_name/servers/webserver_name/plugin-key.kdb

 

Wednesday, October 16, 2013

Switch to Edit Mode and page render too slow on WebSphere Portal 8 CTC 4.1


พอดีเจอปัญหาติดตั้ง WebSphere Portal 8.0.0.1 CF07 กับ CTC 4.1 บนเครื่องทดสอบ ปรากฎว่ามันช้ามาก โดยเฉพาะตอนเปลี่ยนเป็น Edit Mode ที่หน้า CTC Demo แล้วด้วย ต้องรอจนไม่รู้ว่าจะเสร็จเมื่อไหร่เลยทีเดียว

ปัญหานี้สามารถแก้ได้โดยการ transfer database ไปเป็น DB2 หรือ RDBMS ตัวอื่นที่ไม่ใช่ derby ที่ติดมาตอนลง (ที่ตอนแรกไม่ได้ย้ายนั้นเป็นเพราะว่าคิดว่าลงเพื่อทดสอบการใช้งานเฉยๆไม่ได้ขึ้น production)

นอกจากนี้การติดตั้ง CTC 4.1เราควรทำ post configure โดยการ remove duplicate statements ออกจากไฟล์ต่างๆดังนี้ครับ





Saturday, September 28, 2013

"New" button not displayed in the authoring portlet for Web Content Manager

ปุ่ม new ของผมหายไป...

หลังจากติดตั้ง IBM WebSphere Portal 8.0.0.1 CF07 + Content Template Catalog 4.1 แล้วรู้สึกว่ามันแปลก เนื้อหาในหน้า CTC Demo หายไปหมดเลย

ลองเข้าไปตรวจสอบในหน้า Application ->  Web Content Manager -> Library Explorer ก็พบว่าปุ่ม New หายไป

เลยนึกขึ้นมาได้ว่าตอนติดตั้งดันใช้เป็น IBM WebSphere Portal Server ไม่ได้ติดตั้งแบบ Enable ไว้ - -"

http://www-01.ibm.com/support/docview.wss?uid=swg21608268

Friday, June 07, 2013

IHS 8.0 require Ms.Visual C++ on Windows server

บ้างครั้งการติดตั้ง IHS อาจเจอปัญหา


The installation package IBM HTTP Server v8.0 requires components supplied by other packages.
To fix the issue, either install the required components or deselect the installation package.
The required components may be supplied by the following installation packages:
Package: Microsoft Visual C++ 2008 Redistributable Package


เราสามารถแก้ไขได้โดย
1. ถ้าเป็น 32 bit ก็ให้ลงเฉพาะ Microsoft Visual C++ 2008 Redistributable for 32 bit
http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf

2. ถ้าเป็นบน 64 bit ก็ให้ลงทั้ง  Microsoft Visual C++ 2008 Redistributable for 32 bit และ Microsoft Visual C++ 2008 Redistributable for 64 bit
http://www.microsoft.com/download/en/details.aspx?id=15336

ref: http://www-01.ibm.com/support/docview.wss?uid=swg21573966

Thursday, August 23, 2012

Websphere Portal: Using WebDAV

เทคนิคที่นิยมใช้สำหรับติดต่อเพื่อจัดการกับ files และ resources ต่างๆใน Websphere Portal อย่างหนึ่งก็คือ WebDAV โดยหากใครใช้ Windows ก็จำเป็นต้องลง client เพิ่มเติมครับ เช่น BitKinex เป็นต้น

สำหรับ Url ที่เป็น Endpoint ของ WebDAV บน Websphere Portal นั้นมี format ตามนี้ครับ

http://server:port/[[Directory structure wp8|PortalServer_root]]/mycontenthandler/dav/fs-type1
server - server name or ip address
srever - srever port
Directory structure WP8|PortalServer_root - default is "wps"

สามารถอ่านรายละเอียดเพิ่มเติมได้ที่
http://www-10.lotus.com/ldd/portalwiki.nsf/dx/Using_WebDAV_file_store_wp8

Wednesday, July 25, 2012

Getting started with IBM Websphere Portal 8


สำหรับใครที่อยากทดลองติดตั้งและเรียนรู้ IBM Websphere Portal 8 ผมว่า http://infolib.lotus.com/resources/gs/portal8/ เป็น Getting Started resources ที่ดีใช้ได้เลยครับ

Sunday, October 16, 2011

IBM RSA 7.0 problems

สำหรับ IBM Rational Software Architecture 7.0 (RSA7.0) มีประเด็นหลักๆอยู่สองเรื่องที่ผมได้ประสบมาคือ
1. เมื่อใช้งานบน Windows 7 (64bits) จะเกิดอาการใช้งานไปสักพักแล้วจะปิดตัวไปเอง โดยจะมี error JVM terminated. Exit code=8096 แม้ว่าจะลองปรับแต่ตามที่นี้ แล้วก็ยังไม่ประสบความสำเร็จ ดีไม่ดีจะมีการสร้าง heapdump files ไว้ใน home directory ด้วย

2. เมื่อ update IBM RSA7.0 เป็น version 7.0.0.10 โดย download จากที่นี้ ก็พบว่าไม่เกิดปัญหาตามที่ระบุในข้อที่ 1 อีกเลยครับ แต่เมื่อใช้งาน struts 2.2 กลับพบปัญหา jsp ไม่สามารถเรียกไปยัง action ได้ทั้งๆที่ source code เดียวกันสามารถทำงานได้บน RSA7.0 ที่ยังไม่ได้ update ก็เลยต้อง rollback กลับไปใช้งาน 7.0.0.0 เหมือนเดิมครับ - -"

เลยอยากเอามา share กันให้ทราบครับผม

Friday, August 14, 2009

Can not expand Queue Manager node on MQ Explorer

บางครั้งเมื่อเราเรียกใช้งาน MQ Explorer ขึ้นมาแล้วพบว่า Queue Manager ไม่สามารถ
Expand ออกมาเพื่อดู objects ภายใน queue manager นั้นได้ดังรูป


วิธีแก้ ก็คือสั่ง stop Queue Manager แล้วปิด MQ Explorer
จากนั้น ให้ไปที่ Taskbar และเปิด MQ Explorer จาก Taskbar แทน ตามรูป


จากนั้นจะพบว่า Queue Manager จะสามารถ expand เพื่อให้เราสามารถทำงานกับ objects ภายในได้












Wednesday, August 12, 2009

JVMJ9GC028E Option too large

เมื่อ startServer แล้วพบอาการ

ADMU7704E: Failed while trying to start the Windows Service associated
with server:
server1;probable error executing WASService.exe:
Starting Service:
LOS0PFM0SVRNode01Service failed to start.
startServer return
code = -1


อาจเกิดขึ้นได้หลายสาเหตุ
โดยสามารถดูรายละเอียดส่วนหนึ่งได้จาก

$WAS_HOME\profiles\native_stderr.log

วันนี้ขอเสนอ


JVMJ9GC028E Option too large: '-Xmx4096m'JVMJ9VM015W Initialization error for
library j9gc23(2): Failed to initialize, parsing command lineCould not create
the Java virtual machine.

Error นี้เกิดจากเราไปกำหนด Maximum Heapsize ให้กับ WAS มากเกินกว่าที่ server จะจองให้ได้มันก็จะ start ไม่ขึ้นพร้อมกับ print error ออกมาอย่างที่เห็นนี้ล่ะครับ
แล้วจะทำยังไงดี (นี้เป็นคำถามสำหรับคนที่ config ค่า Maximum Heapsize ผ่าน Web Console) ไม่ยากครับเข้าไปแก้


$WAS_HOME\profiles\config\cells\nodes\servers\server.xml

จากนั้นมองหา

< id="JavaVirtualMachine_1249974906156" verbosemodeclass="false" verbosemodegarbagecollection="true" verbosemodejni="false" color="#ff6600">maximumheapsize="4096" runhprof="false" debugmode="false" debugargs="-Djava.compiler=NONE -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777" genericjvmarguments="-Dsun.rmi.dgc.server.gcInterval=60000 -Dsun.rmi.dgc.client.gcInterval=60000 -Xdisableexplicitgc" disablejit="false">

ครับแล้วก็จัดการแก้ค่า maximumHeapSize ให้มีขนาดน้อยๆก่อนครับ (อย่าลืม backup ไว้ด้วยล่ะ) จากนั้น save แล้วลอง startServer อีกครั้งครับผลลัพธ์ที่ได้ก็น่าจะเป็น

ADMU0128I: Starting tool with the profile
ADMU3100I: Reading configuration for server:
ADMU3200I: Server launched. Waiting for initialization status.
ADMU3000I: Server open for e-business; process id is 2328
ให้เราชื่นใจนะครับ

Tuesday, July 14, 2009

com.ibm.Websphere.naming.WsnInitialContextFactory

เคยมั้ยครับ เวลาใช้เขียน JNDI สำหรับ lookup ใน WAS6.1 แบบนี้

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.Websphere.naming.WsnInitialContextFactory");
InitialContext ctx = new InitialContext(env);


แล้วเจอ error

javax.naming.NoInitialContextException: Cannot instantiate class: com.ibm.Websphere.naming.WsnInitialContextFactory. Root exception is java.lang.ClassNotFoundException: com.ibm.Websphere.naming.WsnInitialContextFactory


ทั้งๆที่เราก็อ้าง classpath ไปที่ naming.jar แล้วแต่ทำไมยังไม่ได้นะ extract ออกมา folder ภายในก็เป็นมีปกตินี่นาเข้าไปดูตัวอย่างมากมายใน Internet ก็เรียกใช้งาน

com.ibm.Websphere.naming.WsnInitialContextFactory


แบบนี้แทบทั้งนั้น มองเห็นอะไรผิดสังเกตป่ะครับ ใช้เลยครับชื่อ package ของ java ต้องเป็นตัวเล็กครับ ดังนั้นต้องแก้เป็น

com.ibm.websphere.naming.WsnInitialContextFactory


เท่านี้ล่ะครับ เรียบร้อยละ

Wednesday, March 18, 2009

How to get client Request object in IBM java web service

เมื่อเราเขียน web application ไม่ว่าจะด้วย servlet หรือ jsp
หรืออื่นๆ เราก็สามารถ get client request ออกมาเพื่อหาค่า
information ของ client ได้ แต่ web service ล่ะทำยังไง

สำหรับ java web service นั้น ปกติ ก็ต้องมีการ implement
interface ที่ inherit มาจาก rmi.Remote แล้วนำมา Generate
ออกมาเป็น web serice

อาว ไม่เห็นมี Request แบบใน Servlet เลยที่มี Request
อยู่ใน doPost, doGet

วิธีเพื่อให้ได้มาซึ่ง Request มาสองทางครับคือ
1. ในกรณีใช้ RAD ก็ง่าย หรือถ้าไม่ใช้ RAD ก็ต้องแก้ไข
ค่าของ web.xml เพื่อทำการ create Filter class ขึ้นมาครับ
โดยถ้าเป็น RAD ก็ไปที่ web.xml แล้ว click ขวา
หลังจากนั้นเลือกให้เป็นด้วยตัว Editor ของมันครับ
แล้วมองหา Tab ที่เขียนว่า Filters ครับ แล้วเลือก Add เพื่อสร้าง
Filter ขึ้นมาครับแล้วตั้งชื่อ Filter class ตามใจชอบครับ
หลังจากนั้นกด Next แล้วระบุว่าจะให้ Filter class ที่ได้นี้
generate ลงไปใน folder อะไร มี package ชื่ออะไร
และหรือ inherit มาจาก class ไหนด้วย จากนั้นก็ Finish ครับ
สุดท้ายเมื่อมาถึง Add Filter Mapping To Servlet
ก็ให้เลย Dispatcher Type เป็น Request ครับ เพื่อให้
เราสามารถ Filter Request message ออกมาได้

package filters;

import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;

public class MyFilter implements Filter {

public MyFilter() {
super();
}

public void init(FilterConfig arg0) throws ServletException {}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("Remote Address: "+request.getRemoteAddr());
chain.doFilter(request, response);
}

public void destroy() {}

}


Filter class ที่ได้ก็จะออกมาประมาณนี้ครับ เราสามารถเอาค่า Request มาใช้งานได้
ใน doFilter ครับ

2. คือเราไม่ต้องใช้ตัวช่วยครับ โดยให้เรา implement javax.xml.rpc.server.ServiceLifecycle
ให้กับ class ที่เราใช้ทำเป็น web service ครับ โดย interface ServiceLifecycle นี้
จะบังคับให้เรา override 2 method คือ init และ destroy ครับ และเราสามารถ get Request ได้ผ่าน
ทาง ServletEndpointContext ดังนี้ครับ

public class MyService implements javax.xml.rpc.server.ServiceLifecycle {

private javax.xml.rpc.server.ServletEndpointContext ctx;
public MyService(){
}

public void init(Object arg0) throws ServiceException {
ctx=(javax.xml.rpc.server.ServletEndpointContext)arg0;
}

public void destroy(){

}

public java.lang.String getRemoteAddr() throws java.rmi.RemoteException {
javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest)ctx.getMessageContext().getProperty(
com.ibm.ws.webservices.engine.transport.http.HTTPConstants.MC_HTTP_SERVLETREQUEST);
return = request.getRemoteAddr();
}

}


จาก code ข้างบน method getRemoteAddr() คือตัวอย่างการเอา Request มาใช้งานเพื่อหาค่า ip address ของ client ครับ

Sunday, September 21, 2008

IBM Websphere MQ process message immediate with C#

ในการใช้งาน IBM Websphere MQ นั้นบ่อยครั้งที่จำเป็นจะต้องประมวลผล message ที่เข้ามาใน Queue ทันที
การ polling เพื่อตรวจสอบว่ามี message เข้ามาใน Queue แล้วหรือไม่นั้นคงไม่ใช้ทางออกที่ดีอย่างแน่นอน
การทำงานแบบ event-driven น่าจะเหมาะสมกว่าสำหรับงานแบบนี้

IBM Webphere MQ เองได้มี Trigger ไว้รองรับการทำงานแบบนี้ แต่ในความเป็นจริงแล้วการใช้งาน Trigger
นั้นค่อนข้างยุ่งยาก และไม่สะดวกในนำไปใช้งาน เพราะเราจำเป็นที่จะต้องสร้าง Initial Queue และ Process
และกำหนดค่าต่างๆอีกมากมายให้กับ Queue ที่เราต้องการจะใช้งาน Trigger อีกทั้ง Trigger จะไม่ทำงานได้จนกว่า
เราจะรันคำสั่ง runmqtrm เพื่อ monitor mq's trigger ที่เราต้องการ

ทางเลือกง่ายๆอีกอย่างทางที่สามารถทำได้คือเขียนโปรแกรมให้ application ของเราหยุดจนกว่าจะมี message เข้ามาใน queue
แล้วจึงทำงานต่อไป



public class MQMessageListener
{

public static MQMessage Listen(string qmName, string queueName)
{
/** MQOO_INPUT_AS_Q_DEF -- open queue to get message using queue-define default.
* MQOO_FAIL_IF_QUIESCING -- access fail if queue manange is quiescing. **/
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING;
MQQueueManager mqManager = new MQQueueManager(qmName);
MQQueue queue = mqManager.AccessQueue(queueName,openOptions);

/** MQGMO_FAIL_IF_QUIESCING -- get message fail if queue manager is quiescing.
* MQGMO_WAIT -- waits for suitable message to arrive.
* MQWI_UNLIMITED -- unlimited wait interval. **/
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.Options = MQC.MQGMO_FAIL_IF_QUIESCING | MQC.MQGMO_WAIT;
gmo.WaitInterval = MQC.MQWI_UNLIMITED;
MQMessage message = new MQMessage();
//wait for message
queue.Get(message, gmo);
queue.Close();

//release resource.
mqManager = null;
queue = null;
gmo = null;
System.GC.Collect();

return message;
}

}





class Program
{
static void Main(string[] args)
{
Console.WriteLine("==START==");
String message = null;
do{
Console.WriteLine("Waiting...");
MQMessage mqMessage = MQMessageListener.Listen("QUEUE.MANAGER", "LOC.QUEUE");
message = mqMessage.ReadString(mqMessage.MessageLength);
Console.WriteLine("\tMessage: " + message);
}while(message != "BYE");
Console.WriteLine("==END==");
}
}



Saturday, September 13, 2008

First time with JACL scripts

เนื่องจากใช้งาน IBM Websphere แบบมวยวัดอยู่เรื่อย
(เพราะไม่เคยได้ Train อะไรกับเค้าสักที) เราก็ต้องหาเรื่อง
เล่นโน่นนี่ไปเรื่อย วันนี้อยากเล่น wsadmin ครับ
แต่เห็นมันมีการนำ JACL และ Jython มาใช้งานด้วย
เลยเลือกที่จะเรียนรู้ JACL ก่อนดีกว่าอิอิ

JACL ถ้ารู้มาไม่ผิดมันก็ย่อมาจาก Java Command Langauge
ก็ไปดูรายละเอียดเพิ่มเติมได้ที่
http://tcljava.sourceforge.net/docs/website/index.html

วิธีเริ่มง่ายๆก็ไป download มาก่อนครับที่
http://tcljava.sourceforge.net/docs/website/download.html
ครับ เอาที่เป็นตัวที่เขียนว่า jaclBinary น่ะครับ

ต่อมาก็ extract ครับ จะเห็น Redme.txt แล้วก็ folder bin กับ lib
เข้าไปใน lib ครับ copy jar files ทุกตัวไปใส่ไว้ที่ jre\lib\ext ของ java

จากนั้นก็เข้าไปดูใน folder bin บ้างครับ จะเห็น batch files สำหรับ windows
และ shell files สำหรับ Unix ลองเปิด jaclsh.bat ขึ้นมาด้วย editor มาดูนะครับ
จะเห็นว่ามันมีการ set Environment โน่นนี่ของมันนะครับ ก็ดูก่อนเลยว่า
มันอ้าง java path ถูกต้องตามในเครื่องของเรารึป่าว
(batch file มันเขียนได้อ่านยากไปหน่อย)

แก้เสร็จแล้วก็ double click เลยครับ
จะเห็นหน้าจอ Terminal เปิดขึ้นมาหนึ่งจอ
พร้อมกับมีเครื่องหมาย prompt
%
รออยู่ครับ

อย่ารอช้าทำให้มัน print Hello,world ก่อนเลยครับ
จะได้เหมือนว่าเราได้เริ่มเรียน JACL :D

%put stdout{Hello,world!}
=> Hello,world!

แบบนี้ครับ

Websphere Application Server 6.0 -- Create New Profile through commands

ในที่นี้จะสร้าง profile ชื่อ NewProfile

cd WAS_HOME
cd bin
wasprofile -create -profileName NewProfile
-profilePath "WAS_HOME\profiles\NewProfile"
-templatePath "WAS_HOME\profileTemplates\default"
-nodeName NewProfile
-cellName NewProfile
-hostName localhost

Syntax

# ./wasprofile.bat -create
-profileName profile_name
-profilePath fully_qualified_profile_path
-templatePath template_path
-nodeName node_name
[-cellName cell_name]
-hostName host_name
[-isDefault]
[-startingPort starting_port | -portsFile file_path]
[-winserviceCheck true | false]
[-winserviceAccountType specified_user | localsystem]
[-winserviceUserName your_user_name]
[-winservicePassword your_password]
[-winserviceStartupType manual | automatic | disabled]
[-debug]


ตัวอย่าง portdef.props

WC_defaulthost=9080
WC_adminhost=9060
WC_defaulthost_secure=9443
WC_adminhost_secure=9043
BOOTSTRAP_ADDRESS=2809
SOAP_CONNECTOR_ADDRESS=8880
SAS_SSL_SERVERAUTH_LISTENER_ADDRESS=9401
CSIV2_SSL_SERVERAUTH_LISTENER_ADDRESS=9403
CSIV2_SSL_MUTUALAUTH_LISTENER_ADDRESS=9402
ORB_LISTENER_ADDRESS=9100
DCS_UNICAST_ADDRESS=9353
SIB_ENDPOINT_ADDRESS=7276
SIB_ENDPOINT_SECURE_ADDRESS=7286
SIB_MQ_ENDPOINT_ADDRESS=5558
SIB_MQ_ENDPOINT_SECURE_ADDRESS=5578



Ref: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/tpro_removeprofile.html