'분류 전체보기'에 해당되는 글 157건

  1. 2013.07.26 Flex Blazeds + Spring 3 연동시 Flex RemoteObject 설정
  2. 2013.07.26 IList to DataTable Convert Module
  3. 2013.07.26 mybatis dot net mapper 조건문 활용

Flex Blazeds + Spring 3 연동시 Flex RemoteObject 설정

|

Flex Remote Object 설정

    <fx:Declarations>
        <s:RemoteObject id="re" destination="ShmObj">
            <s:channelSet>
                <s:ChannelSet>
                    <s:AMFChannel uri="http://hostname/messagebroker/amf"/>
                </s:ChannelSet>
            </s:channelSet>
            <s:method name="getObject" fault="fltEvent(event)" result="rltEvent(event)">
                <s:arguments>
                    <Name>
                        {paramName}
                    </Name>
                </s:arguments>
            </s:method>
        </s:RemoteObject>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

tomcat + spring 3 + blazeds 연동 설정이 끝났을 경우 어노테이션 기반 코딩을 할 것이다.

Service 등록과 amf채널 설정이 끝났는데 Flex에서 값을 실제 Service 되는 곳에서 받아 오고 싶을 경우 위와 같이 채널을 지정해 버리면 된다.

그런데 이 경우 보안 문제로 Reslt 가 아닌 Fault를 뱉어 낼 것이다.

이 경우 crossdomain을 설정해 주면 되는데


호스팅이 되는 root에 crossdomain.xml을 등록해 줘야 된다.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
 <site-control permitted-cross-domain-policies="all"/>
 <allow-access-from domain="*"/>
</cross-domain-policy>


이렇게 하면 보안상에 문제가 되겠지만(?) 값을 확인해서 받아 볼 수 있다.

잘 돌아간다 판단 되면 Flex를 서버에서 돌아가는 형식으로 다시 전환후 배포해 보쟈!

문제가 되지 않느다 판단되면 그냥 계속 사용해도 문제 없겠다.


And

IList to DataTable Convert Module

|

using System.ComponentModel; using System.Data; public static DataTable toDataTable(this IList data, string tableName) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); foreach (PropertyDescriptor prop in props) { table.Columns.Add(prop.Name, prop.PropertyType); } object[] values = new object[props.Count]; foreach (T item in data) { for (int i = 0; i < values.Length; i++) { values[i] = props[i].GetValue(item); } table.Rows.Add(values); } table.TableName = tableName; return table; }


function type에 static 템플릿(<T>)이 들어 있기 때문에 일반 public class로 컴파일시 에러가 뜰 것이다.

이 경우 class 자체도 static으로 바꿔 주면 문제가 없겠다.


And

mybatis dot net mapper 조건문 활용

|
mybatis dot net 관련 레퍼런스 참조 http://ibatis.apache.org/docs/dotnet/datamapper/

mapper 작성시 xml을 사용 하게 되는데 mybatis 관련 인텔리센스가 작동하지 않을 것이다.
이에 대한 대처 방법은 mybatis dot net version을 다운 받아서 압축 해제시 안에 XML Schema file이 존재 할 것이다.
해당 file을 VS가 설치된 위치의 예를 들어 VS2010일 경우 "C:\Program Files\Microsoft Visual Studio 10.0\" 정도 될 것이다.
간단하게 VS_HOME이라 하겠다.
"VS_HOME\xml\Schemas\" 위치에 복사 해 준다.
그리고 VS를 실행 시킨후 인텔리센스가 작동하는지 확인한다.

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="dao" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ibatis.apache.org/mapping">
    <alias>
        <typeAlias alias="rsltCarryIn" type="dao.model.vo.RsltCarryInVo"/>
    </alias>
    <resultMaps>
        <resultMap id="rsltCarryInMap" class="rsltCarryIn">
            <result property="SumValue" column="SUM_VALUE"/>
            <result property="BrandCode" column="BRAND_CODE"/>
        </resultMap>
    </resultMaps>
    <statements>
        <select id="getRsltCarryIn" resultMap="rsltCarryInMap" parameterClass="System.Collections.Hashtable">
            SELECT SUM(INTEG_VALUE)SUM_VALUE, BRAND_CODE FROM RSLT_STOCK
            <dynamic prepend="WHERE">
                <isNotEmpty prepend="AND" property="WorkDate">
                    WORK_DATE = #WorkDate#
                </isNotEmpty>
                <isNotEmpty prepend="AND" property="YardCode">
                    YARD_CODE = #YardCode# AND INTEG_VALUE > 0
                </isNotEmpty>
            </dynamic>
            GROUP BY BRAND_CODE
        </select>
    </statements>
</sqlMap>


위 예문은 동적 쿼리 생성 mapper이다.

dao에서 System.Collections.Hashtable type의 변수를 받아서 조건에 맞게 쿼리를 생성시켜 준다.

Hashtable의 key값이 property 명과 매치되고 그 값이 #propertyName#과 매칭 된다 보면 되겠다.


예문에서 isNotEmpty prepend="AND" property="WorkDate" 이런식으로 되어 있는데

파라메터의 WorkDate 값이 존재 할 경우 밑에 있는 WOKR_DATE = #WorkDate# 의 조건식을 추가 한다.

뭐 이런식이 될 것이다.


dynamic의 item으로 isNotEmpty 말고도 isNotNull 이라든지 여러가지가 존재 한다. 이 항목은 레퍼런스를 참조 하기 바란다.


그럼 dao의 C# Code를 한번 보겠다.


        public IList<RsltCarryInVo> getRsltCarryIn(string WorkDate, string YardCode)
        {
            Hashtable param = new Hashtable();
            param.Add("WorkDate", WorkDate);
            param.Add("YardCode", YardCode);
            IList<RsltCarryInVo> rtnVal = DaoFactory.getInstance.QueryForList<RsltCarryInVo>("getRsltCarryIn", param);
            return rtnVal;
        }


이 전에 포스팅 했던 코드와 유사 하다.

하나 추가된 것이 있다면 파라메터를 받을 수 있는 Hashtable을 추가 했다는거

key는 string이 되고 값은 object이다.

위에 mapper에서 사용한 property명과 key 값이 일치 하는걸 볼 수 있다.


대략 이런식으로 내용을 추가해서 사용하면 되겠다.

And