Re: AW: AW: Splitting a tapestry web app into modules

2015-04-23 Thread Charlouze
g) Allow tapestry to add advisors
h) it seems correct to me

look there, it may help you :
https://tapestry.apache.org/integrating-with-jpa.html

Le jeu. 23 avr. 2015 à 16:21, Poggenpohl, Daniel 
daniel.poggenp...@isst.fraunhofer.de a écrit :

 Hello,

 I have regressed to the old 2.0 namespace. Your version would probably
 work also because you don't use 2.1 specific XML elements, I think. I don't
 know what those are and I don't plan on using them right now, so I'll leave
 it at that.

 And presto: Suddenly I have tables that are generated in the database.
 Which (of course) leads me to another problem. I now have an EntityManager
 I can use, so I try to store my testdata in the database, which doesn't
 seem to work. I'm guessing that Tapestry doesn't commit the transactions.

 I had added @CommitAfter to the controller methods that I use. The
 Controller itself and the DAOs are binded as services. The Controllers are
 non-proxied, though, as they do not have interfaces right now.

 g) What's does proxying services enable me to do?

 I also added the following to AppModule
 @Match({*Controller, *DAO})
 public static void adviseTransactionally(JpaTransactionAdvisor
 advisor, MethodAdviceReceiver receiver) {
advisor.addTransactionCommitAdvice(receiver);
 }

 Which, as far as I know, tells Tapestry that my *Controller and *DAO
 classes may have @CommitAfter annotations, and if those are encountered,
 Tapestry should commit the transaction and open a new one.
 My controller creates some database objects and persists them using the
 DAO classes.

 h) Is this correct? And have I done everything that I need to?

 Regards,
 Daniel P.


 -Ursprüngliche Nachricht-
 Von: Charlouze [mailto:m...@charlouze.com]
 Gesendet: Donnerstag, 23. April 2015 15:48
 An: Tapestry users
 Betreff: Re: AW: AW: Splitting a tapestry web app into modules

 Im using JPA 2.1 and:
 persistence xmlns=http://java.sun.com/xml/ns/persistence; version=1.0

 Le jeu. 23 avr. 2015 à 15:38, Poggenpohl, Daniel 
 daniel.poggenp...@isst.fraunhofer.de a écrit :

  Hello again,
 
  I've come to a breakthrough with the problem in b.2):
  My persistence.xml is being parsed using the
  org.apache.tapestry5.internal.jpa.PersistenceContentHandler.
  This XML handler checks for
  private static final String NAMESPACE_URI = 
  http://java.sun.com/xml/ns/persistence;;
 
  My old single module project was using JPA 2.0, which had the
  following
  XML:
  persistence xmlns=http://java.sun.com/xml/ns/persistence;
  version=2.0
  And that was that. So it was all okay and good.
 
  But now I'm using JPA 2.1 (not because of real reasons, so I can still
  downgrade...)
  So my XML is like this:
  persistence version=2.1
  xmlns=http://xmlns.jcp.org/xml/ns/persistence; xmlns:xsi=
  http://www.w3.org/2001/XMLSchema-instance;
  xsi:schemaLocation=http://xmlns.jcp.org/xml/ns/persistence
  http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd;
 
  Okay, do I have to regress back to JPA 2.0? Or can I still use 2.1 via
  changes to the persistence.xml?
 
  Regards,
  Daniel P.
 
  -Ursprüngliche Nachricht-
  Von: Poggenpohl, Daniel [mailto:daniel.poggenp...@isst.fraunhofer.de]
  Gesendet: Donnerstag, 23. April 2015 13:47
  An: Tapestry users
  Betreff: AW: AW: AW: Splitting a tapestry web app into modules
 
  Hi,
 
  thank you for your time, but I still have more questions...
  e) Are the [...]Module classes to be placed in the services package in
  the Tapestry app module?
  f) Is the naming important? Or could I have a FooModule class without
  having a Foo module?
 
  And another topic has arisen, which leads me back to b):
  b.2) I've had the persistence.xml placed in the dao-hibernate module,
  under src/main/java/META-INF/persistence.xml.
  When I started the application and want to fill the database, no
  entity manager can be found.
 
  Error:  Unable to locate a single EntityManager. You must provide the
  persistence unit name as defined in the persistence.xml using the
  @PersistenceContext annotation.
 
  I only have one persistence unit defined: appUnit.
 
  Each of my DAO classes is basically doing this:
  @PersistenceContext(unitName=appUnit)
  private EntityManager em;
 
  public GlobalDAOImpl(final EntityManager newEm) {
  this.em = newEm;
  }
 
  Am I doing something wrong here? Or should the persistence.xml be in a
  different place?
 
  Regards,
  Daniel P.
 
  -Ursprüngliche Nachricht-
  Von: Charlouze [mailto:m...@charlouze.com]
  Gesendet: Donnerstag, 23. April 2015 13:22
  An: Tapestry users
  Betreff: Re: AW: AW: Splitting a tapestry web app into modules
 
  Yep it's correct and no, there isn't any order.
 
  Each of your modules should have its own ModuleNameModule class. This
  class should contain a public static void bind(ServiceBinder binder)
  method where services are bound to the tapestry registry.
 
  An implementation of service

Re: AW: AW: Splitting a tapestry web app into modules

2015-04-23 Thread Charlouze
Hey !

You can define your DAO as service and get any other services you need in
your DAO by adding parameters to your DAO constructor.

Le jeu. 23 avr. 2015 à 11:23, Poggenpohl, Daniel 
daniel.poggenp...@isst.fraunhofer.de a écrit :

 Hi everyone,

 thank you for adressing my questions, I think that helped me to accomplish
 my goal.

 One more question for the moment:
 d) My dao-hibernate module, the DAO implementation module using hibernate
 as a persistence provider...
 Previously, in my single module project, I would have the DAO
 implementation running as a service in Tapestry. Doing it that way, I could
 @Inject the appropriate EntityManager.
 I know I can still run the DAOs as services in Tapestry if I add them in
 AppModule.
 But how do I receive the appropriate EntityManager without @Inject? Is
 there another simple way or do I have to manually create the EntityManager?

 (I know that I can add a dependency to tapestry5-annotations)

 Regards,
 Daniel P.

 -Ursprüngliche Nachricht-
 Von: Charlouze [mailto:m...@charlouze.com]
 Gesendet: Mittwoch, 22. April 2015 16:59
 An: Tapestry users
 Betreff: Re: AW: AW: Splitting a tapestry web app into modules

 hey !

 here is my thoughts about your concerns :

 a) controllers should be services that are bound to the registry in a
 ControllerModule class.

 b) persistence.xml file should probably be in your dao-hibernate module.
 You can configure where to find this file in a Module class.

 c) thiago already answer this one :D

 Cheers,
 Charles

 Le mer. 22 avr. 2015 à 16:43, Thiago H de Paula Figueiredo 
 thiag...@gmail.com a écrit :

  On Wed, 22 Apr 2015 10:53:01 -0300, Poggenpohl, Daniel
  daniel.poggenp...@isst.fraunhofer.de wrote:
 
   Hello,
 
  Hi!
 
   First, to be generic with my DAO interfaces, I can't use
   @CommitAfter on them, because then I'd need a dependency to
 tapestry-jpa.
 
  If you use 5.4-beta-22 or up, you don't need to put the annotation in
  the interface anymore: you can put it on the service (in your case,
  DAO) implementation. Problem solved! :D
 
  If you're not using 5.4-beta-22 or up, you can come up with your own
  annotation and adapt the tapestry-jpa class which does the service
  decoration or advice, JpaTransactionAdvisor, then add this in module
 class:
 
  @Match(*DAO)
  public static void adviseTransactionally(
YourJpaTransactionAdvisor advisor,
MethodAdviceReceiver receiver) {
 
 advisor.addTransactionCommitAdvice(receiver);
  }
 
  --
  Thiago H. de Paula Figueiredo
  Tapestry, Java and Hibernate consultant and developer
  http://machina.com.br
 
  -
  To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
  For additional commands, e-mail: users-h...@tapestry.apache.org
 
 



Re: AW: AW: Splitting a tapestry web app into modules

2015-04-23 Thread Charlouze
If your service is bound to the registry via a ServiceBinder then it should.

Le jeu. 23 avr. 2015 à 11:50, Poggenpohl, Daniel 
daniel.poggenp...@isst.fraunhofer.de a écrit :

 Hi,

 do you mean that if I add an EntityManager as a parameter to my service
 constructor, the appropriate EntityManager is inserted as a parameter value
 by Tapestry? Like in other methods in AppModule that I read about?

 Regards,
 Daniel P.

 -Ursprüngliche Nachricht-
 Von: Charlouze [mailto:m...@charlouze.com]
 Gesendet: Donnerstag, 23. April 2015 11:37
 An: Tapestry users
 Betreff: Re: AW: AW: Splitting a tapestry web app into modules

 Hey !

 You can define your DAO as service and get any other services you need in
 your DAO by adding parameters to your DAO constructor.

 Le jeu. 23 avr. 2015 à 11:23, Poggenpohl, Daniel 
 daniel.poggenp...@isst.fraunhofer.de a écrit :

  Hi everyone,
 
  thank you for adressing my questions, I think that helped me to
  accomplish my goal.
 
  One more question for the moment:
  d) My dao-hibernate module, the DAO implementation module using
  hibernate as a persistence provider...
  Previously, in my single module project, I would have the DAO
  implementation running as a service in Tapestry. Doing it that way, I
  could @Inject the appropriate EntityManager.
  I know I can still run the DAOs as services in Tapestry if I add them
  in AppModule.
  But how do I receive the appropriate EntityManager without @Inject? Is
  there another simple way or do I have to manually create the
 EntityManager?
 
  (I know that I can add a dependency to tapestry5-annotations)
 
  Regards,
  Daniel P.
 
  -Ursprüngliche Nachricht-
  Von: Charlouze [mailto:m...@charlouze.com]
  Gesendet: Mittwoch, 22. April 2015 16:59
  An: Tapestry users
  Betreff: Re: AW: AW: Splitting a tapestry web app into modules
 
  hey !
 
  here is my thoughts about your concerns :
 
  a) controllers should be services that are bound to the registry in a
  ControllerModule class.
 
  b) persistence.xml file should probably be in your dao-hibernate module.
  You can configure where to find this file in a Module class.
 
  c) thiago already answer this one :D
 
  Cheers,
  Charles
 
  Le mer. 22 avr. 2015 à 16:43, Thiago H de Paula Figueiredo 
  thiag...@gmail.com a écrit :
 
   On Wed, 22 Apr 2015 10:53:01 -0300, Poggenpohl, Daniel
   daniel.poggenp...@isst.fraunhofer.de wrote:
  
Hello,
  
   Hi!
  
First, to be generic with my DAO interfaces, I can't use
@CommitAfter on them, because then I'd need a dependency to
  tapestry-jpa.
  
   If you use 5.4-beta-22 or up, you don't need to put the annotation
   in the interface anymore: you can put it on the service (in your
   case,
   DAO) implementation. Problem solved! :D
  
   If you're not using 5.4-beta-22 or up, you can come up with your own
   annotation and adapt the tapestry-jpa class which does the service
   decoration or advice, JpaTransactionAdvisor, then add this in module
  class:
  
   @Match(*DAO)
   public static void adviseTransactionally(
 YourJpaTransactionAdvisor advisor,
 MethodAdviceReceiver receiver) {
  
  advisor.addTransactionCommitAdvice(receiver);
   }
  
   --
   Thiago H. de Paula Figueiredo
   Tapestry, Java and Hibernate consultant and developer
   http://machina.com.br
  
   
   - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
   For additional commands, e-mail: users-h...@tapestry.apache.org
  
  
 



Re: AW: AW: Splitting a tapestry web app into modules

2015-04-23 Thread Charlouze
Im using JPA 2.1 and:
persistence xmlns=http://java.sun.com/xml/ns/persistence; version=1.0

Le jeu. 23 avr. 2015 à 15:38, Poggenpohl, Daniel 
daniel.poggenp...@isst.fraunhofer.de a écrit :

 Hello again,

 I've come to a breakthrough with the problem in b.2):
 My persistence.xml is being parsed using the
 org.apache.tapestry5.internal.jpa.PersistenceContentHandler.
 This XML handler checks for
 private static final String NAMESPACE_URI = 
 http://java.sun.com/xml/ns/persistence;;

 My old single module project was using JPA 2.0, which had the following
 XML:
 persistence xmlns=http://java.sun.com/xml/ns/persistence;
 version=2.0
 And that was that. So it was all okay and good.

 But now I'm using JPA 2.1 (not because of real reasons, so I can still
 downgrade...)
 So my XML is like this:
 persistence version=2.1
 xmlns=http://xmlns.jcp.org/xml/ns/persistence; xmlns:xsi=
 http://www.w3.org/2001/XMLSchema-instance;
 xsi:schemaLocation=http://xmlns.jcp.org/xml/ns/persistence
 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd;

 Okay, do I have to regress back to JPA 2.0? Or can I still use 2.1 via
 changes to the persistence.xml?

 Regards,
 Daniel P.

 -Ursprüngliche Nachricht-
 Von: Poggenpohl, Daniel [mailto:daniel.poggenp...@isst.fraunhofer.de]
 Gesendet: Donnerstag, 23. April 2015 13:47
 An: Tapestry users
 Betreff: AW: AW: AW: Splitting a tapestry web app into modules

 Hi,

 thank you for your time, but I still have more questions...
 e) Are the [...]Module classes to be placed in the services package in the
 Tapestry app module?
 f) Is the naming important? Or could I have a FooModule class without
 having a Foo module?

 And another topic has arisen, which leads me back to b):
 b.2) I've had the persistence.xml placed in the dao-hibernate module,
 under src/main/java/META-INF/persistence.xml.
 When I started the application and want to fill the database, no entity
 manager can be found.

 Error:  Unable to locate a single EntityManager. You must provide the
 persistence unit name as defined in the persistence.xml using the
 @PersistenceContext annotation.

 I only have one persistence unit defined: appUnit.

 Each of my DAO classes is basically doing this:
 @PersistenceContext(unitName=appUnit)
 private EntityManager em;

 public GlobalDAOImpl(final EntityManager newEm) {
 this.em = newEm;
 }

 Am I doing something wrong here? Or should the persistence.xml be in a
 different place?

 Regards,
 Daniel P.

 -Ursprüngliche Nachricht-
 Von: Charlouze [mailto:m...@charlouze.com]
 Gesendet: Donnerstag, 23. April 2015 13:22
 An: Tapestry users
 Betreff: Re: AW: AW: Splitting a tapestry web app into modules

 Yep it's correct and no, there isn't any order.

 Each of your modules should have its own ModuleNameModule class. This
 class should contain a public static void bind(ServiceBinder binder)
 method where services are bound to the tapestry registry.

 An implementation of service should have a constructor where parameters
 are other services you want to inject in order to use them (and optionally
 the contribution parameter).

 Le jeu. 23 avr. 2015 à 12:08, Poggenpohl, Daniel 
 daniel.poggenp...@isst.fraunhofer.de a écrit :

  Hi again,
 
  so how flexible is this? I'm currently thinking about adding the
  tapestry-annotations dependency to my controller who needs to @Inject
  the DAOs. But if the DAOs themselves are declared as services, then I
  could add the necessary DAO interfaces to my controller constructor as
  parameters and also wouldn't need to @Inject them, if I understand you.
 
  Is this correct? And is there a specific order that the services must
  be added to the binder?
 
  Regards,
  Daniel P.
 
  -Ursprüngliche Nachricht-
  Von: Charlouze [mailto:m...@charlouze.com]
  Gesendet: Donnerstag, 23. April 2015 11:54
  An: Tapestry users
  Betreff: Re: AW: AW: Splitting a tapestry web app into modules
 
  If your service is bound to the registry via a ServiceBinder then it
  should.
 
  Le jeu. 23 avr. 2015 à 11:50, Poggenpohl, Daniel 
  daniel.poggenp...@isst.fraunhofer.de a écrit :
 
   Hi,
  
   do you mean that if I add an EntityManager as a parameter to my
   service constructor, the appropriate EntityManager is inserted as a
   parameter value by Tapestry? Like in other methods in AppModule that
   I
  read about?
  
   Regards,
   Daniel P.
  
   -Ursprüngliche Nachricht-
   Von: Charlouze [mailto:m...@charlouze.com]
   Gesendet: Donnerstag, 23. April 2015 11:37
   An: Tapestry users
   Betreff: Re: AW: AW: Splitting a tapestry web app into modules
  
   Hey !
  
   You can define your DAO as service and get any other services you
   need in your DAO by adding parameters to your DAO constructor.
  
   Le jeu. 23 avr. 2015 à 11:23, Poggenpohl, Daniel 
   daniel.poggenp...@isst.fraunhofer.de a écrit :
  
Hi everyone,
   
thank you for adressing my questions, I think that helped me

Re: AW: AW: Splitting a tapestry web app into modules

2015-04-23 Thread Charlouze
Yep it's correct and no, there isn't any order.

Each of your modules should have its own ModuleNameModule class. This class
should contain a public static void bind(ServiceBinder binder) method
where services are bound to the tapestry registry.

An implementation of service should have a constructor where parameters are
other services you want to inject in order to use them (and optionally the
contribution parameter).

Le jeu. 23 avr. 2015 à 12:08, Poggenpohl, Daniel 
daniel.poggenp...@isst.fraunhofer.de a écrit :

 Hi again,

 so how flexible is this? I'm currently thinking about adding the
 tapestry-annotations dependency to my controller who needs to @Inject the
 DAOs. But if the DAOs themselves are declared as services, then I could add
 the necessary DAO interfaces to my controller constructor as parameters and
 also wouldn't need to @Inject them, if I understand you.

 Is this correct? And is there a specific order that the services must be
 added to the binder?

 Regards,
 Daniel P.

 -Ursprüngliche Nachricht-
 Von: Charlouze [mailto:m...@charlouze.com]
 Gesendet: Donnerstag, 23. April 2015 11:54
 An: Tapestry users
 Betreff: Re: AW: AW: Splitting a tapestry web app into modules

 If your service is bound to the registry via a ServiceBinder then it
 should.

 Le jeu. 23 avr. 2015 à 11:50, Poggenpohl, Daniel 
 daniel.poggenp...@isst.fraunhofer.de a écrit :

  Hi,
 
  do you mean that if I add an EntityManager as a parameter to my
  service constructor, the appropriate EntityManager is inserted as a
  parameter value by Tapestry? Like in other methods in AppModule that I
 read about?
 
  Regards,
  Daniel P.
 
  -Ursprüngliche Nachricht-
  Von: Charlouze [mailto:m...@charlouze.com]
  Gesendet: Donnerstag, 23. April 2015 11:37
  An: Tapestry users
  Betreff: Re: AW: AW: Splitting a tapestry web app into modules
 
  Hey !
 
  You can define your DAO as service and get any other services you need
  in your DAO by adding parameters to your DAO constructor.
 
  Le jeu. 23 avr. 2015 à 11:23, Poggenpohl, Daniel 
  daniel.poggenp...@isst.fraunhofer.de a écrit :
 
   Hi everyone,
  
   thank you for adressing my questions, I think that helped me to
   accomplish my goal.
  
   One more question for the moment:
   d) My dao-hibernate module, the DAO implementation module using
   hibernate as a persistence provider...
   Previously, in my single module project, I would have the DAO
   implementation running as a service in Tapestry. Doing it that way,
   I could @Inject the appropriate EntityManager.
   I know I can still run the DAOs as services in Tapestry if I add
   them in AppModule.
   But how do I receive the appropriate EntityManager without @Inject?
   Is there another simple way or do I have to manually create the
  EntityManager?
  
   (I know that I can add a dependency to tapestry5-annotations)
  
   Regards,
   Daniel P.
  
   -Ursprüngliche Nachricht-
   Von: Charlouze [mailto:m...@charlouze.com]
   Gesendet: Mittwoch, 22. April 2015 16:59
   An: Tapestry users
   Betreff: Re: AW: AW: Splitting a tapestry web app into modules
  
   hey !
  
   here is my thoughts about your concerns :
  
   a) controllers should be services that are bound to the registry in
   a ControllerModule class.
  
   b) persistence.xml file should probably be in your dao-hibernate
 module.
   You can configure where to find this file in a Module class.
  
   c) thiago already answer this one :D
  
   Cheers,
   Charles
  
   Le mer. 22 avr. 2015 à 16:43, Thiago H de Paula Figueiredo 
   thiag...@gmail.com a écrit :
  
On Wed, 22 Apr 2015 10:53:01 -0300, Poggenpohl, Daniel
daniel.poggenp...@isst.fraunhofer.de wrote:
   
 Hello,
   
Hi!
   
 First, to be generic with my DAO interfaces, I can't use
 @CommitAfter on them, because then I'd need a dependency to
   tapestry-jpa.
   
If you use 5.4-beta-22 or up, you don't need to put the annotation
in the interface anymore: you can put it on the service (in your
case,
DAO) implementation. Problem solved! :D
   
If you're not using 5.4-beta-22 or up, you can come up with your
own annotation and adapt the tapestry-jpa class which does the
service decoration or advice, JpaTransactionAdvisor, then add this
in module
   class:
   
@Match(*DAO)
public static void adviseTransactionally(
  YourJpaTransactionAdvisor advisor,
  MethodAdviceReceiver receiver) {
   
   advisor.addTransactionCommitAdvice(receiver);
}
   
--
Thiago H. de Paula Figueiredo
Tapestry, Java and Hibernate consultant and developer
http://machina.com.br
   
--
--
- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
   
   
  
 

 -
 To unsubscribe

Re: AW: AW: Splitting a tapestry web app into modules

2015-04-22 Thread Thiago H de Paula Figueiredo
On Wed, 22 Apr 2015 10:53:01 -0300, Poggenpohl, Daniel  
daniel.poggenp...@isst.fraunhofer.de wrote:



Hello,


Hi!

First, to be generic with my DAO interfaces, I can't use @CommitAfter on  
them, because then I'd need a dependency to tapestry-jpa.


If you use 5.4-beta-22 or up, you don't need to put the annotation in the  
interface anymore: you can put it on the service (in your case, DAO)  
implementation. Problem solved! :D


If you're not using 5.4-beta-22 or up, you can come up with your own  
annotation and adapt the tapestry-jpa class which does the service  
decoration or advice, JpaTransactionAdvisor, then add this in module class:


   @Match(*DAO)
   public static void adviseTransactionally(
 YourJpaTransactionAdvisor advisor,
 MethodAdviceReceiver receiver) {

  advisor.addTransactionCommitAdvice(receiver);
   }

--
Thiago H. de Paula Figueiredo
Tapestry, Java and Hibernate consultant and developer
http://machina.com.br

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



Re: AW: AW: Splitting a tapestry web app into modules

2015-04-22 Thread Charlouze
hey !

here is my thoughts about your concerns :

a) controllers should be services that are bound to the registry in a
ControllerModule class.

b) persistence.xml file should probably be in your dao-hibernate module.
You can configure where to find this file in a Module class.

c) thiago already answer this one :D

Cheers,
Charles

Le mer. 22 avr. 2015 à 16:43, Thiago H de Paula Figueiredo 
thiag...@gmail.com a écrit :

 On Wed, 22 Apr 2015 10:53:01 -0300, Poggenpohl, Daniel
 daniel.poggenp...@isst.fraunhofer.de wrote:

  Hello,

 Hi!

  First, to be generic with my DAO interfaces, I can't use @CommitAfter on
  them, because then I'd need a dependency to tapestry-jpa.

 If you use 5.4-beta-22 or up, you don't need to put the annotation in the
 interface anymore: you can put it on the service (in your case, DAO)
 implementation. Problem solved! :D

 If you're not using 5.4-beta-22 or up, you can come up with your own
 annotation and adapt the tapestry-jpa class which does the service
 decoration or advice, JpaTransactionAdvisor, then add this in module class:

 @Match(*DAO)
 public static void adviseTransactionally(
   YourJpaTransactionAdvisor advisor,
   MethodAdviceReceiver receiver) {

advisor.addTransactionCommitAdvice(receiver);
 }

 --
 Thiago H. de Paula Figueiredo
 Tapestry, Java and Hibernate consultant and developer
 http://machina.com.br

 -
 To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
 For additional commands, e-mail: users-h...@tapestry.apache.org