• Какую базу данных лучше использовать в java?

    kivsiak
    @kivsiak
    software engineer
    Если это не встроенная база, то вопрос не имеет смысла. Выбор базы не от языка а от задач зависит.
    Ответ написан
    Комментировать
  • Что такое ElasticSearch?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Знаете, я с вами соглашусь, что хорошую вводную по Elastic трудно найти. Пока сам не переварил доков и не набил шишек многие элементарные понятия оставались для меня неясными. Поэтому вот моя вводная: Elastic можно использовать как NoSQL БД, только надо быть внимательным, т.к. всё-таки его основная задача поиск, а не удовлетворение функций БД. Например, если вы не настроили хранение исходных данных, а только индексацию, то свои данные вы уже не извлечёте из него. НИКОГДА. Только отдельные выражения, удовлетворяющие условиям поиска. Всё, тупик. Так же нельзя повторно индексировать уже загнанные в него данные. Т.е. перед загрузкой данных надо грамотно настроить индексацию, т.к. перестроить индекс, как это делается в реляционной БД невозможно. Нужно придумать новую схему индексации и перезалить данные в Elastic. Именно поэтому основное использование Elastic - как дополнение к существующей БД из которой данные можно перезалить по одному или полностью в Elastic (можно, конечно сделать схему Elastic->Elastic, но тоже есть нюансы).
    Ещё пару слов про схему. Это ЛОЖЬ, что в Elastic нет схемы данных. Она как раз есть и ооочень жёсткая. Жёсткая до того, что однажды определив, вы не сможете её поменять. Изначально Elastic оказывает медвежью услугу, разрешая вам дополнять схему по-умолчанию, но когда вы разберётесь с этой темой, то можете обнаружить, что Elastic "понастроил" такого у себя внутри, что остаётся только охреневать и переделывать всё явно, отказавшись от его "услуг" по автоматическому добавлению полей в схему.
    Так же в Elastic очень непросто строить сложные запросы на поиск и агрегатные запросы. Совершенно неинтуитивно. Но если освоитесь, то будет вам счастье. )))
    Несмотря за такие "страшные" вещи - Elastic классная система и по производительности агрегатных запросов не уступает платной версии MSSQL в поиске в многопроцессорных системах (проверял на одинаковых аппаратных конфигурациях с 16 ядрами). Так что если вам хочется большую скорость в агрегатных запросах и главное - это бесплатность, то берите и осваивайте Elastic. Мощности и возможности у него огромные. Но... нужно потратить приличные усилия на изучение.
    Ответ написан
    1 комментарий
  • Какой объект object ко мне пришел?

    @aol-nnov
    public MyClass(Integer o){
          //Действия для Integer
    }
    public MyClass(Double o){
          //Действия для Double
    }

    нэ?!

    то, что ты делаешь - это примерно как void* везде передавать в с++. в чем профит-то?
    Ответ написан
    Комментировать
  • Зачем нужны Checked Exceptions в Java?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Проверяемые исключения нужны, что бы знать, где может возникнуть исключительная ситуация и правильно обработать. Да, если при ошибке ты просто пишешь в лог что-то вроде "Эй, чувак, у тебя с БД что-то нетак", а не пытаешься завершить действие каким-нибудь иным способом, то проверяемые исключения тебе будут мешать (по принципу "плохому танцору ...").
    Хороший пример работы с проверяемыми исключениями - транзакции при работе с БД.
    Ответ написан
    Комментировать
  • Чтение Excel файлов. Какой выбрать язык программирования?

    @nirvimel
    100500 различных версий формата файла - это не проблема языка программирования и библиотеки, это проблема только самого Excel, и не более. Надо заставить его самого решать свои проблемы - написать скрипт, который заставляет Excel открывать свои поделки и экспортировать их содержимое в человеческий формат. После чего можно уже нормально программно работать с данными в удобном формате удобными инструментами без перерасхода памяти. В качестве формата данных можно взять CSV, например, хотя выбор вариантов огромный.
    Ответ написан
    1 комментарий
  • Как создать Web сервис на технологии CXF с WS-Security?

    @crowar Автор вопроса
    Разработчик ну что тут ещё сказать =)
    Для создания сервиса, пришлось изучить документацию от апача, в целом как оказалось все не так сложно.
    Для начала создал обычные сервисы на CXF, затем сохранил WSDL файл и начал его править.
    В блок wsdl:binding добавил блок
    <wsp:PolicyReference URI="#SecurityServiceSignThenEncryptPolicy"/>

    и в wsdl:definitions
    <wsp:Policy wsu:Id="SecurityServiceSignThenEncryptPolicy"
                    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:ExactlyOne>
                <wsp:All>
                    <sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                        <wsp:Policy>
                            <sp:InitiatorToken>
                                <wsp:Policy>
                                    <sp:X509Token
                                            sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                                        <wsp:Policy>
                                            <sp:WssX509V1Token11/>
                                        </wsp:Policy>
                                    </sp:X509Token>
                                </wsp:Policy>
                            </sp:InitiatorToken>
                            <sp:RecipientToken>
                                <wsp:Policy>
                                    <sp:X509Token
                                            sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
                                        <wsp:Policy>
                                            <sp:WssX509V1Token11/>
                                        </wsp:Policy>
                                    </sp:X509Token>
                                </wsp:Policy>
                            </sp:RecipientToken>
                            <sp:AlgorithmSuite>
                                <wsp:Policy>
                                    <sp:TripleDesRsa15/>
                                </wsp:Policy>
                            </sp:AlgorithmSuite>
                            <sp:Layout>
                                <wsp:Policy>
                                    <sp:Lax/>
                                </wsp:Policy>
                            </sp:Layout>
                            <sp:IncludeTimestamp/>
                            <sp:EncryptSignature/>
                            <sp:OnlySignEntireHeadersAndBody/>
                            <sp:SignBeforeEncrypting/>
                        </wsp:Policy>
                    </sp:AsymmetricBinding>
                    <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                        <sp:Body/>
                    </sp:SignedParts>
                    <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                        <sp:Body/>
                    </sp:EncryptedParts>
                    <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                        <wsp:Policy>
                            <sp:MustSupportRefIssuerSerial/>
                        </wsp:Policy>
                    </sp:Wss10>
                </wsp:All>
            </wsp:ExactlyOne>
        </wsp:Policy>


    После этого создал пары ключей
    keytool -genkey -keyalg RSA -sigalg SHA1withRSA -validity 730 -alias myservicekey -keypass skpass -storepass sspass -keystore serviceKeystore.jks -dname "cn=localhost"
    keytool -genkey -keyalg RSA -sigalg SHA1withRSA -validity 730 -alias myclientkey  -keypass ckpass -storepass cspass -keystore clientKeystore.jks -dname "cn=clientuser"
    
    keytool -export -rfc -keystore clientKeystore.jks -storepass cspass -alias myclientkey -file MyClient.cer
    keytool -export -rfc -keystore serviceKeystore.jks -storepass sspass -alias myservicekey -file MyService.cer
    
    keytool -import -trustcacerts -keystore serviceKeystore.jks -storepass sspass -alias myclientkey -file MyClient.cer -noprompt
    keytool -import -trustcacerts -keystore clientKeystore.jks -storepass cspass -alias myservicekey -file MyService.cer -noprompt


    После этого оставалось только все настроить и собрать в одну кучу.
    Создаем файл с настройками server.properties в него помешаем следующие настройки
    org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
    org.apache.ws.security.crypto.merlin.keystore.type=jks
    org.apache.ws.security.crypto.merlin.keystore.password=sspass
    org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
    org.apache.ws.security.crypto.merlin.file=serviceKeystore.jks

    На реализацию интерфейса добавляем несколько аннотаций
    @EndpointProperties(value = {
            @EndpointProperty(key = SecurityConstants.SIGNATURE_PROPERTIES, value = "server.properties"),
            @EndpointProperty(key = SecurityConstants.ENCRYPT_PROPERTIES, value = "server.properties"),
            @EndpointProperty(key = SecurityConstants.SIGNATURE_USERNAME, value = "myservicekey"),
            @EndpointProperty(key = SecurityConstants.ENCRYPT_USERNAME, value = "myclientkey"),
            @EndpointProperty(key = SecurityConstants.CALLBACK_HANDLER, value = "org.company.wsse.handler.KeystorePasswordCallback")
    })
    @WebService(portName = "hwPort",
            serviceName = "hw",
            wsdlLocation = "WEB-INF/wsdl/hw.wsdl",
            targetNamespace = "http://wsssampl.company.org/",
            endpointInterface = "org.company.wsse.IHelloWorld")
    public class HelloWorldImpl implements IHelloWorld {
    }


    После этого остается только создать клиента и радоваться.
    Привет рабочего сервиса и клиента взять тут https://github.com/crowar/cxf-ws-security
    Ответ написан
    Комментировать