Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-11875

Referencing external package com/google/protobuf/ inside hbase-protcol module won't work in OSGI environment

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Incomplete
    • 0.98.6
    • None
    • Protobufs
    • None
    • OSGI container

    Description

      Hi

      HbaseZeroCopyByteString class isn't accessible in OSGI based environment. The reason is that it ends up in a separate route package within an OSGI bundle. As such the class isn't viewable by the classLoader.

      I understand that the hbase-module isn't an osgi bundle, but there is another project which makes use of this module to generate an osgi bundle for the OSGI container: https://github.com/apache/servicemix4-bundles/tree/trunk/hbase-0.98.0-hadoop2. If you get hold of the binary or source artefact from maven, unzip the jar and you will see the structure of the project:
      com/google/ (classes defined in this package are not visible by the classLoader).
      org/apache/hbase

      I understand the reason of having a foreign package, because LiteralByteString is package protected. It would be nice to work out another way of extending google protobuf classes. I would recommend going for composition as opposed to inheritance that will solve the problem.

      Regards,

      Ayache

      Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/HBaseZeroCopyByteString
      at org.apache.hadoop.hbase.protobuf.RequestConverter.buildRegionSpecifier(RequestConverter.java:908)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
      at org.apache.hadoop.hbase.protobuf.RequestConverter.buildGetRowOrBeforeRequest(RequestConverter.java:132)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
      at org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRowOrBefore(ProtobufUtil.java:1466)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
      at org.apache.hadoop.hbase.client.HTable$2.call(HTable.java:701)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
      at org.apache.hadoop.hbase.client.HTable$2.call(HTable.java:699)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
      at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:121)[252:org.apache.servicemix.bundles.hbase:0.98.0.hadoop2-inps]
      ... 56 more

      Attachments

        Activity

          People

            Unassigned Unassigned
            akhettar ayache khettar
            Votes:
            1 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: