ข้ามไปที่เนื้อหาหลัก

[ ServiceMix ] File, JMS, Bean Tutorial

ServiceMix Tutorial

SM-File, SM-JMS, SM-Bean

--------------------------------------------------------------------------------------------------------
File --> JMS Msg CH --> Bean:SimpleTransformBean.java --> JMS Msg CH --> File in other place


Installation

1. download apache-servicemix-3.3.tar.gz, extract into ESB/
2. download servicemix-example-1.zip
or you can get it from here



3. Create a directory ESB/libraries, place the JAR files ant-contrib.jar, bcel.jar, jibx-bind.jar, and jibx-run.jar, in that directory.

- JiBX is a library for Java objects --> XML, XML --> Java objects
We use JiBX to transform Java Obj. to XML to send to NMR. ( NMR only accept XML )

- Spring component framework implementations MVC, DAO, and other
important patterns. We use it for configuring POJOs (SM-Beans)
using Dependency Injection (plug sys. capabilities into biz logic component).

Basic lv. of dependency, C program making sys call. Your program depends on OS.
POSIX -- make it independent on OS.

App -> Abstract API
--> subclass for UNIX
--> subclass for Windows

App talk to Abstract API, and with some XML config., we can inject subclass to correct OS.

and Inversion of Control (your component just implement callbacks containing biz/app logic)
you call sys., sys. will call u.
Only write biz logic, no need for interaction SW.

Start ServiceMix

1. Turn off multicast feature before you start ServiceMix, otherwise our ActiveMQ broker will waste time at startup trying to make remote connections to other ServiceMix in a network.

Multicast feature allows different ServiceMix instances' ActiveMQ (JMS) brokers to discover and commicate with each other.

edit conf/activemq.xml.

Change from

<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
</amq:transportConnectors>
<amq:networkConnectors>
<amq:networkConnector uri="multicast://default"/>
</amq:networkConnectors>

to
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:61616"/>
</amq:transportConnectors>
<amq:networkConnectors>
</amq:networkConnectors>


2. run ESB/apache-servicemix-3.3/bin/servicemix

Start new Project

1. Start Eclipse with ESB/Workspace as your workspace. Create Java project osesb-example1
2. Add external JARs ( Properties -> Java build path -> Libraries ) from the directory ESB/apache-servicemix-3.3/lib
  • servicemix-core-3.3.jar
  • servicemix-utils-1.0.0.jar
  • commons-logging-1.1.jar
  • org.apache.servicemix.specs.jbi-api-1.0-1.1.0.jar
and 1 external JAR from the ESB/libraries/ directory
  • jibx-run.jar
3. Create class Person.java and SimpleTransformerBean.java in the osesb.example1 package

Person.java

package osesb.example1;

public class Person {
private String customerNumber;
private String firstName;
private String lastName;
private String street;
private String city;
private String state;
private String zip;
private String phone;

// add getter and setter here.
}

SimpleTransformerBean.java
package osesb.example1;
import javax.annotation.Resource;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.xml.namespace.QName;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.servicemix.jbi.listener.MessageExchangeListener;

import osesb.util.JiBXUtil;

// implements JBI's MessageExchangeListener interface, which allows it to receive XML messages from normalized message router.
public class SimpleTransformerBean implements MessageExchangeListener {

private static Log log = LogFactory.getLog(SimpleTransformerBean.class);

@Resource
private DeliveryChannel channel;

@Resource
private ComponentContext compContext;

public void onMessageExchange(MessageExchange exchange)
throws MessagingException {
try {
if (exchange.getStatus() != ExchangeStatus.ACTIVE)
return;
// When receiveing message, unmarshals XML message text using JiBX.
// assuming it represents a Person object
// receive "in-only" message ( because JMS Channel that connect to SM-bean:SimpleTransformBean.java is unidirectional )
Person person = (Person) JiBXUtil.unmarshalDocument(exchange.getMessage("in").getContent(), Person.class);
log.info("received person " + person.getFirstName() + " " + person.getLastName());
// makes a simple change to the object, change Firstname to John.
person.setFirstName("John");
exchange.setStatus(ExchangeStatus.DONE);
channel.send(exchange);

ServiceEndpoint targetEndpoint = compContext.getEndpoint(new QName(
"http://osesb/example1/", "JMSProviderService"),
"outQueueWriter");
MessageExchange exch = channel.createExchangeFactory(targetEndpoint)
.createInOnlyExchange();
NormalizedMessage normalizedMsg = exch.createMessage();
// Uses JiBX to marshal the modified Person object back to XML
normalizedMsg.setContent(JiBXUtil.marshalDocument(person, "UTF-8"));
// create simple String and set as "in-only" message.
exch.setMessage(normalizedMsg, "in");
// sends a message to the second JMS producer's service endpoint.
channel.send(exch);
} catch (Exception e) {
log.error("JBI bean exception", e);
throw new MessagingException("Error transforming object to or from XML");
}
}
}

JiBXUtil.java in package osesb.util
package osesb.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.jibx.runtime.BindingDirectory;
import org.jibx.runtime.IMarshallingContext;
import org.jibx.runtime.IUnmarshallingContext;
import org.jibx.runtime.JiBXException;
import org.w3c.dom.Node;

public class JiBXUtil {
public static Object unmarshalDocument(Node node, Class targetClass) throws JiBXException {
return unmarshalDocument(new DOMSource(node), targetClass);
}

public static Object unmarshalDocument(Source source, Class targetClass) throws JiBXException {
Object result = null;
try {
IUnmarshallingContext ctx = BindingDirectory.getFactory(
targetClass).createUnmarshallingContext();
result = ctx.unmarshalDocument(new StringReader(toString(source)));
} catch (Exception e) {
throw new JiBXException("Error unmarshalling XML to Object", e);
}
return result;
}

public static Source marshalDocument(Object src, String encoding)
throws JiBXException {
Source result = null;
try {
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
IMarshallingContext ctx = BindingDirectory.getFactory(src.getClass())
.createMarshallingContext();
ctx.marshalDocument(src, "UTF-8", null, bOut);
result = new StreamSource(new ByteArrayInputStream(bOut.toByteArray()));
} catch (Exception e) {
throw new JiBXException("Error marshalling XML to Object",e);
}
return result;
}

private static String toString(Source source) throws TransformerException {
TransformerFactory tf = TransformerFactory.newInstance();
StringWriter sw = new StringWriter();
Transformer trans = tf.newTransformer();
trans.transform(source, new StreamResult(sw));
String result = sw.toString();
System.out.println("result " + result);
return result;
}
}
4. Create a new folder resources/ at the project's top level
copy all of the XML configuration files and the directories file/, jms/, and bean/ there.

file/xbean.xml
<beans xmlns="http://xbean.org/schemas/spring/1.0"
xmlns:file="http://servicemix.apache.org/file/1.0"
xmlns:esb="http://osesb/example1/">

<!-- dumps any messages it gets to the directory "example1/out"-->
<file:sender service="esb:fileSender"
endpoint="simpleFromJMSSender"
directory="example1/out">
<!-- after deploy it will create directory /media/disk/AIT/SoftwareArchitecture/ESB/apache-servicemix-3.3/example1/out -->
</file:sender>

<!-- If new file appears in directory, do something -->
<!-- specifies a file system poller that watches
the directory "example1/in/" for new files and forwards them to a JMS service endpoint.-->
<file:poller service="esb:filePoller"
endpoint="simpleToJMSPoller"
targetService="esb:JMSProviderService"
targetEndpoint="inQueueWriter"
file="example1/in"
period="2000">
<!-- after deploy it will create directory /media/disk/AIT/SoftwareArchitecture/ESB/apache-servicemix-3.3/example1/in -->
</file:poller>
</beans>
jms/xbean.xml
<beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
xmlns:esb="http://osesb/example1/">
<!-- 1st consumer registers for messages on "inQueue" and forwards to our ServiceMix custom Bean.-->
<jms:consumer service="esb:JMSConsumerService"
endpoint="inQueueReader"
targetService="esb:beanService"
targetEndpoint="endpoint"
destinationName="inQueue"
connectionFactory="#connectionFactory" />
<!-- 2nd consumer registers for messages on "outQueue" and forwards to the File sender's service endpoint. -->
<jms:consumer service="esb:JMSConsumerService"
endpoint="outQueueReader"
targetService="esb:fileSender"
targetEndpoint="simpleFromJMSSender"
destinationName="outQueue"
connectionFactory="#connectionFactory"/>
<!-- 1st producer receives incoming files from the File system poller and adds them to the JMS queue "inQueue" -->
<jms:provider service="esb:JMSProviderService"
endpoint="inQueueWriter"
destinationName="inQueue"
connectionFactory="#connectionFactory" />
<!-- 2nd producer receives the output from the custom Bean and adds it to the JMS queue "outQueue" -->
<jms:provider service="esb:JMSProviderService"
endpoint="outQueueWriter"
destinationName="outQueue"
connectionFactory="#connectionFactory" />

<bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
</beans>
bean/xbean.xml
<beans xmlns:bean="http://servicemix.apache.org/bean/1.0"
xmlns:esb="http://osesb/example1/">

<classpath>
<location>.</location>
<location>jibx-run.jar</location>
</classpath>

<!--
<location>.</location>
<location>bcel.jar</location>
<location>jibx-bind.jar</location>
<location>jibx-extras.jar</location>
<location>jibx-run.jar</location>
<location>qdox-1.6.1.jar</location>
<location>stax-api.jar</location>
<location>wstx-asl.jar</location>
<location>xmlpull_1_1_4.jar</location>
<location>xpp3.jar</location>
</classpath>-->

<bean:endpoint service="esb:beanService"
endpoint="endpoint"
bean="#SimpleTransformer"/>

<bean id="SimpleTransformer"
class="osesb.example1.SimpleTransformerBean"/>
</beans>


5. Tell Eclipse to show the ant view ( Properties > Builder > new .. ) and drag example1-build.xml from the project explorer to the ant view. You should get a list of the ant tasks defined in the file.

we can double click at "deploy" to run ant script.
It will copy to zip file and build jar file.

You can see result either on eclipse or in a serviceMix console in a command line as well.

This could fail if you have different version of jar file, or a resource location in example1-build.xml is not in a right place.

example1-build.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- This ant build file is based on the example in Chapter 3 of Open Source ESBs in Action -->
<project name="ServiceMix Example 1" basedir="." default="deploy" xmlns:c="urn:contrib-ant">

<property name="classes" value="../bin" />
<property name="libraries" value="../../../libraries" />
<property name="work" location="../work" />
<property name="src" value="../src" />
<property name="src-generated" value="../src-generated" />
<property name="servicemix.home" value="../../../apache-servicemix-3.3" />

<!-- ant-contrib tasks are needed by the servicemix assembly and deployment tasks -->
<taskdef resource="net/sf/antcontrib/antlib.xml" uri="urn:contrib-ant">
<classpath>
<pathelement location="${libraries}/ant-contrib.jar" />
</classpath>
</taskdef>

<!-- JiBX binding compiler task definition -->
<taskdef name="bind" classname="org.jibx.binding.ant.CompileTask">
<classpath>
<pathelement location="${libraries}/jibx-bind.jar" />
</classpath>
</taskdef>

<!-- Test target for JiBX compilation -->
<target name="jibx-compile">
<!-- verbose="true" to show error -->
<bind verbose="true" load="true" binding="mapping.xml">
<classpath>
<pathelement path="${classes}" />
<pathelement location="${libraries}/jibx-run.jar" />
</classpath>
</bind>
</target>

<!-- Compile, create the service units, assemble them into a SA, and deploy -->
<target name="deploy">

<!-- Create the file service unit -->
<antcall target="create-serviceunit">
<param name="service-dest-file" value="example1-file-su.zip" />
<param name="servicemix-conf" value="file/" />
</antcall>

<!-- Create the JMS service unit -->
<antcall target="create-serviceunit">
<param name="service-dest-file" value="example1-jms-su.zip" />
<param name="servicemix-conf" value="jms/" />
</antcall>

<!-- Create the Spring bean service unit -->
<antcall target="create-serviceunit">
<param name="service-dest-file" value="example1-bean-su.zip" />
<param name="servicemix-conf" value="bean/" />
<param name="include-resource-dir" value="bean/resources/" />
<param name="include-classes" value="osesb/example1/**/*"/>
<param name="jibx-mapping" value="mapping.xml"/>
</antcall>

<!-- Assemble and deploy to the JBI container -->
<echo message="Create and deploy the service assembly" />
<antcall target="create-and-deploy-serviceassembly-from-serviceunits">
<param name="jbi-conf" value="." />
<param name="sm-dest-file" value="example1-sa.zip" />
<param name="service-units" value="example1-*-su.zip" />
</antcall>
</target>

<!--
Call this target with the following properties to create a serviceunit

service-dest-file: name of the service zip (must be equal to name in jbi.xml
servicemix-conf: location where the servicemix.xml or xbean file can be found
include-classes: class filter to include in the service file
resources: resources to include
-->

<target name="create-serviceunit">
<!-- some general cleanup of old files and create new directories -->
<echo message="Preparing service unit creation" />
<delete failonerror="false" file="${work}/${service-dest-file}" />
<delete failonerror="false" dir="${work}/${service-dest-file}.work" />
<mkdir dir="${work}/${service-dest-file}.work" />
<mkdir dir="${work}/${service-dest-file}.work/META-INF" />

<!--do we have a resource directory -->
<c:if>
<isset property="include-resource-dir" />
<c:then>
<echo message="Resource directory specified, including in serviceunit" />
<copy todir="${work}/${service-dest-file}.work">
<fileset dir="${include-resource-dir}">
<include name="**/*" />
</fileset>
</copy>
</c:then>
<c:else>
<echo message="No resource directory specified" />
</c:else>
</c:if>

<!--do we have a classes to copy directory -->
<c:if>
<isset property="include-classes" />
<c:then>
<echo message="Including classes into Service unit" />
<c:if>
<isset property="include-classes-archive" />
<c:then>
<echo message="compiling classes" />
<javac srcdir="${src}" destdir="${classes}">
<include name="${include-classes}" />
<include name="esb/util/framework/*" />
<classpath refid="compile.path" />
</javac>

<echo message="archiving classes to ${include-classes-archive}" />
<jar destfile="${work}/${service-dest-file}.work/${include-classes-archive}">
<fileset dir="${classes}">
<include name="${include-classes}" />
<include name="esb/util/framework/*" />
</fileset>
</jar>
</c:then>
<c:else>
<echo message="compiling classes from ${include-classes}" />
<javac srcdir="${src}" destdir="${classes}">
<include name="${include-classes}" />
<include name="esb/util/framework/*" />
<classpath refid="compile.path" />
</javac>
<copy todir="${work}/${service-dest-file}.work">
<fileset dir="${classes}">
<include name="${include-classes}" />
<include name="osesb/util/*" />
</fileset>
<fileset dir="${src}">
<include name="${include-classes}"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
</c:else>
</c:if>
</c:then>
<c:else>
<echo message="No classes need to be included" />
</c:else>
</c:if>

<c:if>
<isset property="jibx-mapping" />
<c:then>
<!-- Run JiBX binding compiler -->
<bind verbose="false" load="true" binding="${jibx-mapping}">
<classpath>
<pathelement path="${classes}" />
</classpath>
</bind>
<copy todir="${work}/${service-dest-file}.work" overwrite="true">
<fileset dir="${classes}">
<include name="${include-classes}" />
</fileset>
</copy>
</c:then>
</c:if>
<c:if>
<isset property="jibx-mapping1" />
<c:then>
<bind verbose="false" load="true">
<classpath>
<pathelement path="${classes}" />
<pathelement location="${libraries}/jibx-run.jar" />
</classpath>
<bindingfileset dir="${jibx-directory}">
<include name="${jibx-mapping1}" />
<include name="${jibx-mapping2}" />
<include name="${jibx-mapping3}" />
</bindingfileset>
</bind>
<copy todir="${work}/${service-dest-file}.work" overwrite="true">
<fileset dir="${classes}">
<include name="${include-classes}" />
</fileset>
</copy>
</c:then>
</c:if>
<c:if>
<isset property="generated-classes-filter" />
<c:then>
<echo message="compiling classes from ${generated-classes-filter}" />
<javac srcdir="${src-generated}" destdir="${classes}">
<include name="${generated-classes-filter}" />
<include name="osesb/util/*" />
<classpath refid="compile.path" />
</javac>
<copy todir="${work}/${service-dest-file}.work">
<fileset dir="${classes}">
<include name="${generated-classes-filter}" />
<include name="osesb/util/*" />
</fileset>
</copy>
</c:then>
<c:else>
<echo message="No generated classes need to be included" />
</c:else>
</c:if>

<c:if>
<isset property="servicemix-conf" />
<c:then>
<echo message="Try to copy servicemix specific files, warnings can be ignored" />
<copy todir="${work}/${service-dest-file}.work" file="${servicemix-conf}/servicemix.xml" failonerror="false" />
<copy todir="${work}/${service-dest-file}.work" file="${servicemix-conf}/xbean.xml" failonerror="false" />
</c:then>
</c:if>

<c:if>
<isset property="jbi-conf" />
<c:then>
<echo message="Try to copy JBI specific files, warnings can be ignored" />
<copy todir="${work}/${service-dest-file}.work/META-INF" file="${jbi-conf}" failonerror="false" />
</c:then>
</c:if>

<jar destfile="${work}/${service-dest-file}">
<fileset dir="${work}/${service-dest-file}.work" />
</jar>
</target>

<target name="create-and-deploy-serviceassembly-from-serviceunits">
<delete failonerror="false" file="${work}/${sm-dest-file}" />
<mkdir dir="${work}/META-INF" />
<copy file="${jbi-conf}/jbi.xml" tofile="${work}/META-INF/jbi.xml" overwrite="true" />
<jar destfile="${work}/${sm-dest-file}">
<fileset dir="${work}">
<include name="META-INF/**" />
<include name="${service-units}" />
</fileset>
</jar>
<copy file="${work}/${sm-dest-file}" tofile="${servicemix.home}/hotdeploy/${sm-dest-file}" overwrite="true" />
</target>

</project>

6. Bind how the fields of a Person object are related to XML elements.
The specification is compiled into Java code that implements the marshaling and unmarshaling transformations used in the bean component.

mapping.xml
<binding>
<mapping name="person" class="osesb.example1.Person"> <!-- map person.xml in classpath into Person class -->
<value name="customer-number" field="customerNumber" />
<value name="first-name" field="firstName" />
<value name="last-name" field="lastName" />
<value name="street" field="street" />
<value name="city" field="city" />
<value name="state" field="state" />
<value name="zip" field="zip" />
<value name="phone" field="phone" />
</mapping>
</binding>


7. Assembled 3 services unit into a ServiceMix service assembly by specify specification in jbi.xml configuration file. Finally, the complete archive is copied to ServiceMix's hotdeploy/ directory, where you should be able to see in the ServiceMix console the unpacking and registering of service units.

jbi.xml
<?xml version="1.0" encoding="UTF-8"?>
<jbi xmlns="http://java.sun.com/xml/ns/jbi" version="1.0">
<service-assembly>
<identification>
<name>Example1-JMSBindingService</name>
<description>
Example showing the jms binding component
</description>
</identification>
<service-unit>
<identification>
<name>SU-BEAN</name>
<description>
The bean component
</description>
</identification>
<target>
<artifacts-zip>example1-bean-su.zip</artifacts-zip>
<component-name>servicemix-bean</component-name>
</target>
</service-unit>
<service-unit>
<identification>
<name>SU-JMS-Queue</name>
<description>
A number of ftp pollers and senders
</description>
</identification>
<target>
<artifacts-zip>example1-jms-su.zip</artifacts-zip>
<component-name>servicemix-jms</component-name>
</target>
</service-unit>
<service-unit>
<identification>
<name>SU-JMS-File</name>
<description>
A number of file pollers and senders files
</description>
</identification>
<target>
<artifacts-zip>example1-file-su.zip</artifacts-zip>
<component-name>servicemix-file</component-name>
</target>
</service-unit>
</service-assembly>
</jbi>


8. Finally! To test our service, copy person.xml to ESB/apache-servicemix-3.3/example1/in, watch the log, and see if your transformed person is properly deposited in ESB/apache-servicemix-3.3/example1/in.

<person>
<customer-number>123</customer-number>
<first-name>James</first-name>
<last-name>Doe</last-name>
<street>1st Street</street>
<city>New York</city>
<state>NY</state>
<zip>567898</zip>
<phone>1768768768</phone>
</person>


ref : mdailey

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจก คัมภีร์ ไบเบิล ภาษาไทย รวมเล่ม ( download thai bible pdf version )

แปลกใจว่า ทำไม ไม่มี ebook พระคัมภีร์ ที่สามารถ print อ่านได้เลย เลยเอา พระคัมภีร์ภาษาไทย ฉบับ KJV ( Thai Bible King James Version ) มาเย็บรวมเล่ม สร้างไว้เฉพาะ พันธสัญญาเดิม ( Old Testament ) ดาวน์โหลดได้จาก Thai Bible ย้ายแล้วจ้า ย้ายมา อันนี้ จะยัดลง iPhone หรือ iPod Touch ก็ได้ เพราะว่า มันอ่าน pdf ได้อยู่แล้ว จาก iBook ง่าย และ ฟรี ไม่ต้อง crack โปรแกรมให้ผิดศีล ถ้าไม่ชอบรูปแบบยังไง checkout มาแล้ว compile latex เองได้เลย จัดรูปแบบสวยงามแล้ว commit กลับมา จักเป็นพระคุณยิ่ง NOTE: ถ้าท่านต้องการสนับสนุนเรา ท่านสามารถดาวน์โหลด App ของเราได้ทางมือถือ Android ที่ App Words of God เนื้อหาจะเป็นเนื้อหาเดียวกันกับที่แจกฟรีนี้  ซึ่งใน App ท่านสามารถศึกษาพระคัมภีร์ได้แบบ Offline ซึ่งสามารถใช้งานได้โดยไม่ต้องต่ออินเตอร์เน็ต ท่านสามารถพกไปที่ไหนก็ได้ นอกจากนี้ ใน App ท่านสามารถ Search เพื่อค้นหาพระคัมภีร์ได้ และ ใน App เราไม่ได้เก็บข้อมูลใดๆ ของท่าน (เช่น การติดตามว่าท่านอ่านหน้าไหน, การติดตามว่าท่านค้นหาอะไร)  เดิมทีเราเองทำไว้ให้ทุกท่านสามารถเข้าถึงได้ฟรีทางเว็ปไซท์  ที่นี

อยู่เหงาๆ เลาไปเที่ยว - เที่ยวเชียงรายด้วยตัวเอง โดยไม่มีรถ เช่ารถก็ไม่ได้เช่าน้ะจ้ะ นั่งรถสาธารณะล้วนๆแจร้ ตอนแรก : วางแผนเที่ยว

เชียงราย ม่วนใจ๋ ยอมรับเลยว่า หาข้อมูลค่อนข้างยาก กระทู้รีวิว ใน pantip ที่บอกไม่มีรถไป คือ ไม่มีรถส่วนตัวไป สุดท้ายก้อไปเช่ารถขับกันหมด สุดท้ายเลาก็ไปผจญภัยมาจนได้ นี่คือตอนแรกซีรี่ส์เชียงรายของเราน้ะจ้ะ  กล่าวถึงว่า จะไปไหนบ้าง และ วิธีเดินทางในตัวเมืองเชียงราย และ ออกนอกเมืองเชียงรายไปยังที่เที่ยวยังไง 0) ตั๋ว 0 บาท จริงๆ ทริปนี้จับพัดจับผลู ดันกด ตั๋ว 0 บาท ได้ของ VietJet ซึ่งเขาเพิ่งเปิดเส้นทางใหม่ กรุงเทพฯ-เชียงราย เลยมีโปรโมชั่นนี้ออกมา จริงๆ บอกว่า 0 บาท แต่มันมีค่าภาษีสนามบิน ค่าอื่นๆ อีก รวมแล้วไปกลับ 508 บาทน้ะจ้ะ ( ภาษีสนามบิน 100 THB, PMT Fee 77 THB, Admin Fee Domestic Thai 77 THB รวมสองขา 508 บาท รวม VAT เป็น 529.56 บาท ) เวลาค่อนข้างโอเคนะ มีคนเคยบอกว่า low cost เวลาไม่ค่อยโอเค แต่เลาว่าเวลานี่โอเคเลย ขาไป 06.30 สนามบินสุวรรณภูมิ - 07.55 สนามบินแม่ฟ้าหลวงเชียงราย ขากลับ 15.15 สนามบินแม่ฟ้าหลวงเชียงราย - 16.45 สนามบินสุวรรณภูมิ ขึ้นที่สนามบินสุวรรณภูมิ (BKK) จย้ะ ไม่ใช่สนามบินดอนเมือง มีคนบอกว่าให้สังเกตรหัสถ้า BKK คือ สนามบินสุวรรณภูมิ อย่าไปผิดสนามบ

สอบสัมภาษณ์ MBA คำถามและการเตรียมตัว

 * “แนะนำตนเอง” การแนะนำตนเองไม่ใช่แค่บอกชื่อ-นามสกุล ตำแหน่งงาน สถานที่ทำงาน หรือ ประวัติการศึกษาเท่านั้น ข้อมูลเหล่านี้ต้องพูดถึง แต่ไม่ใช่ประเด็นสำคัญ ส่วนที่สำคัญในการแนะนำตนเองก็คือต้องขายความเป็นตัวตนของเรา ความสามารถของเรา และ/หรือวัตถุประสงค์ในการเลือกเรียนหลักสูตรนี้  พยายามตอบคำถามให้สอดคล้องกับ MBA ไม่ต้องนาน ประมาณ 2–3 นาที เน้นเนื้อ ไม่เน้นน้ำ ซ้อมพูดเยอะๆ ถือว่าเป็น First Impression * ทำไมจึงเลือกสมัครเข้าเรียนหลักสูตรนี้  ทำไมถึงมาเรียน MBA ทำไมอยากเรียน MBA ทำไม อยากเรียนตอนนี้  * ทำไม ต้องเรียน MBA ที่นี่ -- ลองศึกษา Program ของมหาลัยที่จะไปดูน้าว่ามหาลัยมีอะไรเด่น * คิดว่าถ้าเรียน MBA จะมี Challenge อะไรบ้าง * สนใจโปรแกรมอะไรบ้าง * หลังเรียนจบอยากทำอะไร * ต้องการอะไรจากหลักสูตรนี้  เรียนแล้วคิดว่าจะได้อะไร เอาไปใช้อะไรในชีวิต * ทำไมไม่เรียนสาขาอื่น ถ้าอายุงานถึงเรียนอย่างอื่นได้ * ในองค์กรที่ทำงานอยู่สามารถเติบโตได้ถึงตำแหน่งไหน * Performance ปัจจุบันเป้นยังไง  * ดูดีอยู่แล้ว แล้วมาเรียน MBA ทำไม เพราะงานที่ทำอยู่ก็มีโกาสก้าวหน้าในสายอาชีพบริหารอยู่แล้ว * ไม่ได้เรียนม

อยู่เหงาๆ เราไปเที่ยว - ไหว้พระขอพร ศาลเจ้าแม่ทับทิม (อาม่า), เจริญกรุง, กรุงเทพ; 天后聖母廟, 石龙軍路, 曼谷, 泰国; Thap Thim Chinese Goddess Shrine, Chareon Krung 63 Road, Bangkok, Thailand

天后聖母廟, 石龙軍路, 曼谷, 泰国 ไหว้ศาลเจ้าแม่ทับทิม ขอให้การค้าเจริญรุ่งเรือง ตำนานเจ้าแม่ทับทิมเกิดที่ตำบลตุ้ยบ๊วย เขตบ่นเซียว เกาะไหหลำ มีผู้เฒ่าแซ่พัว เป็นผู้มีความซื่อสัตย์สุจริต ทำงานขยันขันแข็ง ครั้งหนึ่งแกออกไปหาปลา โดยผูกแหเป็นช้อนดักปลา เวลาผ่านไปแกยังหาปลาไม่ได้ คืนนั้นก็ประสบความล้มเหลว เมื่อช้อนแหขึ้นมาทีไรก้อมีแต่ท่อนไม้ ด้วยความโมโหแกเลยขว้างท่อนไม้นั้นออกไปให้ไกล แต่แล้วเมื่อช้อนแหขึ้นมาใหม่ก็ปรากฏท่อนไม้ท่อนเดิมอีก ต่อจากนั้นแกก็ขว้างท่อนไม้ขึ้นฝั่ง และแกก็ฉุก คิดว่าแปลกที่ท่อนไม้ธรรมดาจะสามารถลอยทวนน้ำได้ คงจะเป็นสิ่งวิเศษ และแกก็ได้นำท่อนไม้นั้นขึ้นฝั่ง และเพ่งมองท่อนไม้นั้นพร้อมกับอธิษฐานว่า หากท่อนไม้นี้มีความศักดิ์สิทธิ์ขอให้คืนนี้จับปลาได้มาก เมื่อพ้นจากความจนแล้ว เมื่อขึ้นฝั่งจะนำท่อนไม้นี้แกะสลักเป็นเทวรูปศักดิ์สิทธิและสักการะบูชาเช้าวันไม่ให้ขาด เมื่ออธิษฐานจบแกเอาท่อนไม้นั้นวางบนหัวเรือ ปรากฏว่าช้อนเพียงสองถึงสามครั้งก็ได้ปลาตัวโตเต็มเรือ จึงนำปลาขึ้นฝั่งวันนั้นปลาของแกขายได้ราคา เพราะชาวประมงคนอื่นจับได้น้อยแกจึงมีเงินจับจ่ายใช้สอย และทุกครั้งที่แกออกหาปลา

ส่งไปรษณีย์ทีละมากๆ ที่ช่องไปรษณีย์สำหรับธุรกิจ

  ถ้าเราส่งไปรษณีย์ทีละ 10 กล่องขึ้นไป สามารถไปส่งโดยใช้ช่องทางธุรกิจได้ โดยต้องกรอกใบรับฝากรวม ( Receipt for bulk Posting ) เป็นลิสต์รายการให้เขาไปด้วย โดยกรอกพัสดุแต่ละรายการ และ ไปยื่นให้เขาพร้อมกับพัสดุที่จะส่ง วิธีกรอก คือ ให้กรอกพัสดุแบบเดียวกันไว้แผ่นเดียวกัน  เช่น พัสดุ10 กล่อง กล่องขนาดเท่ากัน น้ำหนักเท่ากันหมด กรอกไว้ 1 แผ่น ถ้าน้ำหนักต่างกัน ขนาดกล่องต่างกัน กรอกแยกแผ่นไว้ดีที่สุด ซึ่งใบนี้สามารถไปขอได้ที่ไปรษณีย์ฝ่ายธุรกิจ สามารถนำมาทำใส่ A4 ก็ได้ ขอบคุณคุณพี่ amarin.ch ที่ไปรษณีย์กลาง ( BANGKOK G.P.O. ) มากๆ นะครับ สำหรับคำแนะนำ ขอบคุณที่ช่วยคีย์ให้ทีละรายการสำหรับมือใหม่ที่ยังไม่รู้ว่ามีใบรับฝากรวมอย่างผมด้วยครับ คราวหน้าผมจะทำใบรับฝากรวมไปครับ

OOTOYA อร่อย ^^

เมนูอาหาร กดที่รูปเพื่อดูรูปใหญ่ อร่อยๆ ^^ ตอนแรกเล็ง เมนูพิเศษของโอโตยะ ไว้ แต่สั่ง สลัดไก่ย่างถ่าน ซอสเบซิล ไป ผักเยอะมากแต่อร่อยดี ยังได้แอบชิมของคนอื่นด้วย ปลาชิมาฮอกเกะย่างถ่าน ตัวเบ้อเริ่มเลยอ่ะ รสคล้ายๆปลาช่อน แล้วก็ของหวาน ไอศกรีมในน้ำเต้าหู้ ที่พี่กุ๋ยบอกว่า เคยเข้ามาที่ร้านแล้วสั่ง อย่างเดียวมาแล้ว ถั่วแดงเขาทำได้อร่อยมาก แต่ดันไม่มีขายถั่วแดงต้มอ่ะดิ เมนูของหวาน กดที่รูปเพื่อดูรูปใหญ่ ถ้าสั่งเป็นชุด ข้าวเติมฟรี เติมไป 2 ชาม น้ำชาเขียว refill ฟรี ชาเขียวที่นี่เขาใส่งาด้วย เหมือนที่เคยกินที่ร้าน อากะ (AKA) ที่ชั้น 7 centralworld บางคนเขาไม่ชอบกัน แต่เราเฉยๆนะ ก็อร่อยดี ข้อเสีย คือ เสริฟ ช้า ไม่ควรกินไปตอนเร่งรีบ แต่ เล็งไว้ละ ไว้จะไปกินใหม่ สาขา และ เบอร์ติดต่อ กดที่รูปเพื่อดูรูปใหญ่

วิธีการไป อย. กระทรวงสาธารณสุขจากหัวลำโพง

ทางไป : รถไฟฟ้า MRT หัวลำโพง ไปลงที่ สถานี กระทรวงสาธารณสุข  ถ้ากดที่ตู้ต้องเปลี่ยนไปหน้าจอสายสีม่วง สนน ราคา 48 53 บาท ต่อมอไซด์ ถ้าไป อย. 20 บาท จากหน้าทางเข้า  ถ้าฝนตกแนะนำให้โบกแท็กซี่จากข้างหน้า ข้างในหาแท็กซี่ยากมาก ถ้าจะเดินประมาณ 2.4 km ให้ระวังหลงเข้าไปรพ ศรีธัญญา รพ ศรีธัญญาพื้นที่ข้างในใหญ่มาก และเหมือนจะล้อมด้วยคลอง เหมือนจะมีทางออกแค่ทางที่เข้าไปนั่นแหละ ทางกลับ : รถเมล์ 97 จาก อย. ตรงข้ามประกันสังคม ทางที่ 1 : ถ้าจะใกล้ลงหน้าปากซอยขึ้นสายสีม่วงที่สถานีกระทรวงสาธารณสุขที่เดิม ทางที่ 2 : ผ่าน ท่าน้ำนนท์​ กลับเรือได้ ทางที่ 3 : ผ่านหน้าพระจอมพระนครเหนือด้วยนะ ผ่าน สถานีรถไฟฟ้า MRT บางซื่อ  ( จาก อย. ไป MRT บางซื่อ 17 บาท,  จาก MRT บางซื่อ ไป MRT หัวลำโพง 44 บาท นั่งกลับได้ 2 ทาง ทางหัวลำโพง กับ ไปเปลี่ยนที่ท่าพระ ไม่รู้ว่าทางไหนเร็วกว่ากัน ) ทางที่ 4 :  ผ่าน สะพานควาย  ทางที่ 5 :  นั่งถึงอนุสาวรีย์ชัยสมรภูมิได้ ค่ารถเมล์ 21 บาท ค่ารถไฟฟ้าไป BTS สะพานตากสิน 47 บาท 

เทคนิคคิดเลขเร็วโดยใช้ วิธีคิด แบบ เวทคณิต ( Vedic Mathematics example )

จากที่สงสัยเรื่อง ลูกคิด ของ จินตคณิต ที่ลองไปค้นดู ปรากฎว่า เจอ เวทคณิต ซึ่งเขาบอกว่า อยู่ในคัมภีร์พระเวท ลองอ่านดูแล้ว รู้สึกว่าฝึกสมอง ก็ทำให้คิดเลขเร็วดี เลยสรุปมาให้ ตามนี้ Tutorial 1 การลบเลข ALL FROM 9 AND THE LAST FROM 10 ทุกตัวลบจาก 9 และตัวสุดท้ายลบจาก 10 เช่น 1000 - 357 = 643 10,000 - 1,049 = 8951 ถ้า 1,000 - 83 ให้มองว่ามี 0 อยู่ข้างหน้า เป็น 1,000 - 083 = 917 ฝึกบ่อยๆ ก็คล่อง แล้วก็ไม่ต้องใช้เครื่องคิดเลขด้วย ลองทำดูสิ 1) 1000 - 777 = 2) 1000 - 283 = 3) 1000 - 505 = 4) 10,000 - 2345 = 5) 10,000 - 9876 = 6) 10,000 - 1011 = 7) 100 - 57 = 8) 1000 - 57 = 9) 10,000 - 321 = 10) 10,000 - 38 = 3,000 - 467 ก็ทำเหมือนกัน โดยลบตัวแรกสุดของ 3,000 ไป 1 จากนั้นก็ทำเหมือนเดิม จะได้ว่า 3,000 - 467 = 2,533 Tutorial 2 VERTICALLY AND CROSSWISE สำหรับตัวเลขที่น้อยกว่าฐานนิดหน่อย ลอง 88x98 88 น้อยกว่า 100 อยู่ 12 98 น้อยกว่า 100 อยู่ 2 12x2 = 24 88-2 หรือ 98-12 ได้ 86 ดังนั้นตอบ 8,624 ดูอีกตัวอย่าง หรือ ลองทำนี่ดู 1) 87 x 98 = 2) 88 x

ถังดับเพลิง ตรวจสภาพยังไง, ถังดับเพลิงแบบไหน ดูยังไง

ถังดับเพลิงแบบไหน ดูยังไง * ผงเคมีแห้ง Dry Chemical Powder ภาพจาก safetymanshop.com ผงเคมีแห้ง Dry Chemical Powder : ถังแดง  สามารถดับเพลิงประเภท A,B,C,D วิธีตรวจถังดับเพลิงแบบผงเคมีแห้ง * ดูที่เข็มมาตรวัด ถ้าสีเขียวคือโอเค ถ้าเข็มเอียงมาทางซ้ายในโซนสีแดง ต้องเติมแรงดัน * ให้คว่ำและฟังการไหลของผงเคมี ถ้าไม่มีการเคลื่อนไหว แสดงว่าสารเคมีหมดอายุจับกันเป็นก้อน * สายฉีด ตัวถัง ด้ามจับ มีแตกชำรุด อุดตันหรือไม่ ภาพจาก uandnsupply.safety * ฮาโลตรอน Halotron  ภาพจาก safetymanshop.com ฮาโลตรอน Halotron : ถังเขียวต้องดูอีกทีเพราะถังเขียวอาจใส่สารได้หลายแบบอาจไม่ใช่ฮาโลตรอน  ไม่ทิ้งคราบสกปรกไว้  สามารถดับเพลิงประเภท A,B,C * คาร์บอนไดออกไซด์ CO2 ภาพจาก safetymanshop.com คาร์บอนไดออกไซด์ CO2 : ถังแดงปากแตร  ไม่เหลือกากไว้  เหมาะกับ ตู้ไฟ ห้องคอม ห้องเซอร์เวอร์ ห้องเครื่องเสียง สามารถดับเพลิงประเภท A,B,C วิธีตรวจถังดับเพลิงแบบ CO2 ให้ชั่งน้ำหนักถังและเทียบน้ำหนักที่แจ้งไว้ในเสปคถังดับเพลิง * สเปรย์ สเปรย์ : สามารถดับเพลิงประเภท K เหมาะกับใช้ในครัว สูตรน้ำดีกว่าสเปรย์โฟม ไม่ควรเก็บไว้ในรถ เพราะอาจระเ

อยู่เหงาๆ เราไปเที่ยว - มูลนิธิเผยแผ่คุณธรรมเพื่อการสงเคราะห์ "เต็กก่า จีจินเกาะ" (Chee Chin Khor Moral Uplifting Societies)

เอนทรีนี้เป็นส่วนหนึ่งของ serie ท่องเที่ยว ดูบทความท่องเที่ยว อื่นๆ ของผม ได้ที่  ลิงก์นี้  นะครับ คำเตือน ! เอนทรีนี้ รูปเยอะมากกกก ควรปิดบิตก่อนดู alternative URL : http://tinyurl.com/cheeChinKhor เสาร์ก่อนไปเที่ยวมา ผ่างงงง . . . ดูรอบๆก่อนละกัน สุดๆ หยั่งกับไปเมืองจีน จริงๆ เจดีย์นี้ เห็นตอนแล่นเรือตรง แม่น้ำเจ้าพระยา ได้สักพักหนึ่งแล้วนะ บังเอิญเจอในเวป เลยแวะไปสักหน่อย สุดยอด ใกล้บ้านด้วยๆ อันนี้ต้นอะไรไม่รู้ แปลกดีๆ ต้นไม้นี้ เขาทำเป็นหน้า ไว้ที่กิ่งมันด้วย ดูใกล้ๆ มีความหมายว่าไงไม่รู้แหะ ริมน้ำๆ โว้วววว ศาลาริมน้ำ ไปดูในเจดีย์กันดีกว่าๆ พระมหาธาตุเจดีย์พระจอมธาตรีไทยจีนเฉลิม สมเด็จพระมหาสังฆราช สกลมหาสังฆปรินายก ถวายให้ ในหลวง ตอนเฉลิมพระชนมพรรษา 6 รอบ พระยิ้ม บันได ก็เป็นบันไดวนๆ ขึ้นไป ใต้บันไดเป็นภาพวาด แล้วก็มีบทกวี แต่ละชั้น ภาพวาดก็ไม่เหมือนกัน นี่ชั้นอื่นๆ เราไปวันเสาร์ ไม่ค่อยมีคนเท่าไหร่ เห็นเขาบอกว่า ปิด สี่โมง แล้วก็วันอาทิตย์