Melhores práticas para criar serviços compostos

Caros,
Fiz uma pergunta no fórum de SOA global e não obtive resposta até agora:
Um resumo:
Best practice on creating composite services
I was wondering what would be the recommended way to create a new enterprise service that is basically the orchestration of other enterprise services.
Será que algum companheiro tupiniquim consegue responder?
Obrigado.

Obrigado!
Dei uma olhada no artigo e entendi a idéia. Então a melhor maneira de se criar um novo serviço que compõe outros é através do CAF?
Vou procurar algum exemplo que seja a composição de web services literalmente.
Mais uma vez, obrigado.

Similar Messages

  • Melhores práticas para documentar projetos BW

    Pessoal boa tarde.
    Estamos em estudo de uma melhor forma de desenvolver documentações para desenvolvimento de aplicações BW.
    Por acaso alguém conhece algum padrão de documentação ou pode recomentar alguma "Best Pratices", para se criar os documentos necessários para gerar uma documentação para os novos projetos?
    Obrigado.

  • [OT] Alguien conoce un administrador estilo MySQl Front pero para SQL Server?

    This is a multi-part message in MIME format.
    ------=_NextPart_000_0022_01C74AC0.A5217CC0
    Content-Type: text/plain;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable
    Hola a todos...
    Mi titulo no puede ser mas explicito... Alguien conoce un
    administrador =
    estilo MySQl Front pero para SQL Server? Necesito sincronizar
    mi bbdd =
    local con la de la Web y esa herramienta me ayudaria en forma
    muy =
    rapida..
    Salu2
    -------------------------------------------------------------------------=
    RECUERDA: Al postear tus consultas, no OLVIDES colocar el
    programa que =
    usas.
    [DW] =3D Dreamweaver
    [FL] =3D Flash
    [FW] =3D Fireworks
    [OT] =3D Off-Topic=20
    -------------------------------------------------------------------------=
    --------------=20
    Daniel Naranjo
    Lo =DAltimo en la Web, Soluciones efectivas
    (+58) 414 7962406=20
    (+58) 416 2917532=20
    (+58) 295 6117632=20
    www.loultimoenlaweb.com
    www.loultimoenhosting.com
    ------=_NextPart_000_0022_01C74AC0.A5217CC0
    Content-Type: text/html;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN">
    <HTML><HEAD>
    <META http-equiv=3DContent-Type content=3D"text/html; =
    charset=3Diso-8859-1">
    <META content=3D"MSHTML 6.00.5730.11" name=3DGENERATOR>
    <STYLE></STYLE>
    </HEAD>
    <BODY bgColor=3D#ffffff>
    <DIV><FONT face=3DVerdana size=3D2>Hola a
    todos...</FONT></DIV>
    <DIV><FONT face=3DVerdana
    size=3D2></FONT> </DIV>
    <DIV><FONT face=3DVerdana size=3D2>Mi titulo no
    puede ser mas =
    explicito... <FONT=20
    size=3D2>Alguien conoce un administrador estilo MySQl
    Front pero para =
    SQL Server?=20
    Necesito sincronizar mi bbdd local con la de la Web y esa
    herramienta me =
    ayudaria en forma muy
    rapida..</FONT></FONT></DIV>
    <DIV><FONT face=3DVerdana
    size=3D2></FONT> </DIV>
    <DIV><FONT face=3DVerdana
    size=3D2>Salu2</FONT></DIV>
    <DIV>
    <P><FONT face=3D"Arial, Helvetica, sans-serif"=20
    size=3D2><STRONG>--------------------------------------------------------=
    -------------------------------</STRONG></FONT><BR><FONT=20
    face=3D"Arial, Helvetica, sans-serif" size=3D1>RECUERDA:
    Al postear tus =
    consultas,=20
    no OLVIDES colocar el programa que usas.<BR>[DW] =3D
    Dreamweaver<BR>[FL] =
    =3D=20
    Flash<BR>[FW] =3D Fireworks<BR>[OT] =3D Off-Topic
    <BR></FONT><FONT=20
    face=3D"Arial, Helvetica, sans-serif"=20
    size=3D2><STRONG>--------------------------------------------------------=
    -------------------------------</STRONG></FONT><FONT=20
    face=3D"Arial, Helvetica, sans-serif" size=3D1>
    </FONT></P>
    <P><FONT face=3D"Arial, Helvetica, sans-serif"
    size=3D2><STRONG>Daniel=20
    Naranjo</STRONG><BR>Lo =DAltimo en la Web,
    Soluciones =
    efectivas</FONT><BR><FONT=20
    face=3D"Arial, Helvetica, sans-serif" size=3D1>(+58) 414
    7962406 =
    <BR>(+58) 416=20
    2917532 <BR>(+58) 295 6117632 <BR><A=20
    href=3D"
    timoenlaweb.com<BR>www.loultimoenhosting.com</A><BR></FONT></P></DIV></BO=
    DY></HTML>
    ------=_NextPart_000_0022_01C74AC0.A5217CC0--

    This is a multi-part message in MIME format.
    ------=_NextPart_000_00B3_01C74ACC.C7B992C0
    Content-Type: text/plain;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable
    Alvaro,
    Gracias por tu respuesta, este administrador me permitiria
    sincronizar =
    mi bbdd (Local/Remota)?=20
    Disculpa las molestias + Salu2
    Daniel N
    "=C1lvaro Vidal" <[email protected]> escribi=F3 en
    el mensaje =
    news:[email protected]...
    Personalmente no conozco MySQL Front pero supongo que te
    refieres a =
    algo como SQL Server Web Data Administrator, el link es: =
    http://www.microsoft.com/downloads/details.aspx?FamilyID=3DC039A798-C57A-=
    419E-ACBC-2A332CB7F959&displaylang=3Den
    Saludos, =C1lvaro.
    "Daniel Naranjo" <[email protected]>
    escribi=F3 en el =
    mensaje news:[email protected]...
    Hola a todos...
    Mi titulo no puede ser mas explicito... Alguien conoce un =
    administrador estilo MySQl Front pero para SQL Server?
    Necesito =
    sincronizar mi bbdd local con la de la Web y esa herramienta
    me ayudaria =
    en forma muy rapida..
    Salu2
    =
    -------------------------------------------------------------------------=
    RECUERDA: Al postear tus consultas, no OLVIDES colocar el
    programa =
    que usas.
    [DW] =3D Dreamweaver
    [FL] =3D Flash
    [FW] =3D Fireworks
    [OT] =3D Off-Topic=20
    =
    -------------------------------------------------------------------------=
    --------------=20
    Daniel Naranjo
    Lo =DAltimo en la Web, Soluciones efectivas
    (+58) 414 7962406=20
    (+58) 416 2917532=20
    (+58) 295 6117632=20
    www.loultimoenlaweb.com
    www.loultimoenhosting.com
    ------=_NextPart_000_00B3_01C74ACC.C7B992C0
    Content-Type: text/html;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN">
    <HTML><HEAD>
    <META http-equiv=3DContent-Type content=3D"text/html; =
    charset=3Diso-8859-1">
    <META content=3D"MSHTML 6.00.5730.11" name=3DGENERATOR>
    <STYLE></STYLE>
    </HEAD>
    <BODY bgColor=3D#ffffff>
    <DIV><FONT face=3DVerdana
    size=3D2>Alvaro,</FONT></DIV>
    <DIV> </DIV>
    <DIV><FONT face=3DVerdana size=3D2>Gracias por tu
    respuesta, este =
    administrador me=20
    permitiria sincronizar mi bbdd (Local/Remota)?
    </FONT></DIV>
    <DIV><FONT face=3DVerdana
    size=3D2></FONT> </DIV>
    <DIV><FONT face=3DVerdana size=3D2>Disculpa las
    molestias + =
    Salu2</FONT></DIV>
    <DIV>
    <P><FONT face=3D"Arial, Helvetica, sans-serif"
    size=3D2>Daniel =
    N</FONT></P></DIV>
    <BLOCKQUOTE dir=3Dltr=20
    style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT:
    5px; =
    BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
    <DIV>"=C1lvaro Vidal" &lt;<A=20
    href=3D"mailto:[email protected]">[email protected]</A>&gt;
    =
    escribi=F3 en=20
    el mensaje <A=20
    =
    href=3D"news:[email protected]">news:eqd63r$jv6$1@forums=
    .macromedia.com</A>...</DIV>
    <DIV><FONT face=3DArial size=3D2>Personalmente
    no conozco MySQL Front =
    pero supongo=20
    que te refieres a algo como SQL Server Web Data
    Administrator, el link =
    es: <A=20
    =
    href=3D"
    http://www.microsoft.com/downloads/details.aspx?FamilyID=3DC039A7=
    98-C57A-419E-ACBC-2A332CB7F959&amp;displaylang=3Den">
    http://www.microsoft=
    .com/downloads/details.aspx?FamilyID=3DC039A798-C57A-419E-ACBC-2A332CB7F9=
    59&amp;displaylang=3Den</A></FONT></DIV>
    <DIV><FONT face=3DArial
    size=3D2></FONT> </DIV>
    <DIV><FONT face=3DArial size=3D2>Saludos,
    =C1lvaro.</FONT></DIV>
    <BLOCKQUOTE dir=3Dltr=20
    style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT:
    5px; =
    BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
    <DIV>"Daniel Naranjo" &lt;<A=20
    =
    href=3D"mailto:[email protected]">info@NOSPAMloultimoenlaweb=
    .com</A>&gt;=20
    escribi=F3 en el mensaje <A=20
    =
    href=3D"news:[email protected]">news:eqd49r$hpg$1@forums=
    .macromedia.com</A>...</DIV>
    <DIV><FONT face=3DVerdana size=3D2>Hola a
    todos...</FONT></DIV>
    <DIV><FONT face=3DVerdana
    size=3D2></FONT> </DIV>
    <DIV><FONT face=3DVerdana size=3D2>Mi titulo no
    puede ser mas =
    explicito... <FONT=20
    size=3D2>Alguien conoce un administrador estilo MySQl
    Front pero =
    para SQL=20
    Server? Necesito sincronizar mi bbdd local con la de la Web
    y esa=20
    herramienta me ayudaria en forma muy
    rapida..</FONT></FONT></DIV>
    <DIV><FONT face=3DVerdana
    size=3D2></FONT> </DIV>
    <DIV><FONT face=3DVerdana
    size=3D2>Salu2</FONT></DIV>
    <DIV>
    <P><FONT face=3D"Arial, Helvetica, sans-serif"=20
    =
    size=3D2><STRONG>--------------------------------------------------------=
    -------------------------------</STRONG></FONT><BR><FONT=20
    face=3D"Arial, Helvetica, sans-serif" size=3D1>RECUERDA:
    Al postear =
    tus=20
    consultas, no OLVIDES colocar el programa que
    usas.<BR>[DW] =3D=20
    Dreamweaver<BR>[FL] =3D Flash<BR>[FW] =3D
    Fireworks<BR>[OT] =3D =
    Off-Topic=20
    <BR></FONT><FONT face=3D"Arial, Helvetica,
    sans-serif"=20
    =
    size=3D2><STRONG>--------------------------------------------------------=
    -------------------------------</STRONG></FONT><FONT=20
    face=3D"Arial, Helvetica, sans-serif" size=3D1>
    </FONT></P>
    <P><FONT face=3D"Arial, Helvetica, sans-serif" =
    size=3D2><STRONG>Daniel=20
    Naranjo</STRONG><BR>Lo =DAltimo en la Web,
    Soluciones=20
    efectivas</FONT><BR><FONT face=3D"Arial,
    Helvetica, sans-serif" =
    size=3D1>(+58)=20
    414 7962406 <BR>(+58) 416 2917532 <BR>(+58) 295
    6117632 <BR><A=20
    =
    href=3D"
    timoenlaweb.com<BR>www.loultimoenhosting.com</A><BR></FONT></P></DIV></BL=
    OCKQUOTE></BLOCKQUOTE></BODY></HTML>
    ------=_NextPart_000_00B3_01C74ACC.C7B992C0--

  • IVA para Frete (serviço) com crédito de ICMS, PIS e COFINS

    Boa tarde,
    Como devo criar um IVA para lançamento do serviço de Frete rodoviário de carga no pedido de compra no módulo MM?
    Preciso criar um IVA (tax code) com ICMS + PIS + COFINS.
    Preciso criar um IVA (tax code) sem ICMS + PIS + COFINS
    Versão SAP ONE 6.0 - J1BTAX/ZTAXBR

    Boa tarde,
    Como devo criar um IVA para lançamento do serviço de Frete rodoviário de carga no pedido de compra no módulo MM?
    Preciso criar um IVA (tax code) com ICMS + PIS + COFINS.
    Preciso criar um IVA (tax code) sem ICMS + PIS + COFINS
    Versão SAP ONE 6.0 - J1BTAX/ZTAXBR

  • Posso utilizar o ibooks author diretamente no ipad para criar conteúdos?

    Sou professor e gostaria de criar conteúdos direto no ipad

    performance do PI sempre vai ser pior do q diretamente, mesmo q infinitesimalmente pior.
    Vc tem q ver se a questao da liberdade tecnologica (se daqui a pouco vc quiser usar enterprise services em vez de BAPI, a facilidade de fazer isso no PI x fazer a mudanca em linha de codigo), a questao da capacidade de monitoramento, error recovery (persistencia, restart de msgs com erro etc) compensam a perda em performance (q acho q, se o sizing for adequado, é mínima).
    Na comunicacao JDBC o nome da tabela nao vai no communication channel, mas sim na msg XML que é enviada para o adapter (uma das tags root, veja aqui: http://help.sap.com/saphelp_nw70/helpdata/en/2e/96fd3f2d14e869e10000000a155106/frameset.htm). O q vai no CC sao os dados do DB em si (endereco porta, nome do DB), user/pass e o driver q vc vai utilizar, entre outros dados. Detalhes em http://help.sap.com/saphelp_nw70/helpdata/en/64/ce4e886334ec4ea7c2712e11cc567c/frameset.htm
    Abs,
    Henrique.

  • Erro no DVD ENCORE para exportar e para criar menu.

    Pessoal, estou enfrentando um problema vamos lá, antes de tudo, uso o pacote PAGO.
    Instalei o premiere CS6 para ter o DVD encore, usei o encore e até ai tudo ótimo, ai fechei um menu, até ai perfeito...
    observei que tinha um erro de Português no menu e decidi modificar, abri o programa, fiz a mudança e quando fui fechar ele me aparece dando essa mensagem de erro...
    Tento abrir um novo projeto e da outro erro:
    ja desinstalei e instalei tirando até as preferências, continua dando os dois erros.
    Quando abro o projeto que ja conseguir fazer (o único), ele abre mas na hora de fechar em IMAGEM ou m qualquer outro formato que o programa me oferece como fiz anteriormente ele da o erro da primeira foto, o programa não me sugere solução nem nada, alguém pode me ajudar?????????

    Bom dia Cristina,
    Isto mesmo, preencha o valor dummy XX00000000 na empresa através da OBCL.
    Fonte: System error: Default TXJCD is not filled in the table T001
    Atenciosamente, Fernando Da Ró

  • MM - Pedido de Compra - Esquema de Cálculo - Moeda Estrangeira

    Olá Pessoal,
    Tenho uma particularidade neste momento que talvés possam me ajudar:
    A empresa onde trabalho atualmente negocia grande parte dos materiais que compra em moeda estrangeira mesmo quando o fornecedor é nacional (empresa brasileira), ou seja, os compradores negociam com o fornecedor em USD e emitem o pedido de compras em USD mas o sistema atual converte no momento da MIGO e MIRO em BRL com base nas cotações cadastradas. Tentamos diversas opções standard como cadastro do preço no pedido de compras e/ou programa de remessas em USD mas o sistema não gerou a conversão automática nas escriturações.
    Existem ainda duas variações de negociação onde:
    1) USD petax: onde o preço informado em USD deve ser convertido com base na taxa de câmbio correspondente a data de emissão da nota fiscal.
    2) USD Média Mês Anterior: onde o preço informado em USD deve ser convertido com base na média das taxas de câmbio correspondente ao mês anterior da emissão da nota fiscal.
    Saberiam me dizer qual a melhor prática para utilização desta sistemática no SAP? Melhor se a alternativa for standard.
    No aguardo,
    FB

    Olá,
    Por padrão a data de definição para conversão de moeda é a "posting date", postando documetnos por meio de MM existe um meio via BADI, que é o único possivel que não atrapalha o procedimento de checagem da invoice na entrada, verifique as notas 574583 e 575249, que possuem todos os detalhes.
    Com relação ao ítem 2, acho que você vai ter que criar uma moeda dummy, ou ainda uma moeda indexada na OB22, para tentar suprir este requerimento.
    Feliz ano novo!!!
    att,
    Gustavo

  • MM - Pedido de Compra - Determinação de Preços por Data do Doc MIGO ou MIRO

    Olá Pessoal,
    Tenho uma particularidade neste momento que talvés possam me ajudar:
    A empresa onde trabalho atualmente recebe diariamente uma grande quantidade de materiais de compras e boa parte destes materiais possuem variação de preços mensal. Visando reduzir as ocorrencias de divergências de preços nos primeiros dias do mês (faturamento mês anterior) gostaría de saber se existe alguma forma de configurar no SAP standard a "Categoria de determinação de preços em MM-PUR" de tal forma que a determinação de preços do pedido de compras (contrato ou registro info de compras) e programa de remessa (condições do programa de remessa) seja feita com base na data de emissão da nota fiscal do fornecedor e não com base nas opções standard (data de emissão do documento de compras, data de remessa, data lançamento e etc).
    Saberiam me dizer qual a melhor prática para utilização desta sistemática no SAP? Melhor se a alternativa for standard.
    Se tiver alguma configuração no SPRO, favor informar.
    No aguardo,
    FB
    Edited by: fbetocomex on Nov 23, 2011 11:22 PM

    Olá,
    Por padrão a data de definição para conversão de moeda é a "posting date", postando documetnos por meio de MM existe um meio via BADI, que é o único possivel que não atrapalha o procedimento de checagem da invoice na entrada, verifique as notas  574583 e 575249, que possuem todos os detalhes.
    Feliz ano novo!!!
    att,
    Gustavo

  • NF-e Serviços - Duvidas..

    Pessoal preciso da ajuda de vocês..Estou meia perdida..
    Existe algum modelo especifico de nota fiscal para NFS-e? Até onde eu sei os modelo NFS-e são de responsabilidade do municipio e sua validação não é feita pelo SEFAZ (Mod 55). O onus da validação sempre será no fornecedor de serviços e não de quem recebe o serviço.
    Eu preciso dar entradas de notas de serviço sem que alimentem o SPED, eu estava utilizando uma categoria de NF-E que qesta associada ao modelo 55(SEFAZ), porém tenho receio que seja feita a validação desta Nf-e mesmo ela estando marcada como NF-e Serviço.
    Procurei se existia alguma nota especifica para o municipio e encontrei somente 981687 - NFe: For Services in Muncipio Sao Paulo refenciando SP, não achei nada relacionado a cidade do Rio de Janeiro.
    Existe algum problema em utilizar a categoria de NF associada ao modelo 55? Ou será necessário criar um nova categoria para serviços sem associar a qualquer modelo?
    Muito Obrigada,
    Kris

    Olá,
    Os campos "Ser. NF-e No." e "Checking Code" devem ser preenchidos manualmente, o conteúdo destes campos serão determinados pela prefeitura na resposta (em arquivo) de seu arquivo enviado.
    A construção de um programa Z para efetuar isto pode eventualmente ser avaliada por você.
    A SAP não liberou nenhuma forma automática para atualização dos mesmos no sistema.
    Atenciosamente,
    Felipe Silveira

  • Campo "Produção Interna" para determinação de CFOP

    Bom dia pessoal!
    Gostaria de perguntar a vocês sobre a utilização do campo  "Produção Interna" para a determinação de CFOP.
    Eu dei um F1 no campo na MM03 e vi que ha a seguinte descrição:
    Produção interna
    Este código indica se o material foi produzido por esta sociedade ou por uma outra sociedade.
    Utilização para determinação CFOP.
    Se o código estiver definido, o material foi produzido por esta sociedade. Se o código não estiver definido, foi produzido por outra sociedade.
    No meu caso, o que eu preciso fazer: tenho um cenário de transferência entre centros, para dois materiais de industrialização, um tem a flag de produção interna que deve utilizar a CFOP 5151 e outro não tem a flag devendo utilizar a CFOP 5152.
    O ponto é: como diferenciar esses dois materiais na determinação automática para que o sistema identifique qual é produzido internamente e aplique a CFOP correta.
    Vocês sabem um jeito de configurar o sistema para que ele funcione dessa forma?
    Muito obrigada desde já pela ajuda.
    Cristina

    Cristina,
    Por favor, tente o seguinte:
    J1BTAX -> Entidades -> CFOP -> Determinação SD CFOP
    Clique em entradas Novas:
    Você deverá basicamente criar duas Entradas, uma para o CFOP 5151 e outra para o CFOP 5152
    Na entrada 5151, preencha da seguinte maneira:
    Sentido do Movimento = 2 - Saída
    Categoria Destino = 0 - Mesmo Estado
    Categoria de Material = 0 - Material (de acordo com o cadastro do seu material)
    Tipo de Item NF = 2 - Item de Transferência
    NF Caso Esp. CFOP = (de acordo com o cadastro de sua Filial.. se lá estiver vazio, então aqui você deixa vazio)
    Produção Interna = Marcado
    Nº Versão CFOP = 2
    CFOP = 5151
    Descrição = Vem automático
    Na entrada 5152, preencha da seguinte maneira:
    Sentido do Movimento = 2 - Saída
    Categoria Destino = 0 - Mesmo Estado
    Categoria de Material = 0 - Material (de acordo com o cadastro do seu material)
    Tipo de Item NF = 2 - Item de Transferência
    NF Caso Esp. CFOP = (de acordo com o cadastro de sua Filial.. se lá estiver vazio, então aqui você deixa vazio)
    Produção Interna = Desmarcado
    Nº Versão CFOP = 2
    CFOP = 5152
    Descrição = Vem automático
    Repita os mesmos Procedimentos para Determinação de CFOP - MM, para que na entrada na Planta receptora, o Sistema determine automaticamente os CFOPs 1151 e 1152 respectivamente.
    Fiz um teste aqui e funcionou tranquilamente.
    Nos avise caso tenha dado certo, não sei se existe alguma outra configuração que possa impedir desta funcionar.
    ok ?
    Obrigado,
    Natan

  • Ajuda / Duvida - Migração TAXBRJ para TAXBRA (SD)

    Pessoal,
    Boa tarde a todos.
    Uma pessoa entrou em contato comigo para solicitar um help e eu não soube como ajudar... talvez vocês consigam...
    Veja abaixo o cenário que a mesma posui:
    Tenho uma atividade, que é dar suporte a um cliente que esta fazendo um projeto de migração da TAXBRJ para TAXBRA, incluindo a MP135.
    Preciso de ajuda para o seguinte cenário:
    O cliente tem muitas ordens de vendas e pedidos de compras em andamento.
    Normalmente eu recomendo que os documentos sejam encerrados e colocados novamente no SAP, em função do novo esquema de calculo, tipos de condição e records conditions que nos documentos antigos não existem e não temos como simplesmente fazer uma determinação automática para que estes dados sejam incluídos.
    Este cliente obteve uma informação da SAP, em uma apresentação de pré-vendas que existem reports que tratam deste assunto, ou seja, programas que atualizam as ordens e pedidos sem a necessidade de serem encerrados e colocados novamente no SAP.
    Se alguém tiver a informação de que transação e/ou reports que fazem isso eu agradeço a ajuda.
    Antecipadamente eu agradeço a ajuda.
    Grato a todos.
    Qualquer outra dúvida estou à disposição.
    Obrigado,
    Mateus.

    Olá Mateus,
    Pelo meu conhecimento não existe um report que faça essa atualização.
    A customização é um pouco longa para implementar a TAXBRA, existem algumas notas para isso, tal como 747607. A ativação da CBT envolve novas formulas de cálculo, novos tipos de condições, mapeamentos de pricing, etc.
    Não temos como simplesmente atualizar uma ordem de venda (TAXBRJ) e ela se transormar em (TAXBRA) de forma eficiente e correta. Sugiro encerrar seus processos e logo após ativda a CBT. Desta forma não irá gerar inconsistências nas suas tabelas e performance dos programas.
    atenciosamente
    Ruy Castro

  • Preciso de opnião sobre qual cenário usar para um processo SD

    Pessoal,
    Como estão ? Espero que todos bem e alocados.
    Seguinte estou com um processo de venda na qual não estou segura de qula cenário SAP posso aplicar.
    Gostrai da opnião de vocês.
    A empresa precisa emitir uma remessa para manutenção, de um equipamento que se encontra dentro de uma fábrica de terceiros, mais este equipamento não pertenece a empresa, este equipamento esta na fabrica do cliente do nosso cliente.
    Ou seja
    Fabrica X - dona do material que enviou em comodato - saiu como remessa em comadato para o cliente H
    Fabrica Y - recebeu o material em comodato em nome do fornecedor H
    Cliente H - E o cliente real da fabrica X, o pagador do material e da manutenção.
    O material que sera usado na manutenção estara nas mães de técnicos da Fabrica X
    Pergunta, qual melhor cenário para envio das peças para conserto, e uma emessa mesmo.
    Existe um cenário melhor ?
    Com trabalham empresas que tercerizam sua manutenção para uma outra empresa ? usam que tipo de cenário
    obrigada a todos
    Edited by: Martha Zar on Oct 19, 2009 6:45 PM

    A data de escrituracao = posting date da J_1BNFDOC.
    O problema é para notas emitidas perto da meia noite, em que a autorizacao pode vir só no outro dia, é isso?
    Pq nao tem hora pra escrituracao, só data, entao só vejo problema em querer alterar a data, a nao ser nesse caso.
    Mas note que a NF-e nao aparece no livro (ou nao deveria aparecer) enqto ela nao estiver autorizada (docstat = 1, statcode = 100), ou aparece como cancelada (se ela tiver sido cancelada ou inutilizada, flag de cancelled = X).
    De qq maneira, se vc quiser, pode analisar a possibilidade de alterar o valor do posting date no metodo call_rsnast00 da badi cl_nfe_print (que eh chamada no retorno do grc pro erp), e alterar qdo a nfe for autorizada (status atual = aguardando resposta e status da sefaz = 100 (autorizada)). Nao sei se dá, tem q ver os parametros q sao passados.
    Abs,
    Henrique.

  • Plano de go-live versão 1 para a 2

    Bom dia
    Estamos implementando a nova versão do XML 2.0 e a princípio estamos com o seguinte plano de go-live que gostaria de avaliar com vocês ou receber sugestões:
    - o go-live envolve 5 servidores SAP em 1 servidor GRC
    - devido ao downtime de aproximadamente 12 horas gostaríamos de entrar em contingência às 00h00 do dia 18/12 (ainda na versão 1.0) com saída de contngência por volta das 13h00 do dia 19/12 já na versão 2.0
    - posso ter algum problema nas aprovações quando sairmos da contingência já na versão 2.0??
    - qual seria a melhor solução para que eu não tenha problemas em relação a versão x contingência?
    Grata,
    Denise

    Denise,
    na DANFe nao tem versao, mas a chave de acesso da versao 2.00 é diferente da versao 1.10.
    Contudo, uma vez criada a NF-e como 1,10, mesmo que ela esteja em contingencia e só seja enviada à SEFAZ após a versao do local de negocio ir pra 2,00, o XML continua indo com a versao (e chave) criados no 1o momento.
    Vc mesma pode fazer esse teste em Dev.
    Deixe o local de negocio em 1,10, sete a contingencia para o local de negocio, crie uma NF-e em contingencia, tire o local de negocio da contigencia e mude a versao do local de negocio para 2,00. Depois, tente enviar a NF-e em questao pra SEFAZ.
    Vc terá que conviver com as 2 configuracoes (1,10 e 2,00) no GRC/PI por algum tempo, mas nada que seja impactante.
    Abs,
    Henrique.

  • Re: Error while uploading par file .

    Hi ,
    When I m trying to uploading my par file i m getting this err pop-up .
    par upload failed :
    please check the log (sap-plugin.log) for more detail
    2009-02-23_14-20-27
    Application upload failed: P&G_Test.par
    com.sapportals.portal.prt.runtime.PortalException: [ApplicationRepositoryService.putArchive] archive: P&G_Test.par
         at com.sapportals.portal.application.applicationrepository.ApplicationRepositoryService.putArchive(ApplicationRepositoryService.java:328)
         at com.sapportals.portal.prt.deployment.DeploymentManager._uploadArchive(DeploymentManager.java:813)
         at com.sapportals.portal.prt.deployment.DeploymentManager.uploadArchive(DeploymentManager.java:474)
         at com.sapportals.portal.prt.deployment.DeploymentManager.uploadApplication(DeploymentManager.java:319)
         at com.sap.ip.portal.admin.portalanywhere.ArchiveUploader.doUpload(ArchiveUploader.java:116)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:324)
         at com.sapportals.portal.prt.component.AbstractPortalComponent.handleRequestEvent(AbstractPortalComponent.java:700)
         at com.sapportals.portal.prt.component.AbstractPortalComponent.handleEvent(AbstractPortalComponent.java:412)
         at com.sapportals.portal.prt.pom.ComponentNode.handleEvent(ComponentNode.java:252)
         at com.sapportals.portal.prt.pom.PortalNode.fireEventOnNode(PortalNode.java:369)
         at com.sapportals.portal.prt.core.PortalRequestManager.runRequestCycle(PortalRequestManager.java:707)
         at com.sapportals.portal.prt.connection.ServletConnection.handleRequest(ServletConnection.java:240)
         at com.sapportals.portal.prt.dispatcher.Dispatcher$doService.run(Dispatcher.java:545)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sapportals.portal.prt.dispatcher.Dispatcher.service(Dispatcher.java:405)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:156)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)
         at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)
         at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)
         at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)
         at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
         at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
         at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
         at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
    Caused by: javax.naming.InvalidNameException: Character not allowed: '&' in 'P&G_Test.par'
         at com.sapportals.portal.pcd.pl.PcdName.checkComponent(PcdName.java:54)
         at com.sapportals.portal.pcd.pl.PcdName.checkComponents(PcdName.java:69)
         at com.sapportals.portal.pcd.gl.PcdProxyContext.rebind(PcdProxyContext.java:453)
         at com.sapportals.portal.pcd.gl.PcdGlContext.rebind(PcdGlContext.java:1221)
         at com.sapportals.portal.pcd.gl.PcdProxyContext.rebind(PcdProxyContext.java:502)
         at com.sapportals.portal.pcd.gl.PcdProxyContext.rebind(PcdProxyContext.java:663)
         at com.sapportals.portal.pcd.gl.PcdProxyContext.rebind(PcdProxyContext.java:668)
         at com.sapportals.portal.application.applicationrepository.ApplicationRepositoryService.storeArchive(ApplicationRepositoryService.java:373)
         at com.sapportals.portal.application.applicationrepository.ApplicationRepositoryService.putArchive(ApplicationRepositoryService.java:299)
         ... 34 more
    Thanks in advance

    Hi,
      The error shows clearly
    > Caused by: javax.naming.InvalidNameException: Character not allowed: '&' in 'P&G_Test.par'
    As suggested, rename the project, rebuild it and then upload the par to server. That should work.
    Regards,
    Harini S

  • Multithread TicTacToe Server Problem

    I'm having some problems with finishing up a tic tac toe server and it's driving me crazy. I'm hoping someone can give me some hints or help out with this. All of the code is written for the server which allows 2 clients to connect, but the code for determining if the game is won needs to be finished up.
    I've got the method for determining if the game is over done, that part is easy, and I'm able to send a message to the client who wins when they place the winning marker and end the game for them, but currently the next player gets to place one more marker before being signaled that the game is over. I worked on this forever and I think I'm just missing something simple that I hope someone can help me with. Here's the code:
    Line 180 in TicTacToeServer.java is where I test for the win
    Line 304 in TicTacToeServer.java is where the clients exit the main while loop after determining that the game is won and I send a message letting them know that the game is won
    Server Code:
    TicTacToeServerTest.java
    // Tests the TicTacToeServer.
    import javax.swing.JFrame;
    public class TicTacToeServerTest
       public static void main( String args[] )
          TicTacToeServer application = new TicTacToeServer();
          application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
          application.execute();
       } // end main
    } // end class TicTacToeServerTest
    TicTacToeServer.java
    // This class maintains a game of Tic-Tac-Toe for two clients.
    import javax.swing.JOptionPane;
    import java.awt.BorderLayout;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.IOException;
    import java.util.Formatter;
    import java.util.Scanner;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    import java.util.concurrent.locks.Condition;
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
    public class TicTacToeServer extends JFrame
       private String[] board = new String[ 9 ]; // tic-tac-toe board
       private JTextArea outputArea; // for outputting moves
       private Player[] players; // array of Players
       private ServerSocket server; // server socket to connect with clients
       private int currentPlayer; // keeps track of player with current move
       private final static int PLAYER_X = 0; // constant for first player
       private final static int PLAYER_O = 1; // constant for second player
       private final static String[] MARKS = { "X", "O" }; // array of marks
       private ExecutorService runGame; // will run players
       private Lock gameLock; // to lock game for synchronization
       private Condition otherPlayerConnected; // to wait for other player
       private Condition otherPlayerTurn; // to wait for other player's turn
       private int winner = 2;
       // set up tic-tac-toe server and GUI that displays messages
       public TicTacToeServer()
          super( "Tic-Tac-Toe Server" ); // set title of window
          // create ExecutorService with a thread for each player
          runGame = Executors.newFixedThreadPool( 2 );
          gameLock = new ReentrantLock(); // create lock for game
          // condition variable for both players being connected
          otherPlayerConnected = gameLock.newCondition();
          // condition variable for the other player's turn
          otherPlayerTurn = gameLock.newCondition();
          for ( int i = 0; i < 9; i++ )
             board[ i ] = new String( "" ); // create tic-tac-toe board
          players = new Player[ 2 ]; // create array of players
          currentPlayer = PLAYER_X; // set current player to first player
          try
             server = new ServerSocket( 12345, 2 ); // set up ServerSocket
          } // end try
          catch ( IOException ioException )
             ioException.printStackTrace();
             System.exit( 1 );
          } // end catch
          outputArea = new JTextArea(); // create JTextArea for output
          add( outputArea, BorderLayout.CENTER );
          outputArea.setText( "Server awaiting connections\n" );
          setSize( 300, 300 ); // set size of window
          setVisible( true ); // show window
       } // end TicTacToeServer constructor
       // wait for two connections so game can be played
       public void execute()
          // wait for each client to connect
          for ( int i = 0; i < players.length; i++ )
             try // wait for connection, create Player, start runnable
                players[ i ] = new Player( server.accept(), i );
                runGame.execute( players[ i ] ); // execute player runnable
             } // end try
             catch ( IOException ioException )
                ioException.printStackTrace();
                System.exit( 1 );
             } // end catch
          } // end for
          gameLock.lock(); // lock game to signal player X's thread
          try
             players[ PLAYER_X ].setSuspended( false ); // resume player X
             otherPlayerConnected.signal(); // wake up player X's thread
          } // end try
          finally
             gameLock.unlock(); // unlock game after signalling player X
          } // end finally
       } // end method execute
       // display message in outputArea
       private void displayMessage( final String messageToDisplay )
          // display message from event-dispatch thread of execution
          SwingUtilities.invokeLater(
             new Runnable()
                public void run() // updates outputArea
                   outputArea.append( messageToDisplay ); // add message
                } // end  method run
             } // end inner class
          ); // end call to SwingUtilities.invokeLater
       } // end method displayMessage
       // determine if move is valid
       public boolean validateAndMove( int location, int player )
          // while not current player, must wait for turn
          while ( player != currentPlayer )
             gameLock.lock(); // lock game to wait for other player to go
             try
                otherPlayerTurn.await(); // wait for player's turn
             } // end try
             catch ( InterruptedException exception )
                exception.printStackTrace();
             } // end catch
             finally
                gameLock.unlock(); // unlock game after waiting
             } // end finally
          } // end while
          // if location not occupied, make move
          if ( !isOccupied( location ) )
             board[ location ] = MARKS[ currentPlayer ]; // set move on board
             currentPlayer = ( currentPlayer + 1 ) % 2; // change player
             // let new current player know that move occurred
             players[ currentPlayer ].otherPlayerMoved( location );
             gameLock.lock(); // lock game to signal other player to go
             try
                otherPlayerTurn.signal(); // signal other player to continue
             } // end try
             finally
                gameLock.unlock(); // unlock game after signaling
             } // end finally
             return true; // notify player that move was valid
          } // end if
          else // move was not valid
             return false; // notify player that move was invalid
       } // end method validateAndMove
       // determine whether location is occupied
       public boolean isOccupied( int location )
          if ( board[ location ].equals( MARKS[ PLAYER_X ] ) ||
             board [ location ].equals( MARKS[ PLAYER_O ] ) )
             return true; // location is occupied
          else
             return false; // location is not occupied
       } // end method isOccupied
       // place code in this method to determine whether game over
       public boolean isGameOver()
          for (int x = 0; x < 2; x++)
               if ((board[0].equals(MARKS[x]) && board[1].equals(MARKS[x]) && board[2].equals(MARKS[x])) ||
                (board[3].equals(MARKS[x]) && board[4].equals(MARKS[x]) && board[5].equals(MARKS[x])) ||
                (board[6].equals(MARKS[x]) && board[7].equals(MARKS[x]) && board[8].equals(MARKS[x])) ||
                (board[0].equals(MARKS[x]) && board[4].equals(MARKS[x]) && board[8].equals(MARKS[x])) ||
                (board[6].equals(MARKS[x]) && board[4].equals(MARKS[x]) && board[2].equals(MARKS[x])) ||
                (board[0].equals(MARKS[x]) && board[3].equals(MARKS[x]) && board[6].equals(MARKS[x])) ||
                (board[1].equals(MARKS[x]) && board[4].equals(MARKS[x]) && board[7].equals(MARKS[x])) ||
                (board[2].equals(MARKS[x]) && board[5].equals(MARKS[x]) && board[8].equals(MARKS[x]))
                winner = x;
                 return true;
          return false; // this is left as an exercise
       } // end method isGameOver
       // private inner class Player manages each Player as a runnable
       private class Player implements Runnable
          private Socket connection; // connection to client
          private Scanner input; // input from client
          private Formatter output; // output to client
          private int playerNumber; // tracks which player this is
          private String mark; // mark for this player
          private boolean suspended = true; // whether thread is suspended
          // set up Player thread
          public Player( Socket socket, int number )
             playerNumber = number; // store this player's number
             mark = MARKS[ playerNumber ]; // specify player's mark
             connection = socket; // store socket for client
             try // obtain streams from Socket
                input = new Scanner( connection.getInputStream() );
                output = new Formatter( connection.getOutputStream() );
             } // end try
             catch ( IOException ioException )
                ioException.printStackTrace();
                System.exit( 1 );
             } // end catch
          } // end Player constructor
          // send message that other player moved
          public void otherPlayerMoved( int location )
                   output.format( "Opponent moved\n" );
                  output.format( "%d\n", location ); // send location of move
                  output.flush(); // flush output
          } // end method otherPlayerMoved
          // control thread's execution
          public void run()
             // send client its mark (X or O), process messages from client
             try
                displayMessage( "Player " + mark + " connected\n" );
                output.format( "%s\n", mark ); // send player's mark
                output.flush(); // flush output
                // if player X, wait for another player to arrive
                if ( playerNumber == PLAYER_X )
                   output.format( "%s\n%s", "Player X connected",
                      "Waiting for another player\n" );
                   output.flush(); // flush output
                   gameLock.lock(); // lock game to  wait for second player
                   try
                      while( suspended )
                         otherPlayerConnected.await(); // wait for player O
                      } // end while
                   } // end try
                   catch ( InterruptedException exception )
                      exception.printStackTrace();
                   } // end catch
                   finally
                      gameLock.unlock(); // unlock game after second player
                   } // end finally
                   // send message that other player connected
                   output.format( "Other player connected. Your move.\n" );
                   output.flush(); // flush output
                } // end if
                else
                   output.format( "Player O connected, please wait\n" );
                   output.flush(); // flush output
                } // end else
                // while game not over
                while ( !isGameOver() )
                   int location = 0; // initialize move location
                   if ( input.hasNext() )
                      location = input.nextInt(); // get move location
                   // check for valid move
                   if ( validateAndMove( location, playerNumber ) )
                      displayMessage( "\nlocation: " + location );
                      output.format( "Valid move.\n" ); // notify client
                      output.flush(); // flush output
                   } // end if
                   else // move was invalid
                      output.format( "Invalid move, try again\n" );
                      output.flush(); // flush output
                   } // end else
                } // end while
                output.format( "Game Over.\n" ); // notify client
                if (winner == 0)
                     output.format("Winner is X\n");
                if (winner == 1)
                     output.format("Winner is O\n");
                output.flush(); // flush output
                gameLock.unlock();
             } // end try
             finally
                try
                   connection.close(); // close connection to client
                } // end try
                catch ( IOException ioException )
                   ioException.printStackTrace();
                   System.exit( 1 );
                } // end catch
             } // end finally
          } // end method run
          // set whether or not thread is suspended
          public void setSuspended( boolean status )
             suspended = status; // set value of suspended
          } // end method setSuspended
       } // end class Player
    } // end class TicTacToeServer
    Client Code:
    TicTacToeClientTest.java
    // Tests the TicTacToeClient class.
    import javax.swing.JFrame;
    public class TicTacToeClientTest
       public static void main( String args[] )
          TicTacToeClient application; // declare client application
          // if no command line args
          if ( args.length == 0 )
             application = new TicTacToeClient( "127.0.0.1" ); // localhost
          else
             application = new TicTacToeClient( args[ 0 ] ); // use args
          application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
       } // end main
    } // end class TicTacToeClientTest
    TicTacToeClient.java
    // Client that let a user play Tic-Tac-Toe with another across a network.
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.net.Socket;
    import java.net.InetAddress;
    import java.io.IOException;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    import java.util.Formatter;
    import java.util.Scanner;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ExecutorService;
    public class TicTacToeClient extends JFrame implements Runnable
       private JTextField idField; // textfield to display player's mark
       private JTextArea displayArea; // JTextArea to display output
       private JPanel boardPanel; // panel for tic-tac-toe board
       private JPanel panel2; // panel to hold board
       private Square board[][]; // tic-tac-toe board
       private Square currentSquare; // current square
       private Socket connection; // connection to server
       private Scanner input; // input from server
       private Formatter output; // output to server
       private String ticTacToeHost; // host name for server
       private String myMark; // this client's mark
       private boolean myTurn; // determines which client's turn it is
       private final String X_MARK = "X"; // mark for first client
       private final String O_MARK = "O"; // mark for second client
       // set up user-interface and board
       public TicTacToeClient( String host )
          ticTacToeHost = host; // set name of server
          displayArea = new JTextArea( 4, 30 ); // set up JTextArea
          displayArea.setEditable( false );
          add( new JScrollPane( displayArea ), BorderLayout.SOUTH );
          boardPanel = new JPanel(); // set up panel for squares in board
          boardPanel.setLayout( new GridLayout( 3, 3, 0, 0 ) );
          board = new Square[ 3 ][ 3 ]; // create board
          // loop over the rows in the board
          for ( int row = 0; row < board.length; row++ )
             // loop over the columns in the board
             for ( int column = 0; column < board[ row ].length; column++ )
                // create square
                board[ row ][ column ] = new Square( " ", row * 3 + column );
                boardPanel.add( board[ row ][ column ] ); // add square
             } // end inner for
          } // end outer for
          idField = new JTextField(); // set up textfield
          idField.setEditable( false );
          add( idField, BorderLayout.NORTH );
          panel2 = new JPanel(); // set up panel to contain boardPanel
          panel2.add( boardPanel, BorderLayout.CENTER ); // add board panel
          add( panel2, BorderLayout.CENTER ); // add container panel
          setSize( 300, 225 ); // set size of window
          setVisible( true ); // show window
          startClient();
       } // end TicTacToeClient constructor
       // start the client thread
       public void startClient()
          try // connect to server, get streams and start outputThread
             // make connection to server
             connection = new Socket(
                InetAddress.getByName( ticTacToeHost ), 12345 );
             // get streams for input and output
             input = new Scanner( connection.getInputStream() );
             output = new Formatter( connection.getOutputStream() );
          } // end try
          catch ( IOException ioException )
             ioException.printStackTrace();
          } // end catch
          // create and start worker thread for this client
          ExecutorService worker = Executors.newFixedThreadPool( 1 );
          worker.execute( this ); // execute client
       } // end method startClient
       // control thread that allows continuous update of displayArea
       public void run()
          myMark = input.nextLine(); // get player's mark (X or O)
          SwingUtilities.invokeLater(
             new Runnable()
                public void run()
                   // display player's mark
                   idField.setText( "You are player \"" + myMark + "\"" );
                } // end method run
             } // end anonymous inner class
          ); // end call to SwingUtilities.invokeLater
          myTurn = ( myMark.equals( X_MARK ) ); // determine if client's turn
          // receive messages sent to client and output them
          while ( true )
             if ( input.hasNextLine() )
                processMessage( input.nextLine() );
          } // end while
       } // end method run
       // process messages received by client
       private void processMessage( String message )
          // valid move occurred
          if ( message.equals( "Valid move." ) )
             displayMessage( "Valid move, please wait.\n" );
             setMark( currentSquare, myMark ); // set mark in square
          } // end if
          else if ( message.equals( "Invalid move, try again" ) )
             displayMessage( message + "\n" ); // display invalid move
             myTurn = true; // still this client's turn
          } // end else if
          else if ( message.equals( "Opponent moved" ) )
             int location = input.nextInt(); // get move location
             input.nextLine(); // skip newline after int location
             int row = location / 3; // calculate row
             int column = location % 3; // calculate column
             setMark(  board[ row ][ column ],
                ( myMark.equals( X_MARK ) ? O_MARK : X_MARK ) ); // mark move
             displayMessage( "Opponent moved. Your turn.\n" );
             myTurn = true; // now this client's turn
          } // end else if
          else
             displayMessage( message + "\n" ); // display the message
       } // end method processMessage
       // manipulate outputArea in event-dispatch thread
       private void displayMessage( final String messageToDisplay )
          SwingUtilities.invokeLater(
             new Runnable()
                public void run()
                   displayArea.append( messageToDisplay ); // updates output
                } // end method run
             }  // end inner class
          ); // end call to SwingUtilities.invokeLater
       } // end method displayMessage
       // utility method to set mark on board in event-dispatch thread
       private void setMark( final Square squareToMark, final String mark )
          SwingUtilities.invokeLater(
             new Runnable()
                public void run()
                   squareToMark.setMark( mark ); // set mark in square
                } // end method run
             } // end anonymous inner class
          ); // end call to SwingUtilities.invokeLater
       } // end method setMark
       // send message to server indicating clicked square
       public void sendClickedSquare( int location )
          // if it is my turn
          if ( myTurn )
             output.format( "%d\n", location ); // send location to server
             output.flush();
             myTurn = false; // not my turn anymore
          } // end if
       } // end method sendClickedSquare
       // set current Square
       public void setCurrentSquare( Square square )
          currentSquare = square; // set current square to argument
       } // end method setCurrentSquare
       // private inner class for the squares on the board
       private class Square extends JPanel
          private String mark; // mark to be drawn in this square
          private int location; // location of square
          public Square( String squareMark, int squareLocation )
             mark = squareMark; // set mark for this square
             location = squareLocation; // set location of this square
             addMouseListener(
                new MouseAdapter() {
                   public void mouseReleased( MouseEvent e )
                      setCurrentSquare( Square.this ); // set current square
                      // send location of this square
                      sendClickedSquare( getSquareLocation() );
                   } // end method mouseReleased
                } // end anonymous inner class
             ); // end call to addMouseListener
          } // end Square constructor
          // return preferred size of Square
          public Dimension getPreferredSize()
             return new Dimension( 30, 30 ); // return preferred size
          } // end method getPreferredSize
          // return minimum size of Square
          public Dimension getMinimumSize()
             return getPreferredSize(); // return preferred size
          } // end method getMinimumSize
          // set mark for Square
          public void setMark( String newMark )
             mark = newMark; // set mark of square
             repaint(); // repaint square
          } // end method setMark
          // return Square location
          public int getSquareLocation()
             return location; // return location of square
          } // end method getSquareLocation
          // draw Square
          public void paintComponent( Graphics g )
             super.paintComponent( g );
             g.drawRect( 0, 0, 29, 29 ); // draw square
             g.drawString( mark, 11, 20 ); // draw mark
          } // end method paintComponent
       } // end inner-class Square
    } // end class TicTacToeClient

    I'll look into doing it that way... One thing I don't understand is that when the winning player places it's final marker and gets the game over message the other player gets passed the Opponent moved message. So shouldn't I be able to pass a Game Over message to the other player after sending the Game Over message to the winning player? I'm not sure where in the code I'd need to put the output statement or what code I'd use to send it to the losing player instead of the winning player. I'm fairly new to threading and working on this for school, the book is not very much help in this area, so excuse my ignorance. Is it possible to send a message to the losing client right after sending one to the winning client after the main while loop exits around line 309 of TicTacToeServer.java? Or is this not possible because of how threading works?

Maybe you are looking for

  • Multi-Threaded FTP

    Multi-Threaded FTP was a huge attraction for me, and one of the features that sold me on upgrading to Dreamweaver CS6.  However, I haven't seen any sign of it in the product or any documentation to help me use it.  My files keep transferring in the t

  • How can I throw a hard 404 error to apache when a JSP is not found.

    How can I throw a hard 404 error to apache when a JSP is not found. I want to let apache handle the error.

  • External FW System drives. 10.4.11 starts and runs. 10.5.8 won't

    Hello, and thanks in advance for your time. I've never posted in this forum, but am a regular contributor on the Logic Pro forum. I've had TIger running on my G5 off an external boot drive to use Logic Pro 8 trouble free for a long time. I cloned the

  • Create a client and logical system for BW

    Hi all, Can anyone show me how to create a BW client?      create a BW client and logical system for BW client.      create sourcesystems for the other clients in BW. I have follow some documents B84: BI Connectivity B03: General Settings BI Integrat

  • Create PDF 1.1 is "incompatible with Firefox 35.0"

    Hi all, I'm using Acrobat Pro X and Firefox on Windows 7 x64.  The Create PDF plugin (version 1.1) has been very useful, and has been working fine for a good while, even when Firefox recently upgraded itself to version 35.0. But recently my main hard