Hello KasunG,
OK. I generated the osgi bundle for OpenJPA with the following POM 'plugin
configuration':
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Export-Package>javax.*, org.apache.openjpa.*</Export-Package>
<Private-Package>serp.*</Private-Package>
<Include-Resource>@openjpa-all-${version.openjpa}.jar!/META-INF/*,
@openjpa-all-${version.openjpa}.jar!/templates/*,
@openjpa-all-${version.openjpa}.jar!/testpool.jocl
</Include-Resource>
<Import-Package>com.ibm.*;resolution:=optional</Import-Package>
<DynamicImport-Package>*</DynamicImport-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
But now, I am back to the initial error which occured when I just included
OpenJPA in the lib/ directory of the connector:
<openjpa-2.4.2-r422266:1777108 fatal user error>
org.apache.openjpa.persistence.ArgumentException: The persistence provider
is attempting to use properties in the persistence.xml file to resolve the
data source. A Java Database Connectivity (JDBC) driver or data source
class name must be specified in the openjpa.ConnectionDriverName or
javax.persistence.jdbc.driver property. The following properties are
available in the configuration:
"org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@2655aabb".
So, I think this is because the persistence.xml in not detected in the
META-INF of my OSGI JPA project. Here is the buil and dependencies
configuration in the POM:
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Meta-Persistence>/META-INF/persistence.xml</Meta-Persistence>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Import-Package>org.apache.openjpa.*, javax.persistence</Import-Package>
<!-- <Include-Resource>META-INF/persistence.xml</Include-Resource> -->
<DynamicImport-Package>*</DynamicImport-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>openjpa</artifactId>
<version>2.4.2</version>
<type>bundle</type>
</dependency>
</dependencies>
Do you think I missed something to declare the persistence.xml in my JPA
project?
2017-05-05 14:36 GMT+02:00 KasunG Gajasinghe <[email protected]>:
>
> That is probably because when creating an osgi bundle, EI simply wraps
> around the existing jar. So, any META-INF/services you had will be hidden
> under that wrapped jar.
>
> You can create your own osgi bundle via maven using a simple pom.xml like
> this. In there, you need to mention three things.
>
> 1. Your maven dependency for openjpa-all
> 2. Export packages - the openjpa-all has several such as -
> org.apache.openjpa.*, serp.*
> 3. Specify the resource files to copy
>
> This ought to do it.
>
> [1] https://github.com/wso2/orbit/blob/master/hazelcast/3.
> 5.4.wso2v2/pom.xml
>
> On Fri, May 5, 2017 at 2:07 PM, Thomas LEGRAND <
> [email protected]> wrote:
>
>> Hello,
>>
>> That seems to be OK :)
>>
>> osgi> p org.apache.openjpa.persistence
>> org.apache.openjpa.persistence; version="0.0.0"<openjpa_all_2.4.2_1.0.0
>> [132]>
>> org.apache.openjpa.persistence; version="2.3.0"<tomee_1.7.2.wso2v2 [632]>
>> compass_2.0.1.wso2v2 [54] imports
>> tomcat_7.0.75.wso2v1 [627] imports
>> osgi> ss openjpa
>> "Framework is launched."
>>
>>
>> id State Bundle
>> 132 ACTIVE openjpa_all_2.4.2_1.0.0
>> osgi>
>>
>> So, I deployed my little JPA project and I can see that my package is
>> "registered":
>>
>> osgi> p my.little.project.jpa
>> my.little.project.jpa; version="1.0.0"<mylittleproject-jpa_1.0.0 [60]>
>> synapse-core_2.1.7.wso2v13 [619] imports
>> osgi>
>>
>> So I tried to invoke my class to retrieve an EntityManager and now, I
>> have:
>>
>> javax.persistence.PersistenceException: Failed to load provider from
>> META-INF/services
>>
>> I think that it is because the services/ directory in the META-INF in the
>> openjpa bundle is not parsed and I don't know what to do because this is
>> not me who generate the OSGi bundle but the ESB at startup.
>>
>> Do you have an idea?
>>
>> Regards,
>>
>> Thomas
>>
>>
>> 2017-05-04 20:37 GMT+02:00 KasunG Gajasinghe <[email protected]>:
>>
>>>
>>> I do not think openjpa register any osgi services. Can you check whether
>>> the package is exposed? Also verify the status of the openjpa bundle.
>>>
>>> osgi> p org.apache.openjpa.persistence
>>> osgi> ss openjpa
>>>
>>> On Thu, May 4, 2017 at 7:01 PM, Thomas LEGRAND <
>>> [email protected]> wrote:
>>>
>>>> Hello again :)
>>>>
>>>> I retrieved the openjpa-all-2.4.2.jar file and dropped it in the
>>>> <WSO2_ESB_HOME>/lib
>>>> directory to let the runtime taking care of the bundle generation during
>>>> the startup. The effect was the generation of the file
>>>> openjpa_all_2.4.2_1.0.0.jar in the directory <WSO2_ESB_HOME>/dropins.
>>>>
>>>> I restarted the EI with:
>>>>
>>>> D:\ProjetESB\wso2ei-6.0.0\bin> .\integrator.bat -DosgiConsole=19444
>>>>
>>>> So I can connect to the OSGI console via telnet. But, when I try to
>>>> retrieve the objectclasses starting with org.apache.openjpa.*, I have
>>>> nothing :(
>>>>
>>>> osgi> services (objectclass=org.apache.openjpa.*)
>>>> "No registered services."
>>>>
>>>> Am I missing something?
>>>>
>>>> Regards,
>>>>
>>>> Thomas
>>>>
>>>> 2017-05-04 10:49 GMT+02:00 KasunG Gajasinghe <[email protected]>:
>>>>
>>>>> Hi Thomas,
>>>>>
>>>>> Well, the connector itself cannot be deployed as an osgi bundle. But,
>>>>> you can call classes in osgi bundles from your connector. So, place your
>>>>> JPA logic in an osgi bundle and add it to dropins/ folder. Then, call that
>>>>> from your connector.
>>>>>
>>>>> This should give you flexibility over your classloading. I cannot
>>>>> comment on JPA stuff though.
>>>>>
>>>>> On Thu, May 4, 2017 at 1:26 PM, Thomas LEGRAND <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hello KasunG,
>>>>>>
>>>>>> I forgot to mention that I am using wso2ei-6.0.0.
>>>>>>
>>>>>> During the build of my connector, I noticed that a .jar is created
>>>>>> with the .zip for the connector so I tried to deploy it. Actually, I
>>>>>> tried
>>>>>> the following directories and my sequence does not find any of the
>>>>>> components like if my connector was not deployed :
>>>>>> - <WSO2_ESB_HOME>/repository/components/dropins (this directory did
>>>>>> not exist so I created it)
>>>>>> - <WSO2_ESB_HOME>/dropins
>>>>>>
>>>>>> In addition, I don't find anything in the documentation mentioning
>>>>>> that we can deploy connectors as an OSGi bundle :(
>>>>>>
>>>>>> When I deploy the .zip of the connector via the interface, it is
>>>>>> deployed in <WSO2_ESB_HOME>/repository/deployment/server/synapse-libs
>>>>>> which is the same directory used by Synapse:
>>>>>> http://synapse.apache.org/userguide/template_library.html
>>>>>>
>>>>>> Concerning the "architecture" of my component, I deployed a .zip with
>>>>>> a META-INF directory containing the persistence.xml but I don't think it
>>>>>> is
>>>>>> used like the absence of mention in the Synaspe documentation above. :)
>>>>>> Then, I call OpenJPA with the following lines:
>>>>>>
>>>>>> EntityManagerFactory emf = Persistence.createEntityManage
>>>>>> rFactory("my-pu");
>>>>>> EntityManager mgr = emf.createEntityManager();
>>>>>>
>>>>>> But then, I have the exception.
>>>>>>
>>>>>> I made a topic on StackOverflow one or two weeks ago:
>>>>>> https://stackoverflow.com/questions/43538743/wso2-is-there-a
>>>>>> -way-to-use-jpa-in-a-custom-connector
>>>>>>
>>>>>> I you know a documentation to generate an OSGi bundle for a
>>>>>> connector, I am very interested. :)
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Thomas
>>>>>>
>>>>>> 2017-05-03 18:29 GMT+02:00 KasunG Gajasinghe <[email protected]>:
>>>>>>
>>>>>>> You are working in an OSGi environment, so you need to be thinking
>>>>>>> from the osgi classloading perspective. Each osgi bundle under
>>>>>>> repository/components/{plugins,dropins} has its own classloader and
>>>>>>> a classpath.
>>>>>>>
>>>>>>> Hence, the place you put your persistence.xml is important. I'm not
>>>>>>> sure how you call OpenJPA, so I cannot comment on what steps to follow.
>>>>>>> But
>>>>>>> in essence, re-build your connector as an osgi bundle (its just a jar
>>>>>>> with
>>>>>>> a set of manifest entries in MANIFEST.MF), and place it in
>>>>>>> repository/components/dropins. I have not tested this myself though.
>>>>>>>
>>>>>>> Regards,
>>>>>>> KasunG
>>>>>>>
>>>>>>>
>>>>>>> On Wed, May 3, 2017 at 8:38 PM, Thomas LEGRAND <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hello everybody,
>>>>>>>>
>>>>>>>> I am currently writing a custom connector to retrieve information
>>>>>>>> from a database. Because the mediators to do so does not fit my needs,
>>>>>>>> I am
>>>>>>>> using a custom Java class which is currently implemented to retrieve a
>>>>>>>> DataSource via the JNDI name I configured in the ESB interface. That
>>>>>>>> works
>>>>>>>> nicely :)
>>>>>>>>
>>>>>>>> But then, for maintenance purpose, I would like to use JPA
>>>>>>>> (preferably, the OpenJPA implementation :)) but it is like the
>>>>>>>> persistence.xml is not even read. :(
>>>>>>>> My libraries are placed in the lib/ directory in the generated zip
>>>>>>>> of my connector and I don't have any problem using the classes of
>>>>>>>> OpenJPA.
>>>>>>>> Actually, just this error message appears:
>>>>>>>>
>>>>>>>> 1 INFO [PassThroughMessageProcessor-313] openjpa.Runtime -
>>>>>>>> Starting OpenJPA 2.4.0
>>>>>>>> org.apache.openjpa.persistence.ArgumentException:
>>>>>>>> The persistence provi der is attempting to use properties in the
>>>>>>>> persistence.xml file to resolve the data source. A Java Database
>>>>>>>> Connectivity (JDBC) driver or data source class name must be specified
>>>>>>>> in
>>>>>>>> the openjpa.ConnectionDriverName or javax.persistence.jdbc.driver
>>>>>>>> property.
>>>>>>>> The following properties are available in the configuration:
>>>>>>>> "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@442ce698".
>>>>>>>>
>>>>>>>> In the persistence.xml, you have the following content :
>>>>>>>>
>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> <persistence version="2.0" xmlns="http://java.sun.com/xml
>>>>>>>> /ns/persistence"
>>>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>>>>>>> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>>>>>>>> <persistence-unit name="my-pu" transaction-type="RESOURCE_LOC
>>>>>>>> AL">
>>>>>>>> <provider>org.apache.openjpa.p
>>>>>>>> ersistence.PersistenceProviderImpl</provider>
>>>>>>>> <jta-data-source>jdbc/MyDataSource</jta-data-source>
>>>>>>>> </persistence-unit>
>>>>>>>> </persistence>
>>>>>>>>
>>>>>>>> Is there some hidden magic to make it work?
>>>>>>>>
>>>>>>>> Thank you :)
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> Thomas
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Dev mailing list
>>>>>>>> [email protected]
>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> *Kasun Gajasinghe*Associate Technical Lead, WSO2 Inc.
>>>>>>> email: kasung AT spamfree wso2.com
>>>>>>> linked-in: http://lk.linkedin.com/in/gajasinghe
>>>>>>> blog: http://kasunbg.org
>>>>>>> phone: +1 650-745-4499 <(650)%20745-4499>, 77 678 0813
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> *Kasun Gajasinghe*Associate Technical Lead, WSO2 Inc.
>>>>> email: kasung AT spamfree wso2.com
>>>>> linked-in: http://lk.linkedin.com/in/gajasinghe
>>>>> blog: http://kasunbg.org
>>>>> phone: +1 650-745-4499 <(650)%20745-4499>, 77 678 0813
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> *Kasun Gajasinghe*Associate Technical Lead, WSO2 Inc.
>>> email: kasung AT spamfree wso2.com
>>> linked-in: http://lk.linkedin.com/in/gajasinghe
>>> blog: http://kasunbg.org
>>> phone: +1 650-745-4499 <(650)%20745-4499>, 77 678 0813
>>>
>>>
>>
>>
>
>
> --
>
> *Kasun Gajasinghe*Associate Technical Lead, WSO2 Inc.
> email: kasung AT spamfree wso2.com
> linked-in: http://lk.linkedin.com/in/gajasinghe
> blog: http://kasunbg.org
> phone: +1 650-745-4499 <(650)%20745-4499>, 77 678 0813
>
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev