<TABLE> <S> <C>
<PAGE>
<ARTICLE> 5
<LEGEND>
THIS SCHEDULE CONTAINS SUMMARY FINANCIAL INFORMATION EXTRACTED FROM FINANCIAL
STATEMENTS FOR THE SIX MONTHS ENDED JUNE 30, 2000 AND IS QUALIFIED IN ITS
ENTIRETY BY REFERENCE TO SUCH FINANCIAL STATEMENTS.
</LEGEND>
<MULTIPLIER> 1,000
<S> <C>
<PERIOD-TYPE> 6-MOS
<FISCAL-YEAR-END> DEC-31-1999
<PERIOD-START> JAN-01-2000
<PERIOD-END> JUN-30-2000
<CASH> 204
<SECURITIES> 265
<RECEIVABLES> 2,517<F1>
<ALLOWANCES> 0<F1><F2>
<INVENTORY> 2,555
<CURRENT-ASSETS> 12,358
<PP&E> 10,855
<DEPRECIATION> 5,602
<TOTAL-ASSETS> 27,884
<CURRENT-LIABILITIES> 8,495
<BONDS> 10,853
0<F2>
0<F2>
<COMMON> 407
<OTHER-SE> 5,051
<TOTAL-LIABILITY-AND-EQUITY> 27,884
<SALES> 9,681
<TOTAL-REVENUES> 10,282
<CGS> 7,398
<TOTAL-COSTS> 9,317
<OTHER-EXPENSES> (40)
<LOSS-PROVISION> 0<F2>
<INTEREST-EXPENSE> 145
<INCOME-PRETAX> 860
<INCOME-TAX> 274
<INCOME-CONTINUING> 573
<DISCONTINUED> 0<F2>
<EXTRAORDINARY> 0<F2>
<CHANGES> 0<F2>
<NET-INCOME> 573
<EPS-BASIC> 1.64
<EPS-DILUTED> 1.63
<FN>
<F1>Notes and accounts receivable trade are reported net of allowance for
doubtful accounts in the statement of financial position.
<F2>Amount inapplicable or not disclosed as a separate line on the statement of
financial position or results of operations are reported as zero herein.
</FN>
</TABLE>